Feuille 1 Exercice 1 Exercice 2 Exercice 3 Exercice 4

Transcription

Feuille 1 Exercice 1 Exercice 2 Exercice 3 Exercice 4
Travaux Dirigés
Modèles de calcul et Validation d’algorithmes
2016/2017
L3 Miage
Université Grenoble Alpes
Feuille 1
Exercice 1
On considère les expressions arithmétiques définies dans le cours. Soit a ∈ Aexp et
σ et σ ′ deux états. Soit X l’ensemble des variables qui apparaissent dans a.
1. Montrer que A[a](σ[y 7→ n]) = A[a]σ si y n’apparait pas dans a.
2. Montrer que si σ(x) = σ ′ (x), pour tout x ∈ X, alors A[a]σ = A[a]σ ′ .
3. Soit a′ ∈ Aexp. Montrer que
A[a[a′ /x]]σ = A[a]σ[x 7→ A[a′ ]σ]
Exercice 2
Dérouler les règles de sémantique naturelle pour les programmes suivants, avec σ =
{x 7→ 2, y 7→ 1} :
• while ¬(x = 1) do (y := y ∗ x; x := x − 1) od
• while 1 ≤ x do (y := y ∗ x; x := x − 1) od
• while true do skip od
Exercice 3
Démontrer que les commandes suivantes sont sémantiquement équivalentes pour tous
S1 , S2 , S3 :
1. S1 ; (S2 ; S3 )
2. (S1 ; S2 ); S3
Montrer que S1 ; S2 n’est pas en général sémantiquement équivalent à S2 ; S1 .
Exercice 4
On veut ajouter la commande :
repeat S until b
au langage While.
1. Donner des règles sémantique pour définir repeat S until b sans utiliser la construction While.
2. Montrer que
(a) repeat S until b et
(b) S; if b then skip else (repeat S until b).
sont sémantiquement équivalentes.
1
On veut montrer que la commande repeat S until b n’augmente pas son pouvoir expressif. Pour ce faire, donner une fonction qui transforme tout programme avec la
commande repeat S until b en un programme dans le langage While.
La transformation donnée est-elle calculable? Comparez la taille d’un programme et
son image par la transformation.
Exercice 5
Donner une sémantique naturelle et une sémantique opérationnelle pour les expressions arithmétiques.
Exercice 6
On considère les programmes de l’exercice 2. Cette fois, σ est considéré quelconque.
Pour chacune des commandes, déterminer si :
1. Son exécution boucle dans tous les états
2. Elle s’arrête dans tous les états
Démontrez vos réponses.
Exercice 7
Supposons qu’on a (S1 ; S2 , σ) ⇒∗ (S2 , σ ′ ). Montrer qu’on n’a pas nécessairement
(S1 , σ) ⇒∗ σ ′ .
Exercice 8
Montrer les affirmations suivantes:
• Si (S1 , σ) ⇒k σ ′ alors (S1 ; S2 , σ) ⇒k (S2 ; σ ′ ).
• Si (S, σ) → σ ′ alors (S, σ) ⇒∗ σ ′ .
• Si (S1 ; S2 , σ) ⇒k σ ′′ alors il existe σ ′ et k1 avec :
(S1 , σ) ⇒k1 σ ′ et (S2 , σ ′ ) ⇒k−k1 σ ′′ .
• Si (S, σ) ⇒k σ ′ alors (S, σ) → σ ′ .
Exercice 9
Montrer que la sémantique opérationnelle structurelle du langage While est déterministe.
2
Travaux Dirigés
Modèles de calcul et Validation d’algorithmes
2016/2017
L3 Miage
Université Grenoble Alpes
Feuille 2
Exercice 10
Soit S le programme suivant :
x := 0; z := 1
While z ≤ y Do
x := x + z; z := z + 1;
od;
Utiliser la logique de Hoare pour montrer qu’on a
{y = n ∧ n > 0}S{x =
n × (n + 1)
}.
2
Exercice 11
Soit S le programme suivant :
u := 0;
While x > 1 Do
if pair(x) then x := x2 ; y := y ∗ 2 else x := x − 1; u := u + y
fi
od;
y := y + u;
Utiliser la logique de Hoare pour montrer qu’on a
{x = x0 ∧ y = y0 ∧ x0 > 0}S{y = x0 ∗ y0 .}
Exercice 12
Soit S le programme suivant :
u := 0;
While x ≥ 1 Do
While pair(x) Do
y := y ∗ 2; x := x2
od;
x := x − 1; u := u + y
od;
Utiliser la logique de Hoare pour montrer qu’on a
{x = x0 ∧ y = y0 ∧ x0 > 0}S{u = x0 ∗ y0 .}
Exercice 13
3
Donner un programme S qui satisfait la spécification suivante et qui n’utilise que
l’addition et la soustraction :
{x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0}S{z = n ∗ m}
Démontrer à l’aide de la logique de Hoare que votre programme satisfait la spécification.
Exercice 14
Donner un programme S qui satisfait la spécification suivante et qui n’utilise que
l’addition et la soustraction :
{x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0}S{z = nm }
Démontrer à l’aide de la logique de Hoare que votre programme satisfait la spécification.
Exercice 15
On considère la commande
For i = 1 to n do S od
N
où n est une constante dans
et S est une commande dans laquelle i n’est pas
modifé.
Donner une règle sémantique et une règle de Hoare pour cette commande.
Exercice 16
On ajoute la commande:
repeat S until b
au langage While. Donner une règle d’inférence pour repeat S until b. Montrer que
votre règle est correcte.
Exercice 17
Soit S le programme suivant :
i := 0;
While (i < length(t)) Do
if (t[i] > t[i + 1]) then
{aux := t[i]; t[i] := t[i + 1]; t[i + 1] := aux; }
else
{skip}
i := i + 1; od;
Utiliser la logique de Hoare pour montrer qu’on a
1.
2.
{true}S{∀j (0 ≤ j ∧ j < length(t)) ⇒ t[j] ≤ t[length(t) − 1] }.
{t = t0 }S{∃j (0 ≤ j ∧ j < length(t)) ∧ t[length(t) − 1] = t0 [j] }.
4
Exercice 18
Soit S le programme suivant :
i := 0; index := −1;
While (i < length(t)) Do
if (t[i] = 0) then
{index := index + 1; t[i] := t[index]; t[index] := 0; }
else
{skip}
i := i + 1; od;
def
Soit ZeroOuU n(t) = ∀j (0 ≤ j ∧ j < length(t) − 1) ⇒ (t[j] = 0 ∨ t[j] = 1) et soit
def Plength(t)−1
Somme(t) =
t[i].
i=0
Utiliser la logique de Hoare pour montrer
1.
{ZeroOuU n(t)}S{∀j (0 ≤ j ∧ j < length(t) − 1) ⇒ t[j] ≤ t[j + 1] }.
2.
{t = t0 }S{somme(t) = somme(t0 )}.
5
Travaux Dirigés
Modèles de calcul et Validation d’algorithmes
2016/2017
L3 Miage
Université Grenoble Alpes
Feuille 3
Exercice 19
Soit S1 le programme suivant :
read(x);
read(y);
p:=x*y;
while ((p>x) && (p>y)) do
if ((p%x=0) && (p%y=0)) then {ppcm:=p;}
p:=p-1;
od
write(ppcm);
1. Donner le graphe de contrôle du programme.
2. Donner l’expression des chemins de contrôle sous forme algébrique.
3. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous les noeuds.
4. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous les arcs.
5. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous-les-chemins-indépendants.
Exercice 20
Manifestement, le code ne fonctionne pas lorsque les valeurs données en entrée sont
égales. On propose de corriger l’erreur et on obtient le programme suivant S2 :
read(x);
read(y);
p:=x*y;
if (x=y) then ppcm:=x;
else
while ((p>x) && (p>y)) do
if ((p%x=0) && (p%y=0)) then {ppcm:=p;}
p:=p-1;
od
write(ppcm);
1. Donner le graphe de contrôle du programme.
2. Donner l’expression des chemins de contrôle sous forme algébrique.
3. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous les noeuds.
4. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous les arcs.
6
5. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous-les-chemins-indépendants.
Exercice 21
Il existe toujours un problème avec le code du programme S2 , qui apparait lorsque
le ppcm est égal à l’une des entrées. Proposez une correction du bug. Soit S3 le
programme obtenu.
1. Donner le graphe de contrôle du programme.
2. Donner l’expression des chemins de contrôle sous forme algébrique.
3. Proposer un jeu de testes qui couvre le programme suivant le critère
ture de tous les noeuds.
4. Proposer un jeu de testes qui couvre le programme suivant le critère
ture de tous les arcs.
5. Proposer un jeu de testes qui couvre le programme suivant le critère
ture de condition-décision multiple.
6. Proposer un jeu de testes qui couvre le programme suivant le critère
ture de tous-les-chemins-indépendants.
de couverde couverde couverde couver-
Exercice 22
L’UE “Validation d’alg” de L3Miage cherche un moyen qui permettrait de motiver
ses étudiants. Les éxperts décident qu’il faut un programme qui demande à chaque
étudiant d’entrer ses notes (de Contrôle Continue) n1 et n2 sur 20, qui calcule et
affiche la moyenne des deux notes et qui affiche les appréciations suivantes selon les
cas.
Appréciations
Conditions
Mettez vous au travail !
pour une moyenne comprise entre 0 et 5 (exclu)
Travaillez plus !
pour une moyenne entre 5 et 10 (exclu)
Résultats encourageants
si la moyenne vaut 10 et que les notes n1, n2
sont égales ou croissantes
Résultats trop justes
si la moyenne vaut 10 et que les notes n1, n2
sont décroissantes
Vous pouvez encore progresser
si la moyenne est inférieure à 15
Continuez ainsi
si la moyenne est supérieure ou égale à 15
Résultats stables
si n1 est égale à n2 et strictement supérieur à 7
Résultats désespérement stables si n1 est égale à n2 et inférieur à 7
Ne vous relchez pas
si n2 est moins bonne que n1
En légère progression
si la note n2 est meilleure que n1 mais que
l’écart est d’un point seulement
En nette progression
si la note n2 est meilleure que n1 avec
un écart de plus d’un point
Le programme doit afficher plusieurs appréciations lorsque plusieurs conditions sont
satsifaites.
Soit S4 le programme suivant :
7
read(n1) ;
read(n2) ;
moy = (n1+n2)/2 ;
printf("Moyenne : %2.2f/20", moy) ;
if (0<= moy && moy < 5)
then { write("\nMettez vous au travail !") ; }
if (5<= moy && moy <10)
then { write("\nTravaillez plus !") ; }
if (10 = moy) then { if (n1>=n2)
{ write("\nResultats encourageants.") ; }
else
{ write("\nResultats trop justes.") ; }
}
if (n1=n2) then { write("\nResultats ") ;
if (n1<=7) then { write("desesperement ") ; }
write("stables") ;
}
else
{ if (n2<n1) then
{ write("\nNe vous relachez pas.") ; }
else
{
if (n2<n1+1) then
{ write("\nEn legere progression.") ; }
else
{ write("\nEn nette progression.") ; }
}
}
if (moy < 15) then { write("\nVous pouvez encore progresser.") ; }
if (moy >= 15) then { write("\nContinuez ainsi.") ; }
1. Donner le graphe de contrôle des programmes.
2. Donner l’expression des chemins de contrôle sous forme algébrique.
3. Proposer un jeu de testes qui couvre les programmes suivant le critère
verture de tous les noeuds.
4. Proposer un jeu de testes qui couvre les programmes suivant le critère
verture de tous les arcs.
5. Proposer un jeu de testes qui couvre les programmes suivant le critère
verture de condition-décision multiple.
6. Proposer un jeu de testes qui couvre les programmes suivant le critère
verture de tous-les-chemins-indépendants.
7. Donner votre avis sur la correction du programme.
Exercice 23
Soit S5 le programme suivant :
scanf("%i",&a) ;
i=1;
primes[0] = 2;
8
de coude coude coude cou-
n = 3; count = 0;
while (count!=a) do {
i = 0;
found = 1;
if (n<=a)
while ( primes[i] && primes[i]*primes[i]<=n) {
if ( (n % primes[i]) == 0 ) {
found = 0;
break;
}
i:=i+1;
}
if ( found ) {
primes[i] = n;
count:=count+1;
}
n := n+2;
}
1. Donner le graphe de contrôle du programme.
2. Donner l’expression des chemins de contrôle sous forme algébrique.
3. Proposer un jeu de testes qui couvre le programme suivant le critère
ture de tous les noeuds.
4. Proposer un jeu de testes qui couvre le programme suivant le critère
ture de tous les arcs.
5. Proposer un jeu de testes qui couvre le programme suivant le critère
ture de condition-décision multiple.
6. Proposer un jeu de testes qui couvre le programme suivant le critère
ture de tous-les-chemins-indépendants.
de couverde couverde couverde couver-
Exercice 24
Spécification: Un programme complet qui demande à l’utilisateur deux entiers a
et b. On suppose que l’utilisateur donne des valeurs a b. Le programme doit afficher
les valeurs de i(i-1)-1 pour i compris entre a et b seulement si le nombre i(i-1)-1 est
un nombre premier. Exemple d’exécution
a=? 8
b=? 20
Nombres premiers de la forme i(i-1)-1 pour i dans [8,20] : 71 89 109 131 181 239 271
379
Soit S5 le programme suivant :
scanf("%i",&a) ; scanf("%i",&b) ;
printf("Nombres premiers de la forme i(i-1)-1 pour i dans [%i,%i] : ",a,b) ;
i=a;
while (i<=b){
q = i * (i-1) - 1 ;
d = 3;
while(q%d!=0 && d*d<=q){
d=d+2;
9
}
if ((q%d!=0)||(q%2!=0)) { printf("%i ",q) ; }
i:=i+1;
}
1. Donner le graphe de contrôle du programme.
2. Donner l’expression des chemins de contrôle sous forme algébrique.
3. Proposer un jeu de testes qui couvre le programme suivant le critère
ture de tous les noeuds.
4. Proposer un jeu de testes qui couvre le programme suivant le critère
ture de tous les arcs.
5. Proposer un jeu de testes qui couvre le programme suivant le critère
ture de condition-décision multiple.
6. Proposer un jeu de testes qui couvre le programme suivant le critère
ture de tous-les-chemins-indépendants.
7. Donner votre avis sur la correction du programmee S5 .
10
de couverde couverde couverde couver-
.
11
Travaux Dirigés
Modèles de calcul et Validation d’algorithmes
2016/2017
L3 Miage
Université Grenoble Alpes
Feuille 4
Exercice 25
Soit S1 le programme suivant :
read(n);
answer=1;
counter=1;
while (counter<=n) do {
answer:=answer*counter;
counter:= counter+1;
}
write(answer);
1. Donner le graphe de contrôle du programme.
2. Proposer un jeu de testes qui couvre le programme suivant
ture de toutes-les-définitions.
3. Proposer un jeu de testes qui couvre le programme suivant
ture de tous-les-utilisateurs.
4. Proposer un jeu de testes qui couvre le programme suivant
ture de tous-les-p-utilisateurs/quelques-c-utilisateurs.
5. Proposer un jeu de testes qui couvre le programme suivant
ture de tous-les-c-utilisateurs/quelques-p-utilisateurs.
6. Proposer un jeu de testes qui couvre le programme suivant
ture de tous-les-du-chemins.
le critère de couverle critère de couverle critère de couverle critère de couverle critère de couver-
Exercice 26
Soit S2 le programme suivant :
read(x);
if (x>0) {a:=x+1;}
if (x<=0){ while (x<1) do {x:=x+1;}
a:=x+1;
}
write(a);
1. Donner le graphe de contrôle du programme.
2. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de toutes-les-définitions.
3. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous-les-utilisateurs.
4. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous-les-p-utilisateurs/quelques-c-utilisateurs.
12
5. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous-les-c-utilisateurs/quelques-p-utilisateurs.
6. Proposer un jeu de testes qui couvre le programme suivant le critère de couverture de tous-les-du-chemins.
Exercice 27
Soit S3 le programme suivant :
scanf("%i",&a) ; scanf("%i",&b) ;
printf("Nombres premiers de la forme i(i-1)-1 pour i dans [%i,%i] : ",a,b) ;
i=a;
while (i<=b){
q = i * (i-1) - 1 ;
d = 3;
while(q%d!=0 && d*d<=q){
d=d+2;
}
if ((q%d!=0)||(q%2!=0)) { printf("%i ",q) ; }
i:=i+1;
}
1. Donner le graphe de contrôle du programme.
2. Proposer un jeu de testes qui couvre le programme suivant
ture de toutes-les-définitions.
3. Proposer un jeu de testes qui couvre le programme suivant
ture de tous-les-utilisateurs.
4. Proposer un jeu de testes qui couvre le programme suivant
ture de tous-les-p-utilisateurs/quelques-c-utilisateurs.
5. Proposer un jeu de testes qui couvre le programme suivant
ture de tous-les-c-utilisateurs/quelques-p-utilisateurs.
6. Proposer un jeu de testes qui couvre le programme suivant
ture de tous-les-du-chemins.
13
le critère de couverle critère de couverle critère de couverle critère de couverle critère de couver-
Travaux Dirigés
Modèles de calcul et Validation d’algorithmes
2016/2017
L3 Miage
Université Grenoble Alpes
Feuille 5
Exercice 28
Spécification : Si un élève a tous ces modules avec au moins 10/20 à chaque module
et au moins 12/20 de moyenne générale, il obtient son diplôme. Sinon, il peut
passer des rattrapages s’il a au moins 8/20 de moyenne générale, sinon il redouble.
De plus, certains modules sont prioritaires, et moins de 8/20 de moyenne á ces
modules empêche de passer les rattrapages et fait redoubler. Un éléve qui réussit ses
rattrapages passe.
1.
2.
3.
4.
5.
Déterminer les causes et les effets.
Quelles contraintes entre causes peut-on ajouter ?
Quelles contraintes entre effets peut-on ajouter ?
Construire le graphes cause-effets.
Donner la table de décision et déterminer les CTs (les choix de testes).
Exercice 29
Soit A1 l’automate suivant :
t1: a/0
s1
t2: a/0
t6: b/0
s2
t5: a/1
s3
t3: b/1
t4: b/1
1.
2.
3.
4.
Trouver une suite discriminante (si possible).
Trouver un ensemble discriminant.
Trouver pour chaque état une suite UIO (si possible).
Génerer une suite de test en utilisant la méthode DS (s’il existe une suite discriminante).
5. Génerer une suite de test en utilisant la méthode W.
6. Génerer une suite de test en utilisant la méthode UIO (s’il existe une suite UIO
pour chaque état).
Exercice 30
14
t1: a/0
s1
t6: b/1
t3: b/0
s2
t5: a/1
t2: a/0
s3
t4: b/1
Soit A2 l’automate suivant :
1.
2.
3.
4.
Trouver une suite discriminante (si possible).
Trouver un ensemble discriminant.
Trouver pour chaque état une suite UIO (si possible).
Génerer une suite de test en utilisant la méthode DS (s’il existe une suite discriminante).
5. Génerer une suite de test en utilisant la méthode W.
6. Génerer une suite de test en utilisant la méthode UIO (s’il existe une suite UIO
pour chaque état).
Exercice 31
Soit A3 l’automate suivant :
t1: a/0
s1
t2: a/0
t3: b/1
s2
t5: a/1
t6: b/1
s3
t4: b/1
1.
2.
3.
4.
Trouver une suite discriminante (si possible).
Trouver un ensemble discriminant.
Trouver pour chaque état une suite UIO (si possible).
Génerer une suite de test en utilisant la méthode DS (s’il existe une suite discriminante).
5. Génerer une suite de test en utilisant la méthode W.
6. Génerer une suite de test en utilisant la méthode UIO (s’il existe une suite UIO
pour chaque état).
15
Travaux Dirigés
Modèles de calcul et Validation d’algorithmes
2016/2017
L3 Miage
Université Grenoble Alpes
Feuille 6
Machines de Turing
Exercice 32
Soit M la machine de Turing donnée par (Q, Σ, Γ, ∆, q0 , ✷, F ) o :
• Q = {q0 , q1 , q2 , q3 , q4 }.
• Σ = {a, b}.
• Γ = {a, b, X, Y, ✷}.
∆ = {(q0 , a, D, X, q1 ), (q0 , Y, D, Y, q3 ), (q1 , a, D, a, q1 ),
(q1 , b, G, Y, q2 ), (q1 , Y, D, Y, q1 ), (q2 , a, G, a, q2 ),
•
(q2 , X, D, X, q0 ), (q2 , Y, G, Y, q2 ), (q3 , Y, D, Y, q3 ),
(q3 , ✷, D, ✷, q4 )}
• q0 est l’état initial.
• F = {q4 }
1.
2.
3.
4.
Le mot a2 b2 est-il accepté par M ?
Le mot a2 b3 est-il accepté par M ?
Le mot a3 b2 est-il accepté par M ?
Quel langage est reconnu par cette machine?
Exercice 33
Soit Σ = {a, b, c} et L = {an bm cn+m | n, m ∈
Montrer que L est récursif.
N}.
Exercice 34
Soit Σ = {a, b}. Par n|m, on dénote que n divise m, pour n, m ∈
Soit L = {an bm | n|m}. Montrer que L est récursif.
Exercice 35
Soit Σ = {a, b}.
2
Montrer que L = {an | n ∈
N} est récursif.
16
N.
Travaux Dirigés
Modèles de calcul et Validation d’algorithmes
2016/2017
L3 Miage
Université Grenoble Alpes
Feuille 7
Exercice 36
Par la suite et comme en cours hM i représente le mot qui code la machine de Turing
M.
Soient:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Lǫ = {hM i | ǫ ∈ L(M )}.
Lu = {hM i | u ∈ L(M )}.
Lne = {hM i | L(M ) 6= ∅}.
Le = {hM i | L(M ) = ∅}.
Lk = {hM i | |L(M )| ≥ k}.
LΣ∗ = {hM i | L(M ) = Σ∗ }.
Lf = {hM i | L(M ) est fini}.
Lreg = {hM i | L(M ) est régulier}.
Lhc = {hM i | L(M ) est hors contexte}.
Lr = {hM i | L(M ) ∈ R}.
Lnr = {hM i | L(M ) 6∈ R}.
Montrer les assertions suivantes:
1.
2.
3.
4.
5.
6.
7.
8.
Aucun des langages ci-dessus n’est récursif.
Lǫ ∈ RE.
Lu ∈ RE.
Lne ∈ RE.
Le 6∈ RE.
Lk ∈ RE.
Lr 6∈ RE.
Lnr 6∈ RE.
17