\documentclass[a4paper,french]{article}

\title{Mathématiques pour l'informatique}
\author{}
\date{Dernière compilation~: \today{} à \currenttime}

\usepackage{../cours}

\begin{document}

\maketitle
\tableofcontents

\clearpage
\section{Automates finis}

    Automate = fonction qui dépend d'un état et d'un changement d'état.
    Par exemple ON / OFF, la machine est en état d'arrêt ou en état de marche.

    Autre exemple~: téléphone.

    \begin{tabular}{l|ll}
        \toprule
        Mode            & Évènement         & Nouvel état \\
        \midrule
        avion           & appel émis        & avion \\
        avion           & bouton téléphonie & téléphonie \\
        \midrule
        téléphonie      & bouton décrocher  & communication \\
        \midrule
        communication   & bouton raccrocher & téléphonie \\
        \bottomrule
    \end{tabular}

    L'automate est sous un état, il a des entrées qui le font peut-être passer d'un état à un autre ou effectuer des actions.

    Il faut en plus de cela définir un état initial (quel état avoir quand l'automate est mis en marche~?) et final (quel état avoir pour éteindre l'automate proprement~?)

    Un nouvel état peut dépendre de l'état précédent ou pas.
    On peut très bien trouver une action qui mette l'automate dans un état Y sans se soucier d'un autre état X dans lequel se trouve l'automate à un moment donné.

    \subsection{Automates accepteurs}

        Valide une suite d'entrée en fonction de certains critères.
        Le changement d'état est interne à l'automate, et c'est une fois que toutes les entrées ont été analysées que la sortie se fait connaître.

        Exemple~: déterminer si une suite de chiffres en entrée constitue un mois de l'année.

    \subsection{Définitions}

        \begin{itemize}

            \item \textbf{Alphabet}~:
                Ensemble des éléments en entrée de l'automate.

            \item \textbf{Mot}~:
                Suite d'éléments issus de l'alphabet.
                Cas particulier~: le mot vide, noté $\epsilon$.
                On a du coup $x = x\epsilon = \epsilon x$.

            \item \textbf{Langage}~:
                Ensemble de tous les mots pouvants être construits sur un alphabet donné.
                On note $A^*$ tous les mots y compris le mot vide.
                On note $A^+$ tous les mots sauf le mot vide.

                On appelle \emph{langage reconnu} l'ensemble des mots que l'automate a validé.

        \end{itemize}

    \subsection{Reconnaissance de mot}

        \begin{itemize}

            \item Principe

            \item ...

        \end{itemize}

    \subsection{Automate déterministe}

        À un état donné, il n'y a qu'une seule transition possible.

        \subsubsection{Automate complet}

            Pour tout état, il y a toujours une transition sortante pour chaque symbole de l'alphabet.
            Cela veut dire qu'à tout état il y a toujours une action à faire pour tout symbole reçu.

            Un automate complet est forcément également déterministe.

        \subsubsection{Rendre un automate complet}

            On crée un état ``poubelle'' qui va accueillir les transitions manquantes sur chaque état.

    \subsection{Automate non déterministe}

        À un état donné, il y a plusieurs transitions possibles.

        Un automate non déterministe est plus difficile à mettre en \oe{}uvre en algorithmique qu'un automate déterministe.
        En effet, il faudra en plus des pointeurs d'état et de symbole courant maintenir une pile des opérations possibles.

    \subsection{Accessibilité}

        \begin{itemize}

            \item Un automate accessible ne contient que des états qui peuvent être atteints.

            \item Un automate coaccessible ne contient que des états pouvant mener à un état terminal.

            \item Un automate émondé est à la fois accessible et coaccessible.

        \end{itemize}

    \subsection{Automate standard}

        Un automate standard ne contient qu'un seul état initial.
        Aucune transition n'arrive sur cet état initial.

    \subsection{Déterminisation d'un automate}

        Pour passer d'un automate non déterministe vers un automate déterministe, on va dérouler toutes les étapes de l'automate de départ en partant des états initiaux.
        S'il y a plusieurs états initiaux, on crée un nouvel état initial qu'on note comme l'ensemble des états initiaux de l'automate de départ.
        Ensuite, pour chaque transition possible on recopie les transitions en partant du nouvel état courant vers un ensemble d'états de l'automate de départ.
        Cela nous fait créer de nouveaux états, qu'on utilise comme état courant pour trouver les nouveaux états qu'on peut rejoindre.

        \begin{enumerate}

            \item Création de l'état initial~: ensemble de tous les états initiaux de l'automate non déterministe de départ.

            \item Repérage des lignes dans le tableau de transitions concernant les états initiaux déterminés précédemment.

            \item Pour chaque transition de chacune de ces lignes, identification des états cibles, et renseignement des ensembles d'états cibles dans le nouveau tableau de transitions.

            \item Retour à l'étape de repérage des états déterminés précédemment.

            \item Identification des ensembles contenant au moins un état terminal dans l'automate de départ.

        \end{enumerate}

\end{document}
