Centrale Informatique optionnelle MP 2017

Thème de l'épreuve Mots synchronisants
Principaux outils utilisés automates, files, parcours de graphe, logique
Mots clefs mot synchronisant, machine, graphe d'automate, SAT, réduction SAT

Corrigé

 :
👈 gratuite pour tous les corrigés si tu crées un compte
👈 l'accès aux indications de tous les corrigés ne coûte que 1 € ⬅ clique ici
👈 gratuite pour tous les corrigés si tu crées un compte
- - - - -
👈 gratuite pour ce corrigé si tu crées un compte
- - - - - - - - - - - - - - - - - - - - - - - - -

Énoncé complet

(télécharger le PDF)
                 

Rapport du jury

(télécharger le PDF)
     

Énoncé obtenu par reconnaissance optique des caractères


î. '» Option informatique N

'à, F'
_/ MPO

tnncuuns EENTHHLE-SUPËLEE 4 heures Calculatrices autorisées N

Mots synchronisants

Notations
-- Pour tout ensemble fini E, on note |E | son cardinal.

-- On appelle machine tout triplet (Q, E, 6) où Q est un ensemble fini non vide 
dont les éléments sont appelés
états, E un ensemble fini non vide appelé alphabet dont les éléments sont 
appelés lettres et 5 une application
de Q >< E dans Q appelée fonction de transition. Une machine correspond donc à un automate déterministe complet sans notion d'état initial ou d'états finaux. -- Pour un état q et une lettre :c, on note q.æ : ô(q,æ). -- L'ensemble des mots (c'est--à--dire des concaténations de lettres) sur l'alphabet E est noté E*. -- Le mot vide est noté 5. -- On note ua: le mot obtenu par la concaténation du mot a et de la lettre a:. -- On note 6* l'extension a Q >< E* de la fonction de transition 6 définie par {W EUR Q, 5*(q58) = q V(q,oe,u) EUR Q >< E >< E*, 5*(q,oeu) : 5*(6(q,æ),u) -- Pour un état (1 de Q et un mot m de E*, on note encore q.m pour désigner 5*(q,m). Pour deux états q et q', q' est dit accessible depuis q s'il existe un mot 11. tel que q' : q.u. On dit qu'un mot m de E* est synchronisant pour une machine (Q, E, 6) s'il existe un état 110 de Q tel que pour tout état q de Q, q.m : q0. L'existence de tels mots dans certaines machines est utile car elle permet de ramener une machine dans un état particulier connu en lisant un mot donné (donc en pratique de la « réinitialiser » par une succession précise d'ordres passés a la machine réelle). La partie I de ce problème étudie quelques considérations générales sur les mots synchronisants, la partie Il est consacrée à des problèmes algorithmiques classiques, la partie III relie le problème de la satisfiabilité d'une formule logique à celui de la recherche d'un mot synchronisant de longueur donnée dans une certaine machine et enfin la partie IV s'intéresse à l'étude de l'existence d'un mot synchronisant pour une machine donnée. Les parties 1, H et 111 peuvent être traitées indépendamment. La partie IV, plus technique, utilise la partie Il. Dans les exemples concrets de machines donnés plus loin, l'ensemble d'états peut être quelconque, de même que l'alphabet (E : {0,1}, {a, b,c} .). Par contre, pour la modélisation en Caml, l'alphabet E sera toujours considéré comme étant un intervalle d'entiers [[O,p -- 1]] où p : |E|. Une lettre correspondra donc a un entier entre 0 et p -- l. Un mot de 2* sera représenté par une liste de lettres (donc d'entiers). type lettre == int; ; type mot == lettre list; ; De même, en Caml, l'ensemble d'états Q d'une machine sera toujours considéré comme étant l'intervalle d'entiers [[O,n-- 1]] où n : |Q|. type etat == int;; Ainsi, la fonction de transition 6 d'une machine sera modélisée par une fonction Caml de signature etat --> lettre --> etat. On introduit alors le type machine

type machine = { n_etats : int ; n_lettres : int ; delta : etat --> lettre --> 
etat};;

n_etats correspond au cardinal de Q, n_lettres a celui de E et delta a la 
fonction de transition. Pour une
machine nommée M, les syntaxes M.n_etats, M.n_lettres ou M.delta permettent 
d'accéder a ses différents
paramètres. Dans le problème, on suppose que M.delta s'exécute toujours en 
temps constant.

