Aller au contenu

Fiche de synthèse

Définition

AFD \(A = (Q, \Sigma, \delta, q_i, F)\)

  • un seul état initial
  • pas de choix : si \(q \xrightarrow{a} q'\) et \(q \xrightarrow{a} q''\) alors \(q' = q''\)

AFND \(A = (Q, \Sigma, \delta, I, F)\) : plusieurs états initiaux et choix

AFND\(\epsilon\) \(A = (Q, \Sigma, \delta, q_i, F)\) : un seul état initial, choix et transitions spontanées \(q \xrightarrow{\epsilon} q'\)

complet : toutes les transitions sont définies, \(\forall q \in Q, \forall a \in \Sigma, \exists q', q \xrightarrow{a} q'\)

émondé : \(\forall q \in Q, \exists q_f \in F, q_i \leadsto q \leadsto q_f\)

Fonction de transition

AFD \(\delta : Q \times \Sigma \rightarrow Q\) partielle

\((q, a) \in \mathop{dom}(\delta) \iff q \xrightarrow{a} \delta(q,a)\)

AFND \(\delta : Q \times \Sigma \rightarrow \mathcal{P}(Q)\)

AFND\(\epsilon\) \(\delta : Q \times (\Sigma \cup \{ \epsilon \}) \rightarrow \mathcal{P}(Q)\)

transition spontanée \(q \xrightarrow{\epsilon} q'\)

Fonction de transition étendue

AFD \(q_0 \xrightarrow{a_1} q_1 \dots \xrightarrow{a_n} q_n \Rightarrow \delta^*(q_0,a_1\dots a_n) = q_n\)

\(\delta^*(q,\epsilon) = q\qquad w \in \mathop{lang}(A) \iff \delta^*(q_i, w) \in F\)

AFND \(q_0 \xrightarrow{a_1} q_1 \dots \xrightarrow{a_n} q_n \Rightarrow q_n \in \delta^*(q_0,a_1\dots a_n)\)

\(\delta^*(q,\epsilon) = \{ q\} \qquad \delta^*(q,wa) = \bigcup_{q' \in \delta^*(q,w)} \delta(q',a)\)

\(w \in \mathop{lang}(A) \iff \left(\bigcup_{q_i \in I} \delta^*(q_i, w)\right) \cap F\neq \emptyset\)

AFND → AFD

\(A = (Q, \Sigma, \delta, I, F) \Rightarrow A'=(\mathcal{P}(Q), \Sigma, \delta', I, F')\)

\(\delta'(E,a) = \bigcup_{q \in E} \delta(q, a)\)

\(F' = \enscomp{E \subset Q}{E \cap F \neq \emptyset}\)

Un AFND (à gauche) et l'AFD obtenu par l'automate des parties (à droite) Un AFND (à gauche) et l'AFD obtenu par l'automate des parties (à droite)
Un AFND (à gauche) et l'AFD obtenu par l'automate des parties (à droite)

\[ \begin{array}{rr|c|c} & & a & b \\ \hline \rightarrow * & A = \{ 1, 2 \} & B & C \\ * & B = \{2, 3 \} & D & C \\ * & C = \{1, 3 \} & B & E \\ * & D = \{ 2 \} & \emptyset & C \\ * & E = \{ 3 \} & D & \emptyset \end{array} \]

AFNDε : clôture

\(\overline{q} = \enscomp{q'}{q \xrightarrow{\epsilon} \dots \xrightarrow{\epsilon} q'}\) (avec \(q \in \overline{q}\))

\(\delta^*(q,\epsilon) = \overline{q} \qquad \delta^*(q,wa) = \overline{\bigcup_{q' \in \delta^*(q,w)} \delta(q',a)}\)

AFNDε → AFND

\(A = (Q, \Sigma, \delta, q_i, F) \Rightarrow A'=(Q, \Sigma, \delta', \overline{q_i}, F)\)

\(\delta'(q,a) = \overline{\delta(q,a)}\)

Suppression des transitions epsilon : transitions ajoutées en orange, états émondés en gris Suppression des transitions epsilon : transitions ajoutées en orange, états émondés en gris
Suppression des transitions \(\epsilon\) : transitions ajoutées en orange, états émondés en gris

Thompson : expression régulière → AFNDε

\(A(\emptyset) =\)

\(\quad A(\epsilon) =\)

\(\forall a \in \Sigma, A(a) =\)

\(A(ee') =\)

\(A(e|e') =\)

\(A(e^*) =\)

Méthode de McNaughton-Yamada

\(Q = \range{1}{n}\), état initial \(1\).

\(R^{(k)}_{ij} =\) expression régulière dénotant les étiquettes des chemins \(i \leadsto j\) dont les états intermédiaires sont \(\le k\).

\(R^{(0)}_{ii} = \epsilon\) si \(i \not\rightarrow i \qquad R^{(0)}_{ii} = \epsilon | a_1 | \dots | a_p\) si \(i \xrightarrow{a_1} i, \dots, i \xrightarrow{a_p} i\)

\(i \neq j\) : \(R^{(0)}_{ij} = \emptyset\) si \(i \not\rightarrow j \qquad R^{(0)}_{ij} = a_1 | \dots | a_p\) si \(i \xrightarrow{a_1} j, \dots, i \xrightarrow{a_p} j\)

\(R^{(k)}_{ij} = R^{(k-1)}_{ij} | R^{(k-1)}_{ik} \left(R^{(k-1)}_{kk}\right)^* R^{(k-1)}_{kj}\)

Si \(F = \{ f_1, \dots, f_p \}\) :

\(R^{(n)}_{1 f_1} | \dots | R^{(n)}_{1 f_p}\)

Élimination des états - Brzozowski-McCluskey

EX-AF(N)D : automates avec des expressions régulières comme étiquettes.

Élimination de \(s\) :

On aboutit à :

Expression régulière associée : \((e_i | e e_f^* e')^* e e_f^*\)

Théorème de Kleene

régulier (ou rationnel) : dénoté par une expression régulière

reconnaissable : reconnu par un AFD

Théorème : un langage est régulier si et seulement s'il est reconnaissable par un AFD (ou par un AFND, ou par un AFND\(\epsilon\)).

Stabilité des langages réguliers

Les langages réguliers sont stables par union, intersection, complémentaire, étoile, concaténation, miroir.

Lemme de l'étoile

Si \(L\) est régulier, il existe \(n \in \N^*\) tel que tout \(w \in L\) avec \(|w| \ge n\) s'écrit \(w = xyz\) avec \(y \neq \epsilon\), \(|xy| \le n\) et \(x y^* z \subset L\).

Contraposée : soit \(L\) un langage sur \(\Sigma\). Si pour tout \(n \in \N^*\), il existe \(w \in L\) tel que \(|w| \ge n\) et que pour tout \(x, y, z \in \Sigma^*\) tels que \(w = x y z\), \(y \neq \epsilon\) et \(|xy| \le n\) il existe \(k \in \N\) avec \(x y^k z \not\in L\), alors \(L\) n'est pas régulier.

Langages locaux

\(L\) local ssi \(\exists P, S \subset \Sigma, N \subset \Sigma^2,\)

\[ L\backslash \{\epsilon\} = (P \Sigma^* \cap \Sigma^* S) \backslash \Sigma^* N \Sigma^* \]

Si \(L\) est local, on peut prendre :

\(P = \enscomp{a \in \Sigma}{\exists w \in \Sigma^*, aw \in L}\)

\(S = \enscomp{a \in \Sigma}{\exists w \in \Sigma^*, wa \in L}\)

\(\Sigma^2 \backslash N = \enscomp{ab \in \Sigma^2}{\exists w,v \in \Sigma^*, wabv \in L}\)

Automates locaux

AFD local : si \(q \xrightarrow{a} q_1\) et \(q' \xrightarrow{a} q_2\) alors \(q_1 = q_2\).

AFD standard : aucune transition n'arrive sur l'état initial.

langage local \(\iff\) reconnu par un AFD local \(\iff\) reconnu par un AFD local et standard.

Si \(P,S,N\) sont donnés : \(A = (\Sigma \cup \{\epsilon\}, \Sigma, \delta, \epsilon, S')\) avec

\[ S' = \begin{cases} S & \text{si } \epsilon \not\in L \\ S \cup \{\epsilon\}& \text{sinon} \end{cases} \]

\(\forall a \in P, \delta(\epsilon, a) = a \qquad \forall a, b \in \Sigma, ab \not\in N \Rightarrow \delta(a,b) = b\)

Berry-Sethi

Expression régulière linéaire : chaque lettre apparaît au plus une fois.

Linéarisation : \(a(a|b)cb^*a \Rightarrow a_1(a_2|b_1)cb_2^*a_3\)

\(e\) linéaire \(\Rightarrow \mathop{lang}(e)\) local : on calcule \(P\), \(S\), \(N\) par induction, on construit l'AFD local, puis on efface les indices pour obtenir un AFND reconnaissant l'expression de départ.

\(accv(\emptyset) = \perp \quad \forall a \in \Sigma, accv(a) = \perp \quad accv(\epsilon) =\top \quad accv(e^*) = \top\)

\(accv(e_1|e_2) = accv(e_1) \vee accv(e_2) \quad accv(e_1 e_2) = accv(e_1) \wedge accv(e_2)\)

Pour \(e\) ne contenant pas \(\emptyset\) (ou \(e = \emptyset\)) :

\(P(\emptyset) = \emptyset \quad \forall a \in \Sigma, P(a) = \{a\} \quad P(\epsilon) =\emptyset \quad P(e^*) = P(e)\)

\[ P(e_1|e_2) = P(e_1) \cup P(e_2) \quad P(e_1 e_2) = \begin{cases} P(e_1) \cup P(e_2) & \text{si } accv(e_1) \\ P(e_1) & \text{sinon} \end{cases} \]

\(S(\emptyset) = \emptyset \quad \forall a \in \Sigma, S(a) = \{a\} \quad S(\epsilon) =\emptyset \quad S(e^*) = S(e)\)

\[ S(e_1|e_2) = S(e_1) \cup S(e_2) \quad S(e_1 e_2) = \begin{cases} S(e_1) \cup S(e_2) & \text{si } accv(e_2) \\ S(e_2) & \text{sinon} \end{cases} \]

\(N(\emptyset) = N(\epsilon) = \Sigma^2 \quad \forall a\in \Sigma, N(a) = \Sigma^2 \quad N(e^*) = N(e) \backslash S(e)P(e)\)

\(N(e_1|e_2) = N(e_1) \cap N(e_2) \quad N(e_1 e_2) = (N(e_1) \cap N(e_2)) \backslash S(e_1) P(e_2)\)

Schéma global

Passages entre expressions régulières (violet) et automates (bleu) Passages entre expressions régulières (violet) et automates (bleu)
Passages entre expressions régulières (violet) et automates (bleu)