\begin{panneau} Nous nous intressons au problme suivant: tant donn un langage rationnel $L$ non vide sur un alphabet $\Alphabet$, dterminer la longueur minimale d'un mot de $L$. Nous envisagerons deux situations: celle o $L$ est dcrit par une expression rationnelle; celle o $L$ est reconnu par un automate fini. L'algorithme devra dtecter le cas o $L$ est vide. \end{panneau} \begin{panneau} Nous tudions la premire situation; l'ensemble des expressions rationnelles sur $\Alphabet$ sera not ${\cal ER}(\Alphabet)$. Le langage dcrit par l'expression rationnelle $e$ sera not $\LangER(e)$. \end{panneau} \begin{question}\label{def-alg-lambda} Dfinissez par induction structurelle une fonction $\lambda:{\cal ER}(\Alphabet) \mapsto \{\vvv,\fff\}$ spcifie comme suit: \begin{itemize} \item $\lambda(e) = \vvv$ si $\LangER(e)$ est vide; \item $\lambda(e) = \fff$ dans le cas contraire. \end{itemize} \end{question} \begin{panneau} Supposons dfini le type Caml suivant: \begin{programme} \begin{verbatim} type 'a exprat = Vide | Epsilon | Lettre of 'a | Union of 'a exprat * 'a exprat | Produit of 'a exprat * 'a exprat | Etoile of 'a exprat ;; \end{verbatim} \end{programme} \end{panneau} \begin{question} Rdigez en Caml une fonction de signature: \begin{programme} \begin{verbatim} lambda : 'a exprat -> bool \end{verbatim} \end{programme} \noindent spcifie comme suit: \verb+lambda e+ calcule $\lambda(e)$. Objectif: sept lignes. \end{question} \begin{question} Dfinissez par induction structurelle une fonction $\mu:{\cal ER}(\Alphabet) \mapsto \N \cup \{-\}$ spcifie comme suit: \begin{itemize} \item $\mu(e)$ est la longueur minimale d'un mot de $\LangER(e)$ si ce langage n'est pas vide; \item $\mu(e) = -$ sinon. \end{itemize} \end{question} \begin{panneau} Rappel: tout type \verb+'a+, Caml associe le type \verb+'a option+, qu'il dfinit comme suit: \begin{programme} \begin{verbatim} type 'a option = Some 'a | None ;; \end{verbatim} \end{programme} \noindent Ce mcanisme permet donc d'ajouter un ensemble $E$ un lment dont on est certain qu'il n'appartient pas $E$. \end{panneau} \begin{question} Rdigez en Caml une fonction de signature: \begin{programme} \begin{verbatim} mu : 'a exprat -> int option \end{verbatim} \end{programme} \noindent spcifie comme suit: si $e$ dcrit un langage non vide, alors \verb+mu e+ rend \verb+Some n+, o $n = \mu(e)$; sinon, \verb+mu e+ rend \verb+None+. Objectif: treize lignes. \end{question} \begin{panneau} Nous supposons dsormais que $L$ est reconnu par un automate fini dterministe ${\cal A} = (Q,\delta,i,F)$. \end{panneau} \begin{question} Rappelez le principe de l'algorithme de parcours en largeur du graphe d'un automate fini expos en cours. \end{question} \begin{question} En vous inspirant de cet algorithme, proposez un algorithme de calcul de $\lambda(L)$. \end{question} \begin{question} Dans le mme esprit, proposez un algorithme de calcul de $\mu(L)$. \end{question} \begin{question} Proposez un algorithme dterminant un mot de $L$ de longueur $\mu(L)$, lorsque ce langage n'est pas vide. \end{question} \begin{question} Proposez un algorithme dterminant l'ensemble des mots de $L$ de longueur $\mu(L)$, lorsque ce langage n'est pas vide. Que pouvez-vous dire de son cot dans le pire des cas? \end{question} \endinput