Par exemple, on peut créer une machine M0 a trois états sur un alphabet a deux 
lettres ayant comme fonction
de transition la fonction fO donnée ci--après.

2017-03--06 19:53:58 Page 1/6 (°C) BY-NC-SA

let fO etat lettre = match etat,lettre with
0,0 --> 1

\.

\.

MMD--'HO
|--\OÎ--\O|--\
I
V
MOMOr--\

!
l
l
l
|
]

fO : int --> int --> int = 
let M0 = { n_etats = 3 ; n_1ettres = 2 ; delta = :EO };;

La figure 1 fournit une représentation de la machine M0-

0
0 1
1

Figure 1 La machine M0

On pourra observer que les mots 11 et 10 sont tous les deux synchronisants pour 
la machine M0-

Dans tout le sujet, si une question demande la complexité d'un programme ou 
d'un algorithme, on attend une
complexité temporelle exprimée en O(...).

I Considérations générales

I.A = Que dire de l'ensemble des mots synchronisants pour une machine ayant un 
seul état ?
Dans toute la suite du problème, on supposera que les machines ont au moins 
deux états.
I.B = On considère la machine M1 représentée figure 2. Donner un mot 
synchronisant pour M1 s'il en existe

un. Justifier la réponse.
< - >:_Ï@

CL

Figure 2 La machine M1

I. C = On considère la machine M2 représentée figure 3. Donner un mot 
synchronisant de trois lettres pour
]V[2. On ne demande pas de justifier sa réponse.

I.D = Écrire une fonction delta_etoile de signature machine --> etat --> mot 
--> etat qui, prenant en
entrée une machine M, un état q et un mot u, renvoie l'état atteint par la 
machine M en partant de l'état (] et
en lisant le mot u.

I.E = Écrire une fonction est_synchronisant de signature machine --> mot --> 
bool qui, prenant en entrée
une machine M et un mot u, dit si le mot u est synchronisant pour M.

I .F = Montrer que pour qu'une machine ait un mot synchronisant, il faut qu'il 
existe une lettre x et deux
états distincts de Q, q et q', tels que q.as : q'.æ.

I. G = Soit LS (M ) le langage des mots synchronisants d'une machine M : (Q, 2, 
5). On introduit la machine
des parties M : (Ô, E, 5) où @ est l'ensemble des parties de Q et où 5 est 
définie par

VP c Q, V3: 5 z, â(P,oe) : {5(p,OE), p EUR P}
I.G.1) Justifier que l'existence d'un mot synchronisant pour ]V[ se ramène à un 
problème d'accessibilité de

certain(s) états(s) depuis certain(s) état(s) dans la machine des parties.
I.G.2) En déduire que le langage LS (M ) des mots synchronisants de la machine 
M est reconnaissable.

2017-03--06 19:53:58 Page 2/6 OEC BY--NC-SA

a, c

b, d
Figure 3 M2 : une machine a 4 états

I.G.3) Déterminer la machine des parties associée à la machine M0 puis donner 
une expression régulière du
langage LS(MO).

