From 536f9a4d8db29242e59c84b62f4fb605c0907388 Mon Sep 17 00:00:00 2001
From: "David A. Madore" <david+git@madore.org>
Date: Sun, 29 Oct 2017 19:21:44 +0100
Subject: Clarifications on the state elimination algorithm.

---
 notes-inf105.tex | 71 +++++++++++++++++++++++++++++++++++++++++---------------
 1 file changed, 52 insertions(+), 19 deletions(-)

(limited to 'notes-inf105.tex')

diff --git a/notes-inf105.tex b/notes-inf105.tex
index b1d7737..5949a8b 100644
--- a/notes-inf105.tex
+++ b/notes-inf105.tex
@@ -3070,7 +3070,17 @@ rationnelle conduit à l'automate de Glushkov de cette même expression.
 
 
 
-\subsection{Automates à transitions étiquetées par des expressions rationnelles (=RNFA)}\label{subsection-rnfa-and-kleenes-algorithm}
+\subsection{Automates à transitions étiquetées par des expressions rationnelles (=RNFA), algorithme d'élimination des états}\label{subsection-rnfa-and-kleenes-algorithm}
+
+\thingy On cherche dans cette section à montrer la réciproque
+de \ref{rational-languages-are-recognizable}.  On va pour cela donner
+un algorithme (très coûteux !) qui transforme un automate en
+expression rationnelle (dénotant le langage qu'il reconnaît).  Cette
+algorithme « d'élimination des états » fonctionne naturellement sur
+une sorte d'automate encore plus générale que tous ceux que nous avons
+définis jusqu'à présent : on va donc commencer par définir ces
+automates, même si leur intérêt réside presque uniquement en la preuve
+de \ref{recognizable-languages-are-rational} ci-dessous.
 
 \thingy\label{definition-rnfa} Un \defin[automate fini à transitions
   étiquetées par des expressions rationnelles]{automate fini
@@ -3089,8 +3099,8 @@ alphabet $\Sigma$ est la donnée
 \end{itemize}
 Autrement dit, on autorise maintenant des transitions étiquetées par
 des expressions rationnelles quelconques sur $\Sigma$.  Remarquons
-qu'on doit maintenant demander explicitement que l'ensemble $\delta$
-des transitions permises soit fini car l'ensemble $Q \times
+qu'on doit maintenant demander \emph{explicitement} que l'ensemble
+$\delta$ des transitions permises soit fini car l'ensemble $Q \times
 (\mathrm{regexp}(\Sigma)) \times Q$, lui, ne l'est pas.
 
 \thingy\label{rnfa-multiple-transition-relation} Pour un tel automate, on définit une relation $\delta^*
@@ -3127,7 +3137,8 @@ l'expression $r$ elle-même.  Il est évident que ce RNFA reconnaît
 exactement le langage dénoté par $r$.
 
 La représentation graphique des RNFA ne pose pas de problème
-particulier.
+particulier (voir en \ref{example-of-state-elimination} pour
+différents exemples).
 
 \thingy\label{give-rnfa-single-transitions} On peut toujours modifier
 un RNFA de manière à ce qu'il y ait au plus une, ou même si on le
@@ -3152,11 +3163,12 @@ reconnaît le même langage $L_{A'} = L_A$.  De plus, $A'$ se déduit
 algorithmiquement de $A$.
 \end{prop}
 \begin{proof}
-On a vu que pour chaque expression rationnelle $r$ on peut trouver
-(algorithmiquement) un εNFA $A_r$ qui reconnaît le langage dénoté
-par $r$.  On peut donc construire $A'$ en remplaçant chaque transition
-$(q,r,q')$ de $A$ par une copie de l'automate $A_r$ placée entre les
-états $q$ et $q'$.  Symboliquement :
+On a vu en \ref{rational-languages-are-recognizable} que pour chaque
+expression rationnelle $r$ on peut trouver (algorithmiquement) un εNFA
+$A_r$ (par exemple l'automate de Glushkov ou l'automate de Thompson)
+qui reconnaît le langage dénoté par $r$.  On peut donc construire $A'$
+en remplaçant chaque transition $(q,r,q')$ de $A$ par une copie de
+l'automate $A_r$ placée entre les états $q$ et $q'$.  Symboliquement :
 
 \begin{center}
 \begin{tikzpicture}[>=latex,line join=bevel,automaton,baseline=(q1.base)]
@@ -3197,11 +3209,11 @@ chemin dans ce dernier, suivi d'une transition spontanée depuis un
 Mais la surprise des RNFA est qu'ils peuvent aussi se ramener à des
 expressions rationnelles !
 
-\begin{prop}
-Soit $A = (Q,I,F,\delta)$ un RNFA sur un alphabet $\Sigma$.  Alors il
-existe une expression rationnelle $r$ sur $\Sigma$ qui dénote le
-langage reconnu par $A$, soit $L_r = L_A$.  De plus, $r$ se déduit
-algorithmiquement de $A$.
+\begin{prop}\label{recognizable-languages-are-rational}
+Soit $A = (Q,I,F,\delta)$ un RNFA (ou, en particulier, un NFA ou
+DFA(I)) sur un alphabet $\Sigma$.  Alors il existe une expression
+rationnelle $r$ sur $\Sigma$ qui dénote le langage reconnu par $A$,
+soit $L_r = L_A$.  De plus, $r$ se déduit algorithmiquement de $A$.
 \end{prop}
 \begin{proof}
 On a vu qu'on pouvait considérer une expression rationnelle comme un
@@ -3275,7 +3287,11 @@ l'expression rationnelle $r$.
 \thingy La procédure qu'on a décrite dans la démonstration de cette
 proposition s'appelle l'algorithme d'\defin{élimination des états} ou
 \index{Kleene (algorithme de)|see{élimination des
-    états}}\textbf{algorithme de Kleene}.
+    états}}\textbf{algorithme de Kleene}\footnote{Peut-être
+  abusivement (le théorème \ref{kleenes-theorem} est indubitablement
+  dû à Kleene, mais le contenu algorithmique ne l'est peut-être pas) ;
+  il est peut-être plus correct d'attribuer l'algorithme à Brzozowski
+  et McCluskey.}.
 
 Il va de soi qu'on peut la simplifier un petit peu : s'il n'y a pas de
 transition de de $q_1$ vers $q$ ou qu'il n'y en a pas de $q$
@@ -3290,7 +3306,9 @@ en passant par $q$.  Et il faut se souvenir que le cas $q_2=q_1$ est à
 traiter aussi.
 
 En général, l'élimination des états conduit à un expression
-extrêmement compliquée.
+extrêmement compliquée (exponentielle dans le nombre d'états de
+l'automate, au moins dans le pire cas, mais aussi dans beaucoup de cas
+« typiques »).
 
 \thingy\label{example-of-state-elimination} À titre d'exemple,
 considérons le DFA suivant sur l'alphabet $\{0,1\}$, qui reconnaît les
@@ -3379,12 +3397,27 @@ conduit à l'automate suivant :
 \noindent et finalement à l'expression rationnelle
 $(0|11|10(1|00){*}01){*}$, qui est équivalente à la précédente.
 
-\begin{cor}
+\bigbreak
+
+Récapitulons le contenu essentiel à retenir comme conséquence
+immédiate de \ref{rational-languages-are-recognizable}
+et \ref{recognizable-languages-are-rational} :
+
+\begin{cor}[Kleene]\label{kleenes-theorem}\index{Kleene (théorème de)}
 La classe des langages rationnels et celle des langages
 reconnaissables coïncident.  (On pourra donc considérer ces termes
 comme synonymes.)
 \end{cor}
 
+Il faut cependant retenir que s'il y a, mathématiquement, équivalence
+entre ces deux classes de langages, cette équivalence \emph{a un coût
+  algorithmique}, c'est-à-dire que la conversion d'une expression
+rationnelle en automate (surtout si on souhaite un DFA), ou à plus
+forte raison d'un automate en expression rationnelle, a une complexité
+exponentielle dans le pire cas.  Il est donc pertinent, en
+informatique, de ne pas considérer les descriptions d'un langage par
+une expression rationnelle, un DFA, et un NFA, comme interchangeables.
+
 
 \subsection{Le lemme de pompage}
 
@@ -3398,7 +3431,7 @@ soit rationnel, si bien qu'on peut arriver à montrer qu'un langage
 n'est pas rationnel en invalidant cette condition (généralement en
 procédant par l'absurde).
 
-\begin{prop}[lemme de pompage pour les langages rationnels]\label{pumping-lemma}
+\begin{prop}[lemme de pompage pour les langages rationnels]\label{pumping-lemma}\index{pompage (lemme de)}
 Soit $L$ un langage rationnel.  Il existe alors un entier $k$ tel que
 tout mot de $t \in L$ de longueur $|t| \geq k$ admette une
 factorisation $t = uvw$ en trois facteurs $u,v,w$ où :
@@ -4774,7 +4807,7 @@ l'intersection des deux, et ce sont ces mots qui forcent ce langage à
 
 \subsection{Le lemme de pompage pour les langages algébriques}
 
-\begin{prop}[lemme de pompage pour les langages algébriques]\label{pumping-lemma-for-algebraic-languages}
+\begin{prop}[lemme de pompage pour les langages algébriques]\label{pumping-lemma-for-algebraic-languages}\index{pompage (lemme de)}
 Soit $L$ un langage algébrique.  Il existe alors un entier $k$ tel que
 tout mot de $t \in L$ de longueur $|t| \geq k$ admette une
 factorisation $t = uvwxy$ en cinq facteurs $u,v,w,x,y$ où :
-- 
cgit v1.2.3

