Examen INF232 2013 (corrigé de Michaël Périn)
Exercice 1
- VRAI: -> (1)-Sigma-> (1) est déterministe et complet, il reconnaît le langage {} puisqu'il n'a pas d'état accepteur.
- FAUX: Prenons L = {a} alors L* = {a}* n'est pas contenu dnas L puisque aa in L* et que aa not in L.
- FAUX: Prenons L=Sigma* alors L* = (Sigma*)* = Sigma*/ donc L=L* et donc L n'est pas strictement inclus dans L*.
- VRAI: Je suppose qu'on considère deux automates qui reconnaissent le même langage. Dans ce cas, si l'un des automates a moins d'états que l'autre, c'est que l'autre n'est pas minimal puisque la minimisation consiste à regrouper les états équivalents.
- FAUX: Contre-exemple : les deux automates ->((1))-a->((1)) et ->((1))-a->((1))-b->(2) reconnaissent le langage {a}*, sont déterministes et n'ont pas le même nombre d'états.
- VRAI: Il y a équivalence puisqu'on peut passer des expressions régulières aux automates minimaux par la méthode de Thompson puis l'élimination des epsilon-transitions puis la déterminisation puis la minimisation et inversement on peut passer des automates minimiaux aux expressions régulières par résolution des équations d'Arden associées à l'automate.
- FAUX: La correction partielle ne traite pas de la terminaison, elle l'a suppose en quelque sorte puisqu'elle consiste à prouver que « lorsque l'exécution atteint l'état qt alors la propriété associée à qt est satisfaite ».
- VRAI: pour tout x<0 dans Z, on peut choisir un y dans N tel que x+y>0 ; il suffit de choisir y=x+1.
Exercice 2
- On considère l'automate donné sous forme de tableau, il suffit alors de parcourir les cases du tableau pour vérifier qu'elles contiennent au plus une valeur (éventuellement aucune).
- Étant donnés deux automates A1 et A2 on cherche un algorithme qui permet de déterminer si Lang(A1)* est inclus dans Lang(A2).
Pour cela, on procède en deux étaptes : (a) on construit un automate K1 qui reconnait Lang(A1)* puis (b) on teste l'inclusion des langages Lang(K1) inclus? Lang(A2)
(a). pour construire K1 on prend l'automate A1 auquel on ajoute une espilon-transition de tout état accepteur vers tout état initial et on rend accepteur les états initiaux.
(b). Rappelons qu'un ensemble E est inclus dans F si et seulement si E inter comp(F) est vide. Donc pour (b) il nous faut tester si K1 x comp(A2) reconnaît le langage vide. On construit donc le produit K1 x comp(A2) puis on vérifie qu'aucun état accepteur n'est accessible depuis l'état initial.
Exercice 4
- a2.b4 appartient à L ainsi que a.bn. Par contre b.a n'appartient pas à L ni an.bn+1
- Si L était régulier alors il devrait satisfaire le critère de régularité.
Pour montrer que L est irrégulier, on va donc montrer que L ne satisfait pas le critère de régularité.
Autrement dit,
/Pour tout n,/
on peut trouver un mot w de L : on prend w = an.bn il appartient à L car n divise n
de taille >= n : |w|=2n >= n
tel que pour tout choix de x,y,z avec w=x.y.z et |x.y| <=n et |y|>0 : w s'écrit donc aX . aY. aZ .bn avec x = aX, y = aY, z = aZ.bn et Y>0 et X+Y+Z=n
on peut trouver un k de N tel que x.yk.z not in L
Pour montrer que x.yk.z not in L il faut montrer que
- |x.yk.z|a ne divise pas |x.yk.z|b
- ie. X + k.Y + Z ne divise pas n
- ie. X + Y + Z + (k-1) Y ne divise pas n
- ie. n + (k-1) Y ne divise pas n
- il suffit donc de trouver un k tel que n + (k-1) Y > n
- ie. tel que (k-1) Y > 0
Finalement, puisque Y>0 il suffit de choisir k tel que k-1>0 ie. k>1.
Exercice 5
On remarque que la variable b n'est jamais modifié au cours du programme on peut donc la considèrer comme une constante qu'on notera B
On considère donc le programme suivant
c:= B; p:= 0 ; while (c>0){ p:=p+B ; c:=c-1 }
Question 1.
A = (Sigma,Q,I,F,Delta) avec
- Q = {q0,q1,q2,qt},
- I = q0,
- F = {qt},
- Sigma = {"c:=B;p:=0", "c>0" , "c<=0" , "p:=p+B;c:=c-1"},
- Delta = { (q0, c:=B;p:=0, q1) , (q1,c<=0,qt) , (q1,c>0,q2) , (q2,p:=p+B;c:=c-1,q1) }
Question 4.
On choisit d'associer la propriété Pt := p = B2 /\ c=0 à l'état qt
La transition (q1,c<=0,qt) nous permet de choisir la propriété P1 en q1.
Soit s l'état de la mémoire en q1 et s' l'état de la mémoire en qt, la propriété P1 doit satisfaire l'implication :
[ P1 /\ c<=0 ] en s ==> [ Pt ] en s'
or s'= s puisqu'un test ne modifie pas la valeur des variables, donc l'implication se réecrit
[ P1 /\ c<=0 ==> Pt ] en s
[ P1 /\ c<=0 ==> p = B2 /\ c=0 ] en s
On choisit pour P1 := (1) B*c + p = B2 /\ (2) c>=0
L'implication est satisfaite puisque:
La transition (q2,p:=p+B;c:=c-1,q1) nous permet de déterminer la propriété P2 en q2
Soit s l'état de la mémoire en q2 et s'/ l'état de la mémoire en /q1, la propriété P2 doit satisfaire l'implication
[ P2 ] en s ==> [ P1 ] en s' avec s'(p) = s(p)+B , s'(c) = s(c)-1
[ P2 ] en s ==> [B*c + p = B2 /\ c>=0] en s'
[ P2 ] en s ==> B * s'(c) + s'(p) = B2 /\ s'(c)>=0
[ P2 ] en s ==> B * (s(c)-1) + s(p)+B = B2 /\ s(c)-1>=0
[ P2 ] en s ==> [ B * (c-1) + p+B = B2 /\ c-1>=0 ] en s
[ P2 ==> B * (c-1) + p+B = B2 /\ c-1>=0 ] en s
On choisit donc de prendre P2 := (3) B * (c-1) + p+B = B2 /\ (4) c-1>=0 et l'implication est trivialement satisfaite.
La transition (q1,c>0,q2) nous permet de vérifier nos choix de propriétés
Les propriétés P1 en q1 et P2 en q2 sont désormais fixées. Vérifions qu'elles satisfont l'implication
[P1 /\ c>0] en s =?=> [ P2 ] en s' avec s'=s
ie. [P1 /\ c>0 =?=> P2 ] en s
Autrement dit vérifions l'implication
(1) B*c + p = B2 /\ (2) c>=0 /\ [test] c>0 =?=> (3) B * (c-1) + p+B = B2 /\ (4) c-1>=0
Preuve: . (3) se simplifie en B*c + p = B2 et c'est exactement (1) donc (1) ==> (3) . puisque c est un entier, le test c>0 est équivalent à c>=1 ce qui démontre (4)
Enfin, la transition (q0, c:=B;p:=0, q1) nous permet de déterminser la pré-condition P0 en q0 du programme
Soit s l'état de la mémoire en q0 et s'/ l'état de la mémoire en /q1, la propriété P0 doit satisfaire l'implication
[ P0 ] en s ==> [ P1 ] en s' avec s'(c) = B , s'(p) = 0
[ P0 ] en s ==> [B*c + p = B2 /\ c>=0] en s'
[ P0 ] en s ==> B * s'(c) + s'(p) = B2 /\ s'(c)>=0
[ P0 ] en s ==> B * B + 0 = B2 /\ B>=0
[ P0 ] en s ==> [ B*B = B2 /\ B>=0 ] en s
[ P0 ==> B*B = B2 /\ B>=0 ] en s
qui se simplifie en
[ P0 ==> B>=0 ] en s
On choisit donc de prendre P0 := B>=0 comme précondition.
Exercice 3
Deux étapes :
Minimisation: A3 = Minimization de A2r (.pdf , .html)
Minimisation:
- initial partition = { {1,2,3,4,5} }
states 1 ≈/≈ 5 : NOT same accepting status So, {1,2,3,4,5} is splitted into {1,2,3,4} U {5}
states 1 ≈/≈ 2 : NOT same behavior on symbol 'b' So, {1,2,3,4} is splitted into {1,3} U {2,4}
states 2 ≈/≈ 4 : NOT same behavior on symbol 'c' So, {2,4} is splitted into {2} U {4}
- final partition = { {1,3} , {2} , {4} , {5} }