I.H * Montrer que si l'on sait résoudre le problème de l'existence d'un mot 
synchronisant, on sait dire, pour
une machine M et un état % de M choisi, s'il existe un mot u tel que pour tout 
état q de Q, le chemin menant
de q a q.u passe forcément par (10.

II Algorithmes classiques

On appellera graphe d'automate tout couple (S, A) où S est un ensemble dont les 
éléments sont appelés sommets
et A une partie de S >< E >< S dont les éléments sont appelés arcs. Pour un arc (q, x, q"), 35 est l' étiquette de l'arc, q son origine et q' son extrémité. Un graphe d'automate correspond donc a un automate non déterministe sans notion d'état initial ou d'état final. Par exemple, avec 2 : {a,b} SO : {0,1,2,3,4,5} A0: {(O,b,0),(O,a,3),(0,b,2),(O,a,1),(1,a,l),(1,a,2),(2,b,1), (2,b,3),(2,b,4),(3,a,2),(4,a,1),(4,b,5),(5,a,1)} le graphe d'automate GO : (SO, A0) est représenté figure 4. Soient s et 5' deux sommets d'un graphe (S,/1). On appelle chemin de 5 vers 5' de longueur EUR toute suite d'arcs (sl,oel,s'l), (52,552, sé), ..., (Sg,æz, 52) de A telle que 51 : s, 52 : s' et pour tout i de [[1,EUR-- 1]], si : 51+1- L'étiquette de ce chemin est alors le mot æ1æ2....rg et on dit que s' est accessible depuis 5. En particulier, pour tout 5 EUR S, 5 est accessible depuis 5 par le chemin vide d'étiquette 5. b -->

@--

Figure 4 Le graphe d'automate Go

2017-03--06 19:53:58 Page 3/6 («à BY--NC-SA

Dans les programmes à écrire, un graphe aura toujours pour ensemble de sommets 
un intervalle d'entiers [[0, n--1]]
et l'ensemble des arcs étiquetés par E (comme précédemment supposé être un 
intervalle [[0, p-- 1]]) sera codé par
un vecteur de listes d'adjacence V : pour tout 5 E S', V. (s) est la liste 
(dans n'importe quel ordre) de tous les
couples (s', x) tel que (s, au, s') soit un arc du graphe. Pour des raisons de 
compatibilité ultérieure, les sommets
(qui sont, rappelons--le, des entiers) seront codés par le type etat.

Ainsi, avec l'alphabet E = {a, b}, la lettre a est codée 0 et la lettre b est 
codée 1 ; l'ensemble des arcs du graphe
GO, dont chaque sommet est codé par son numéro, admet pour représentation Caml :

VO : (etat * lettre) list vect = [|
[(0,1) ; (3,0) ; (2,1); (1,0)1;
[(1,0) ; (2,0)1;

[(1,1) ; (3,1); (4,1)1;

[(2,0)l ;
[(1,0) ; (5,1)l ;
[(1 , O)]
Il
II.A -- On veut implémenter une file d'attente à l'aide d'un vecteur 
circulaire. On définit pour cela un type

particulier nommé file par
type 'a file={tab : 'a vect; mutable deb: int; mutable fin: int; mutable vide: 
bool}

deb indique l'indice du premier élément dans la file et fin l'indice qui suit 
celui du dernier élément de la file,
vide indiquant si la file est vide. Les éléments sont rangés depuis la case deb 
jusqu'à la case précédent fin en
repartant a la case 0 quand on arrive au bout du vecteur (cf exemple). Ainsi, 
on peut très bien avoir l'indice
fin plus petit que l'indice deb. Par exemple, la file figure 5 contient les 
éléments 4, O, 1, 12 et 8, dans cet ordre,
avec fin=2 et deb=9.

fin deb

i i

12 8 7 2 5 3 1 16 3 4 0 1

Figure 5 Un exemple de file où fin < deb On rappelle qu'un champ mutable peut voir sa valeur modifiée. Par exemple, la syntaxe f . deb <-- 0 affecte la valeur 0 au champ deb de la file f. II.A.1) Écrire une fonction ajoute de signature 'a file --> 'a --> unit telle 
que ajoute f x ajoute x a
la fin de la file d'attente f. Si c'est impossible, la fonction devra renvoyer 
un message d'erreur, en utilisant
l'instruction failwith "File pleine".

II.A.2) Écrire une fonction retire de signature 'a file --> 'a telle que retire 
f retire l'élément en tête
de la file d'attente et le renvoie. Si c'est impossible, la fonction devra 
renvoyer un message d'erreur.

II.A.3) Quelle est la complexité de ces fonctions '?

On considère l'algorithme 1 s'appliquant à un graphe d'automate G = (S, A) et a 
un ensemble de sommets E
(on note n : |S| et 00, vide et rien des valeurs particulières).

II.B * Justifier que l'algorithme 1 termine toujours.
II. C * Donner la complexité de cet algorithme en fonction de |S | et |A|. On 
justifiera sa réponse.
II.D * Justifier qu'au début de chaque passage dans la boucle « tant que F 
n'est pas vide », si F contient

dans l'ordre les sommets 51,52, ...,s,., alors D{sl] g D{s2] < < Dis,] et D{sr] -- D{51] g 1. ILE * Pour 5 sommet de G, on note dS la distance de E a 5 c'est--à--dire la longueur d'un plus court chemin d'un sommet de E a 5 (avec la convention ds : oo s'il n'existe pas de tel chemin). II.E.1) Justifier brièvement qu'à la fin de l'algorithme, pour tout sommet 5, D{s] # 00 si et seulement si 5 est accessible depuis un sommet de E et que ds { D{s]. Que désigne alors c ? II.E.2) Montrer qu'en fait, a la fin, on a pour tout sommet s, D{s] : ds. Que vaut alors PLS] '? II.F * Écrire une fonction accessibles de signature ((etat*lettre) list) vect --> etat list --> int * int vect * (etat*lettre) vect
prenant en entrée un graphe d'automate (sous la forme de son vecteur de listes 
d'adjacence V) et un ensemble
E de sommets (sous la forme d'une liste d'états) et qui renvoie le triplet (c, 
D, P) calculé selon l'algorithme
précédent. Les constantes oo, vide et rien seront respectivement codées dans la 
fonction accessibles par --1,
(--2,--1) et (--1,--1).

2017-03--06 19:53:58 Page 4/6 (°C) BY-NC-SA

créer une file d'attente F, vide au départ
créer un tableau D dont les cases sont indexées par S et initialisées a 00
créer un tableau P dont les cases sont indexées par S et initialisées a vide
créer une variable 0 initialisée a n
pour tout 5 EUR E faire
insérer s a la fin de la file d'attente F
fixer Dis] à ()
fixer Pis] à rien
diminuer c de 1
fin pour
tant que F n'est pas vide faire
extraire le sommet s qui est en tête de F
pour tout arc (s,y, s') EUR A tel que D{s'] : oo faire
fixer Dls'] à D{s] + 1
fixer P{s'] a (s,y)
insérer s' a la fin de la file d'attente F
diminuer c de 1
fin pour
fin tant que
renvoyer (c,D,P)

Algorithme 1

II. G + Écrire une fonction chemin de signature etat --> (etat*lettre) vect --> 
mot qui, prenant en entrée
un sommet s et le vecteur P calculé à l'aide de la fonction accessibles sur un 
graphe G et un ensemble E,
renvoie un mot de longueur minimale qui est l'étiquette d'un chemin d'un sommet 
de E a s (ou un message
d'erreur s'il n'en existe pas).

III Réduction SAT

On s'intéresse dans cette partie a la satisfiabilité d'une formule logique 
portant sur des variables propositionnelles
331, ..., $.... On note classiquement /\ le connecteur logique « et », V le 
connecteur « ou » et f la négation d'une
formule f.

On appelle littéral une formule constituée d'une variable xi ou de sa négation 
.il-, on appelle clause une disjonction
de littéraux.

Considérons une formule logique sous forme normale conjonctive c'est--à--dire 
sous la forme d'une conjonction de
clauses. Par exemple,

F1:(aclVÆ2VOE3)A(æ1Voe4)A(æ2væ3\/æ4)

est une formule sous forme normale conjonctive formée de trois clauses et 
portant sur quatre variables proposi--
tionnelles @, @, mg et 554.

Soit F une formule sous forme normale conjonctive, composée de n clauses et 
faisant intervenir m variables. On
suppose les clauses numérotées cl, 02, ..., en. On veut ramener le problème de 
la satisfiabilité d'une telle formule
au problème de la recherche d'un mot synchronisant de longueur inférieure ou 
égale à m sur une certaine
machine. On introduit pour cela la machine suivante associée à F :

-- Q est formé de mn + n + 1 états, un état particulier noté f et n(m + 1) 
autres états qu'on notera q... avec
(i,j) EUR |Ï1,n]] >< |Ï1,m+ 1]] ; -- E = {0,1} ; -- 5 est défini par . f est un état puits, c'est--à--dire 6(f, O) : 5(f, 1) : f, . pour tout entier i de [[1, n]], 6(Qi,m+la O) : 5(Qi,m+1a 1) : f, 0 pour tout i dans [[1,n]] et j dans [[1,m]], f si le littéral a:j apparaît dans la clause ci q...;1 Sinon 5 0 7 f si le littéral @ apparaît dans la clause ci (qi--J' >_ q- - sinon
1,j+1

III .A + Représenter la machine associée à la formule F1.

2017--03--06 19:53:58 Page 5/6 (:c BY--NC-SA

III.B * Donner une distribution de vérité (v1,u2, u3,u4) EUR [[0,1]]4 (la 
valeur 1),- étant associée à la variable .r,--)
satisfaisant F1. Le mot u1u2u3u4 est--il synchronisant '?

III. C -- Montrer que tout mot u de longueur m + 1 est synchronisant. À quelle 
condition sur les qm.u un mot
u de longueur m est--il synchronisant '?

III.B * Montrer que si la formule F est satisfiable, toute distribution de 
vérité la satisfaisant donne un mot
synchronisant de longueur m pour l'automate.

II I .E * Inversement, prouver que si l'automate dispose d'un mot synchronisant 
de longueur inférieure ou égale
à m, F est satisfiable. Donner alors une distribution de vérité convenable.

IV Existence

On reprend dans cette partie le problème de l'existence d'un mot synchronisant 
pour une machine M.
IV.A * Soit M : (Q, E, 6) une machine.
Pour toute partie E de Q et tout mot u de E'", on note E.u : {q.u, q E E}.

IV.A.1) Soit u un mot synchronisant de M et u0,u1, ...,u,. une suite de 
préfixes de u rangés dans l'ordre
croissant de leur longueur et telle que ur : u. Que peut--on dire de la suite 
des cardinaux |Q.ui| '?

IV.A.2) Montrer qu'il existe un mot synchronisant si et seulement s'il existe 
pour tout couple d'états (q, q')
de Q2 un mot uq'q, tel que q.uq'q, : q'.uq7q,.
On veut se servir du critère établi ci--dessus pour déterminer s'il existe un 
mot synchronisant. Pour cela, on
associe a la machine M la machine M : (Q, E, 6) définie par :

-- @ est formé des parties a un ou deux éléments de Q ;

-- Sest définie par V(E,æ) EUR Ô>< E, Ë(E) : {5(q,æ), q E E}. IV.E * Si n : |Q|, que vaut % : |ô| ? IV. C * On a dit que pour la modélisation informatique, l'ensemble d'états d'une machine doit être modélisée par un intervalle [[0, n -- 1]]. @ doit donc être modélisé par l'intervalle [[O,ñ -- 1]]. Soit go,, une bijection de @ sur [[0, ñ-- 1]]. On suppose qu'on dispose d'une fonction set_to_nb de signature int --> (etat list) --> etat
telle que set_to_nb n EUR pour n élément de N* et EUR liste d'états renvoie

{an({i}) si EUR = m avec i & [[0,n-- 1]]
«pn({i,j}) si EUR = {ml avec (M") EUR [[OEn-- 1]]2, 1"  etat --> (etat
list) telle que nb_to_set n q pour n élément de N* et q élément de [[O,ñ -- 1]] 
renvoie une liste d'états de la
forme {i] ou {i, j] (avec i < j) correspondant à  etat --> lettre --> etat 
qui prenant en entrée une
machine M, un état q-- de @ et une lettre a:, renvoie l'état de @ atteint en 
lisant la lettre a: depuis l'état (] dans
M.

I V.D * Il est clair qu'à la machine llÎ, on peut associer un graphe d'automate 
5 dont l'ensemble des sommets
est @ et dont l'ensemble des arcs est {(q, a:, 5(q, du)), (q, 33) EUR Ô>< 2}. On associe alors à âle graphe retourné Ô'VR qui a les mêmes sommets que 5 mais dont les arcs sont retournés (ie (q, 35, q') est un arc de ÛR si et seulement si (q',a:,q) est un arc de (?). Écrire une fonction retourne_machine de signature machine --> ((etat*lettre) 
list) vect qui à partir
d'une machine M, calcule le vecteur Vdes listes d'adjacence du graphe 5R.

I V.E * Justifier qu'il suffit d'appliquer la fonction accessibles de la partie 
H au graphe âR et à l'ensemble

des sommets de 5R correspondant à des singletons pour déterminer si la machine 
M possède un mot synchro
nisant.

IV.F * Écrire une fonction existe_synchtonisant de signature machine --> bool 
qui dit si une machine
possède un mot synchronisant.

Jan Ôernÿ, chercheur slovaque, a conjecturé au milieu des années 60 que si une 
machine a n états possédait
un mot synchronisant, elle en avait un de longueur inférieure ou égale à (n-- 
1)2. La construction faite dans la
partie III afiîrme que la recherche, dans une machine, d'un mot synchronisant 
de longueur inférieure ou égale à
une valeur m fixée est au moins aussi difficile en terme de compleæité que 
celui de la satisfiabilité d'une formule
logique à m variables sous forme normale conjonctive (qu 'on sait être un 
problème « diflîcile »).

oooFlNooo

2017--03--06 19:53:58 Page 6/6 ,@c BY--NC-SA