Automate fini

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Cet article concerne les automates finis. Pour une présentation plus formelle, voir Automate fini non déterministe. Pour les autres significations, voir Automate.
Fig. 1 : Une hiérarchie d'automates.

Un automate fini ou automate avec un nombre fini d'états (en anglais finite-state automaton ou finite state machine) est un modèle mathématique de calcul, utilisé dans de nombreuses circonstances, allant de la conception de programmes informatiques et de circuits en logique séquentielle aux applications dans des protocoles de communication, le contrôle des processus, la linguistique et même la biologie. Un automate fini est une construction abstraite, susceptible d'être dans un nombre fini d'états, un seul état à la fois ; l'état où il se trouve est appelé l'« état courant ». Le passage d'un état à un autre est dirigé par un événement ou une condition ; ce passage est appelé une « transition ». Un automate particulier est défini par la liste de ses états et par les conditions des transitions.

On rencontre couramment des automates finis dans de nombreux appareils qui réalisent des actions déterminées en fonction des événements qui se présentent. Un exemple est un distributeur automatique de boissons qui délivre l'article souhaité quand le montant introduit est approprié, un autre les ascenseurs qui savent combiner les appels successifs pour s'arrêter aux étages intermédiaires, les feux de circulation capables de s'adapter aux voitures en attente, ou des digicodes qui analysent la bonne suite de chiffres.

Les automates finis peuvent modéliser un grand nombre de problèmes, parmi lesquels la conception assistée par ordinateur pour l'électronique, la conception de protocoles de communication, l'analyse syntaxique de langages et autres applications d’ingénierie. Dans la recherche en biologie et en intelligence artificielle, les automates finis ou des hiérarchies de telles machines ont été employés pour décrire des systèmes neurologiques. En linguistique, ils sont utilisés pour décrire les parties simples de grammaires de langues naturelles. En vérification de programmes (model checking), des automates finis, avec parfois un nombre très important d'états, sont employés.

Si l'on considère les automates finis comme un concept abstrait de calcul, leur puissance est pourtant faible ; ils ont bien moins de puissance de calcul qu'une machine de Turing. En d'autres termes, il y a des tâches qu'un automate fini ne peut pas accomplir alors qu'une machine de Turing peut le faire. Ceci est principalement dû au fait qu'un automate fini a une mémoire limitée par son nombre d'états.

Les automates finis sont étudiés dans le cadre plus général de la théorie des automates.

Exemples[modifier | modifier le code]

Un premier exemple : un portillon[modifier | modifier le code]

Fig. 2 : Diagramme d'état d'un portillon.
Un portillon.

Un exemple très simple d'un mécanisme que l'on peut modéliser par un automate fini est un Portillon d'accès[1],[2]. Un portillon, utilisé dans certains métros ou dans d'autres établissements à accès contrôlés est une barrière avec trois bras rotatifs à hauteur de la taille. Au début, les bras sont verrouillés et bloquent l'entrée, et empêchent les usagers de passer. L'introduction d'une pièce de monnaie ou d'un jeton dans une fente du portillon (ou la présentation d'un ticket ou d'une carte) débloque les bras et permet le passage d'un et un seul usager à la fois. Une fois l'usager entré, les bras sont à nouveaux bloqués jusqu'à ce qu'un nouveau jeton soit inséré.

Un portillon, vu comme un automate fini, a deux états : verrouillé (« locked » en anglais) et déverrouillé (« unlocked » en anglais)[1]. Deux « entrées » peuvent modifier l'état : la première si l'on insère un jeton dans la fente (entrée jeton) et la deuxième si l'on pousse le bras (entrée pousser). Dans l'état verrouillé, l'action de pousser n'a aucun effet : quel que soit le nombre de fois que l'on pousse, l'automate reste verrouillé. Si l'on insère un jeton, c'est-à-dire si l'on effectue une « entrée » jeton, on passe de l'état verrouillé à l'état déverrouillé. Dans l'état déverrouillé, ajouter des jetons supplémentaires n'a pas d'effet, et ne change pas l'état. Mais dès qu'un usager tourne le bras du portillon, donc fournit un pousser, la machine retourne à l'état verrouillé.

L'automate d'un portillon peut être représenté par une table de transition d'états qui montre, pour chaque état, le nouvel état et la sortie (l'action) pour une entrée donnée.

État courant Entrée État suivant Sortie
verrouillé jeton déverrouillé Déverrouille le portillon pour qu'un usager puisse passer
pousser verrouillé Rien
déverrouillé jeton déverrouillé Rien
pousser verrouillé Quand l'usager est passé, verrouille le portillon

On peut aussi représenter l'automate par un graphe orienté appelé un diagramme états-transitions, comme donné ci-dessus. Chaque état est représenté par un sommet (visualisé par un cercle). Les arcs (représentés par des flèches) montrent les transitions d'un état à un autre. Chaque flèche porte une entrée qui déclenche la transition. Les données qui ne provoquent pas de changement d'état, comme un jeton pour l'état déverrouillé, sont représentées par des arcs circulaires (des boucles) qui tournent autour de l’état. La flèche qui entre dans l'état verrouillé depuis le point noir sert à indiquer que cet état est l'état initial, au début de la modélisation.

Un autre exemple : le loup, la chèvre et le chou[modifier | modifier le code]

Le loup, la chèvre et le chou. Chaque état représente ce que le passeur a déjà transporté (le chou est noté « S ».

L'exemple que voici[3] illustre les possibilités qui s'offrent à un passeur qui doit faire traverser, d'une rive à l'autre, un loup, une chèvre et un chou (c'est une variante des nombreux problèmes de passage de rivière). Sa barque ne lui permet que d'emporter un seul des trois objets à la fois et, bien entendu, il ne peut laisser ensemble loup et chèvre ni chèvre et chou. Dans le diagramme ci-contre, un état représente ce que le passeur a déjà pu transporter sur l’autre rive (on a noté le chou par « S ») : au début rien, à la fin tout. Sur les flèches les objets transportés (et lui-même). Une des deux séquences de transport les plus courtes est CPLCSPC, l'autre est CPSCLPC.

Concepts et terminologie[modifier | modifier le code]

Un état est la description de la configuration d'un système en attente d'exécuter une transition. Une transition est un ensemble d'actions à exécuter lorsqu'une condition est remplie ou lorsqu'un événement est reçu. Par exemple, une chaîne audio peut être dans un état « radio » et, quand elle reçoit un stimulus du genre « suivant », passe à la station radio suivante. Si le système est dans l'état « CD » et reçoit le stimulus « suivant », il passe à la piste suivante du CD en cours. Les mêmes stimuli peuvent donc déclencher des actions différentes, si l'état courant n'est pas le même.

Dans certaines représentations de machines finies, il est possible d'associer des actions à un état :

  • action d'entrée : réalisée lorsque l'on « entre » dans l'état,
  • action de sortie : réalisée lorsque l’on « quitte » l'état.
  • action de transition : réalisée lors d'une transition

Représentations[modifier | modifier le code]

Table états-transitions[modifier | modifier le code]

Article détaillé : Diagramme états-transitions.

Plusieurs types de tables de transition d'état sont utilisées. Ces diagrammes sont très populaires en UML notamment. La représentation la plus courante est illustrée ci-dessous ; la combinaison de l'état courant (par exemple B) et d'une entrée (par exemple Y) montre l'état suivant (dans l’exemple C). L'information complète associée à une action n'est pas décrite dans la table et peut être ajoutée par des annotations. Une définition d'une machine finie avec actions est possible au moyen de tables de transition dans le modèle plus élaboré d'automate fini virtuel (en)[4].

Table de transitions
Entrée
État
Entrée X Entrée Y Entrée Z
État A
État B État C
État C

Automates UML[modifier | modifier le code]

Exemple de diagramme UML de fonctionnement d'un four.

Le langage de spécification Unified Modeling Language (UML) a une notation propre pour décrire des automates. Ce sont des diagrammes comportementaux particuliers qui permettent de dépasser les limitations de machines finies traditionnelles tout en conservant leurs avantages principaux. Les machines ou automates UML introduisent les notions nouvelles de diagramme de structure composite, d'états hiérarchiques et d'agrégation, tout en étendant la notion d'action. Les machines finies UML ont à la fois les propriétés des machines de Mealy et des machines de Moore décrites plus bas. Elles supportent des actions qui dépendent à la fois de l'état du système et de l'événement déclenchant, comme dans les machines de Mealy, et aussi des actions d'entrée et de sortie associées à des états, comme dans les machines de Moore.

Machines SDL[modifier | modifier le code]

Exemple d'une machine fini en SDL.
Fig. 3 : Exemple d'un automate fini à deux états.

Le langage de spécification et de description appelé Specification and Description Language ou SDL est une norme élaborée par l'Union internationale des télécommunications (UIT)[5]. La norme contient un ensemble de symboles graphiques permettant de décrire les actions dans une transition :

  • envoi d'un message
  • réception d'un message
  • démarrage d'un temporisateur (timer)
  • arrêt d'un temporisateur
  • lancement d'une machine concurrente
  • prise de décision.

Un SDL contient des types de base, mais surtout des types de données abstraits (TDA) et une syntaxe de manipulation qui permet de décrire le système de manière formelle, possiblement de manière complète et non ambiguë.

Autres diagrammes d'états[modifier | modifier le code]

Il existe de nombreuses variantes de diagrammes d'états-transitions, comme le diagramme d'un automate à deux états donné plus haut.

Utilisation[modifier | modifier le code]

Les automates sont des systèmes réactifs (en)[6], réagissant aux impulsion reçues. Ils jouent un rôle important dans de nombreux champs différents, comprenant l'électrotechnique, la linguistique, l'informatique , la philosophie, la biologie, les mathématiques, et la logique. Les automates finis constituent une classe d'automates étudiée en théorie des automates et en informatique théorique.

En informatique, les automates finis sont largement utilisés en modélisation du comportement d'applications, en conception matérielle, en électronique numérique, en génie logiciel, en compilation, en protocoles de communication, dans l'étude des modèles de calcul et des langages formels. Les dictionnaires linguistiques aussi peuvent être représentés par un automate fini. Le gain de place, pour un dictionnaire de Scrabble anglais, peut atteindre 80 %[3], et encore plus pour des dictionnaires de mots fléchés du français.

Classification[modifier | modifier le code]

Les automates finis peuvent être classés principalement en deux catégories, les accepteurs et les transducteurs. Les accepteurs analysent la structure de la donnée fournie, et l'acceptent si elle est conforme à la spécification décrite par l'automate. Les transducteurs au contraire traduisent une chaîne de symboles en une autre, là encore selon l'algorithme codé dans l'automate. Dans certains cas, on peut rencontrer des variantes appelées classificateurs et séquenceurs[7],[3].

Accepteurs ou reconnaisseurs[modifier | modifier le code]

Article détaillé : Automate fini.
Fig. 4 : Automate accepteur : analyse du mot « nice ».

Les accepteurs, également appelés reconnaisseurs produisent une sortie binaire, indiquant si l'entrée reçue est acceptée ou non. Chaque état d'un tel automate est soit un état d'acceptation, aussi appelé final ou terminal, ou un état de rejet. Si l'état courant, après la lecture de la totalité de l'entrée, est un état d'acceptation, l'entrée est acceptée, sinon elle est rejetée. L'entrée est généralement une suite de symboles (des lettres); il n'y a pas d'actions associées. L'exemple de la figure 4 montre un automate fini qui accepte le mot « nice ». Dans cet automate, seul l'état 7 est acceptant.

Une machine peut aussi être décrite comme définissant un langage formel. Ce langage est composé des mots acceptés par la machine, et d'aucun mot rejeté par elle. Par définition, les langages acceptés par un automate fini sont appelés les langages reconnaissables. Par le théorème de Kleene, ce sont les langages réguliers ou rationnels, décrits par des expressions régulières.

Le problème de déterminer le langage accepté par un automate fini donné est une instance d'un problème plus général appelé le problème algébrique de cheminement (« algebraic path problem »), qui lui-même est une extension des problèmes de cheminement dans des graphes dont les arcs portent des poids pris dans un demi-anneau arbitraire[8],[9].

État initial[modifier | modifier le code]

L'état initial est en général indiqué en traçant une flèche qui pointe vers cet état « à partir de n'importe où »[10].

États d'acceptation, finaux, ou terminaux[modifier | modifier le code]

Fig. 5 : Représentation d'un automate fini qui détermine si une suite binaire contient un nombre pair de of 0. L'état est final.

Un état d'acceptation (aussi appelé état acceptant, final ou terminal) est un état dans lequel la machine déclare que la chaîne d'entrée traitée jusqu'alors appartient au langage qu'elle reconnaît. Graphiquement les états d'acceptation sont fréquemment représentés par des cercles doublés. Une autre façon, symétrique à celle adoptée pour l'état initial, consiste à faire sortir une flèche « pointant vers nulle part » d'un tel état[3].

L'état initial peut aussi être un état final ; dans ce cas, l'automate accepte la chaîne vide. Si l'état initial n'est pas un état d'acceptation, et s'il n'existe pas d'arc vers un état final, l'automate n'accepte aucun mot.

La figure 5 est l'exemple d'un automate fini déterministe. Cette automate accepte les suites binaires qui comportent un nombre pair de chiffres 0. L'état S1 est à la fois l'état initial et l'état terminal. L'automate termine dans l'état S1 si la chaîne lue contient un nombre pair (éventuellement nul) de 0 : chaque 0 fait basculer d'un état vers l'autre, alors qu'un 1 laisse l'état inchangé. Des exemples de chaînes acceptées sont ε , le mot vide, puis 1, 11, 11…, 00, 010, 1010, 10110, etc.

Transducteurs[modifier | modifier le code]

Fig. 6 : Automate transducteur : modèle de Moore.
Article détaillé : Transducteur fini.

Les traducteurs finis génèrent en sortie des mots en fonction d'un mot d'entrée donné et d'actions associées aux états. Ils sont utilisés par exemple dans des applications de contrôle et dans le domaine de la linguistique informatique. On distingue deux types de transducteurs, les machines de Moore et les machines de Mealy. Elles diffèrent par les modalités qui déterminent les sorties. On peut démontrer qu'elles ont la même puissance d'expression.

Machine de Moore
Dans le modèle de Moore, qui utilise seulement des actions d'entrée, la sortie dépend uniquement de l’état courant. Comparé au modèle de Mealy, le modèle de Moore a l'avantage de la simplicité et de facilité de compréhension. Considérons par exemple une porte d'ascenseur, modélisée par une machine qui reconnaît deux commandes : « ouvrir » et « fermer », commandes qui peuvent être données par un utilisateur. L'action d'entrée (E:) dans l'état d'« en cours d'ouverture » fait démarrer un moteur qui ouvre la porte, et dans l'état « en cours de fermeture » fait démarrer un moteur qui ferme la porte. Les états « ouvert » et « fermé » arrêtent le moteur quand la porte est entièrement ouverte ou entièrement fermée. Ils signalent par ailleurs cette situation vers l’extérieur par « porte ouverte » ou « porte fermée ».
Fig. 7 : Transducteur : modèle de Mealy.
Machine de Mealy
Dans le modèle de Mealy, qui utilise également des actions d'entrée, la sortie dépend à la fois de l'entrée et de l'état. L'usage de machines de Mealy réduit souvent le nombre d'états. En contrepartie, le fonctionnement d'un automate est plus complexe et plus difficile à appréhender. La figure 7 montre un automate de Mealy qui a le même comportement que l’automate de Moore. Il y a deux actions d'entrée (I:): « démarrer le moteur pour fermer la porte quand la commande de fermeture arrive », et la commande symétrique pour l'ouverture. Les états intermédiaires « en cours d'ouverture » et « en cours de fermeture » ne sont pas nécessaires.

Variantes[modifier | modifier le code]

Les variantes suivantes sont d'un emploi assez rare. Un classificateur est similaire à un accepteur, mais possède au moins deux états terminaux. Un tel automate peut donc accepter plusieurs langages simultanément, selon la catégorie d'états à laquelle appartient l'état terminal atteint en fin de lecture. Un séquenceur ou générateur est un cas particulier d'automate, opérant sur un alphabet d'entrée à une seule lettre. Un tel automate produit une seule séquence qui peut être interprétée comme le résultat d'un transducteur ou d'un classificateur.

Un automate fini avec un état unique est appelé parfois « combinatoire » ; il utilise uniquement des actions d'entrée. Cette notion peut servir lorsque plusieurs automates finis son censés travailler de concert, en communicant ; il peut alors être commode de considérer des automates combinatoire comme une brique dans un outil de conception[11].

Déterminisme[modifier | modifier le code]

Une distinction supplémentaire importante est celle entre automates finis déterministes et non déterministes. Dans un automate déterministe, chaque état possède au plus une transition pour chaque symbole d'entrée (et même exactement une dans le cas où l'automate est complet). Dans un automate non déterministe, un symbole d'entrée peut étiqueter une, plusieurs ou aucune transition pour un état donné. Cette distinction est importante en pratique, mais moins en théorie parce qu'il existe un algorithme (la construction par sous-ensembles) qui permet de transformer un automate fini non déterministe en un automate fini déterministe avec la même fonctionnalité. Toutefois, et c'est là un biais qui peut entraver l'efficacité, l'algorithme de construction par sous-ensembles peut produire un automate dont la taille est exponentielle par rapport à la taille de l'automate de départ. C'est pourquoi certains algorithmes (comme le programme grep de Unix) tentent des compromis.

Autres représentations[modifier | modifier le code]

Il existe d'autres moyens de représenter des machines à états. Il existe par exemple des outils de modélisation et de conception de la logique de contrôleurs embarqués. Ils combinent des états hiérarchiques de UML, de graphes de flots de contrôle, et des tables de vérité en un seul langage, ce qui donne un formalisme différent et un ensemble de sémantiques propre[12]. Ces diagrammes sont similaires aux représentations initialement introduites par David Harel[13]; ils supportent des états hiérarchiquement imbriqués, des régions orthogonales au sens de UML, des actions sur les états et sur les transitions[14].

Modèle mathématique[modifier | modifier le code]

Les définitions formelles sont les suivantes :

Un automate fini déterministe est composé de :

  • , un ensemble fini, non vide de lettres qui est l’alphabet d'entrée,
  • , un ensemble fini, non vide d'états,
  • , l'état initial, élément de . Dans un automate non déterministe, peut être un ensemble d'états.
  • , la fonction de transition d'états: (dans un automate non déterministe, c'est une fonction , donc à valeur dans l'ensemble des parties de , en d'autres termes retourne un ensemble d'états).
  • est l'ensemble des états terminaux, un sous-ensemble (éventuellement vide) de .

Pour les automates déterministes ou non, il est fréquent de considérer le cas où est une fonction partielle, donc où n'est pas défini pour toute combinaison d'un état et d'un symbole . Si n'est pas défini, l'automate signale une erreur et l’entrée est rejetée. Cette variante est utile dans la spécification d'une machine, mais certains algorithmes qui nécessitent que les fonctions soient totales, demandent une transformation préliminaire qui, au moyen de l'ajout d'un état supplémentaire, rendent la fonction de transition totale.

Un automate fini est une machine de Turing très particulière, où la tête ne peut effectuer que des opérations de lecture (et pas d'écriture), et de plus se déplace toujours de la gauche vers la droite (et ne peut donc pas revenir en arrière)[15].

Un transducteur fini , est composé de :

  • , un ensemble fini, non vide de lettres qui est l’alphabet d'entrée.
  • , un ensemble fini, non vide de lettres qui est l’alphabet de sortie.
  • , un ensemble fini, non vide d'états.
  • , l'état initial, élément de . Dans un automate non déterministe, peut être un ensemble d'états.
  • est la fonction de transition d'états : .
  • est la fonction de sortie.

Si la fonction de sortie est fonction des états et de l'entrée () la définition correspond à celle du modèle de Mealy; si en revanche la fonction de sortie ne dépend que de l'état, (), on est en présence du modèle de Moore.

Il n'est pas difficile de transformer un automate de Moore en un automate de Mealy en faisant ne dépendre la fonction de sortie que de l’état d'arrivée. La conversion réciproque, d'un automate de Mealy en un automate de Moore, est également possible, mais demande d'introduire des états supplémentaires[16].

Optimisation[modifier | modifier le code]

L'optimisation d'un automate fini signifie ici la recherche d'un automate fini déterministe avec le moins d'états réalisant la même fonction. L'algorithme le plus rapide est l'algorithme de Hopcroft datant de 1971[17],[18]. D'autres techniques sont l'algorithme de Moore et un algorithme de Brzozowski. Les automates finis acycliques, qui reconnaissent des ensembles finis de mots comme des dictionnaires peuvent être minimisés en temps linéaire[19]. Des études poussées ont été menées pour la comparaison en moyenne, dans le pire des cas, et pour la complexité générique de ces méthodes. L'optimisation d'un automate au sens de la recherche d'un automate fini déterministe ou non avec un nombre minimum d'états est plus complexe[18].

Implémentation[modifier | modifier le code]

Applications matérielles[modifier | modifier le code]

Le schéma électrique pour un compteur TTL à 4 bits.

En électronique numérique, un automate fini peut être construit comme circuit logique programmable, ou un automate programmable industriel, avec des fonctions logiques réalisées par bascules ou relais. Une implémentation matérielle demande en général un registre pour stocker les variables d'état, un circuit de logique combinatoire qui détermine les transitions d'états, et un deuxième bloc de logique combinatoire qui détermine les sorties de l'automate. Une implémentation courante est le Richards controller (en).

Un cas particulier des automates de Moore, où la sortie est directement connectée aux états, est connu sous le nom d'automate de Medvedev[20]. Il est par ailleurs recommandé, dans la conception de chips, de ne pas placer de circuit logique entre les entrées-sorties primaires et les registres, afin de minimiser les délais entre chips qui sont habituellement longs et ralentissent la fréquence des automates. On peut aussi optimiser les automates en vue de minimiser la consommation d'énergie par des techniques spécifiques (en).

Applications logicielles[modifier | modifier le code]

Les concepts suivants sont fréquemment employés dans la construction d'applications utilisant des automates finis :

Automates finis et compilateurs[modifier | modifier le code]

Les automates finis sont souvent utilisés au début du processus de compilation dans les compilateurs de langages de programmation. Une telle entité peut comporter plusieurs automates finis, qui implémentent l'analyse lexicale.

Partant d'une séquence de caractères, un analyseur lexical construit une suite de lexèmes, tels que les mots réservés, les identificateurs, les littéraux ; à partir de cette suite, l'analyseur syntaxique construit l'arbre syntaxique. L'analyseur lexical et l'analyseur syntaxique gèrent la partie régulière et algébrique de la grammaire d'un langage de programmation[21].

Articles liés[modifier | modifier le code]

Notes et références[modifier | modifier le code]

  1. a et b Thomas Koshy, Discrete Mathematics With Applications, Academic Press, , 762 p. (ISBN 0-12-421180-1, lire en ligne).
  2. (en) David R. Wright, « Finite State Machines » [PDF], CSC215 Class Notes, North Carolina State University,‎ .
  3. a, b, c et d Pin, « Automates finis », Encyclopédie de l'informatique et des systèmes d'information.
  4. Ne pas confondre avec machine virtuelle.
  5. UIT : « Z.100 : Langage de description et de spécification ».
  6. Un système réactif est un système qui est en interaction permanente avec son environnement, et dont le rythme est imposé par cet environnement.
  7. Robert M. Keller, Computer Science: Abstraction to Implementation, Harvey Mudd College, (lire en ligne), « Classifiers, Acceptors, Transducers, and Sequencers », p. 480
  8. Marc Pouly et Jürg Kohlas, Generic Inference: A Unifying Theory for Automated Reasoning, John Wiley & Sons, (ISBN 978-1-118-01086-0)
  9. Storer 2012, Chapter 10
  10. Sipser 2013, p. 34
  11. Michael Brutscheck, St. Berger, M. Franke, Andreas Schwarzbacher, St. Becker, « Structural Division Procedure for Efficient IC Analysis », IET Irish Signals and Systems Conference (ISSC 2008), Galway, Irlande, p. 18-23 [1]
  12. Grégoire Hamon, « A Denotational Semantics for Stateflow », International Conference on Embedded Software, Jersey City, NJ, ACM,‎ , p. 164–172 (DOI 1086228.1086260).
  13. David Harel, « A Visual Formalism for Complex Systems », Science of Computer Programming , 1987, p. 231–274.
  14. R. Alur, A. Kanade, S. Ramesh, K. C. Shashidhar, « Symbolic analysis for improving simulation coverage of Simulink/Stateflow models », International Conference on Embedded Software, Atlanta, 2008, p. 89–98.
  15. Paul E. Black, « Finite State Machine », Dictionary of Algorithms and Data Structures, U.S. National Institute of Standards and Technology,‎ (lire en ligne)
  16. Anderson, 2006, p. 105–108.
  17. Carton 2008.
  18. a et b Jean Berstel, Luc Boasson, Olivier Carton et Isabelle Fagnot, « Minimization of Automata », dans Automata: from Mathematics to Applications, European Mathematical Society, (arXiv 1010.5318)
  19. Dominique Revuz, « Minimization of Acyclic automata in Linear Time », Theoretical Computer Science, Elsevier, vol. 92,‎ , p. 181–189 (DOI 10.1016/0304-3975(92)90142-3).
  20. Hubert Kaeslin, Digital Integrated Circuit Design: From VLSI Architectures to CMOS Fabrication, Cambridge University Press, (ISBN 978-0-521-88267-5, lire en ligne), « Mealy, Moore, Medvedev-type and combinatorial output bits », p. 787.
  21. Aho et al. 2007.

Bibliographie[modifier | modifier le code]

Ouvrages généraux[modifier | modifier le code]

  • Ferdinand Wagner, Ruedi Schmuki, Thomas Wagner et Peter Wolstenholme, Modeling Software with Finite State Machines : A Practical Approach, Auerbach Publications, , 392 p. (ISBN 9780849380860).
  • Christos G. Cassandras et Stéphane Lafortune, Introduction to Discrete Event Systems, Springer Science & Business Media, , 822 p. (ISBN 9780792386094).
  • Timothy Kam, Tiziano Villa, Robert K. Brayton et Alberto Sangiovanni-Vincentelli, Synthesis of Finite State Machines : Functional Optimization, Springer, , 282 p. (ISBN 9780792398424)
  • Timothy Kam, Tiziano Villa, Robert K. Brayton et Alberto Sangiovanni-Vincentelli, Synthesis of Finite State Machines : Logic Optimization, Springer, , 381 p. (ISBN 9780792398929)
  • Yishai A. Feldman, « Finite-state Machines », dans Allen Kent et James G. Williams (éditeurs), Encyclopedia of Computer Science and Technology : Volume 25 - Supplement 10, Marcel Dekker, (ISBN 0-8247-2275-2, lire en ligne), p. 73-104
  • Jean-Éric Pin, « Automates finis », dans Jacky Akoka et Isabelle Comyn-Wattiau (éditeurs), Encyclopédie de l'informatique et des systèmes d'information, Paris, Vuibert, , xxxv+1941 p. (ISBN 978-2-7117-4846-4), p. 966-976.
  • James A. Storer, An Introduction to Data Structures and Algorithms, Springer Science & Business Media, , 599 p. (ISBN 9781461200758 et 146120075X)
  • Alfred Aho, Monica Lam, Ravi Sethi et Jeffrey Ullman (trad. de l'anglais par Philippe Deschamp, Bernard Lorho, Benoît Sagot et François Thomasset), Compilateurs : Principes, techniques et outils [« Compilers: Principles, Techniques, and Tools »], France, Pearson Education, , 2e éd. (1re éd. 1977), 901 p. (ISBN 978-2-7440-7037-2, présentation en ligne)

Aspects pratiques[modifier | modifier le code]

Automates en informatique théorique[modifier | modifier le code]

  • Olivier Carton, Langages formels, calculabilité et complexité, [détail de l’édition] (lire en ligne)
  • Sylvain Perifel, Complexité algorithmique, Ellipses, , 432 p. (ISBN 9782729886929, lire en ligne) — (La version électronique est datée de juillet 2015.)
  • Jacques Sakarovitch, Éléments de théorie des automates, Paris, Vuibert, (ISBN 2-7117-4807-3, zbMATH 1188.68177)
  • Gérard Berry, L’informatique du temps et des événements : Leçon inaugurale prononcée le jeudi 28 mars 2013, Collège de France, , 88 p. (ISBN 9782722602779)
  • James A. Anderson et Thomas J. Head, Automata Theory with Modern Applications, Cambridge University Press, , 264 p. (ISBN 978-0-521-84887-9 et 0521848873).
  • George S. Boolos, John P. Burgess et Richard C. Jeffrey, Computability and Logic, Cambridge, Cambridge University Press, , 5e éd. (1re éd. 1989), 366 p. (ISBN 9780521701464).
  • Martin Davis, Ron Sigal et Elaine J. Weyuker, Computability, Complexity, and Languages : Fundamentals of Theoretical Computer Science, San Diego, Academic Press, , 2e éd., 609 p. (ISBN 9780122063824).
  • (en) John E. Hopcroft, Rajeev Motwani et Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, Addison-Wesley, , 3e éd. (ISBN 978-0-32146225-1)
  • Harry R. Lewis et Christos H. Papadimitriou, Elements of the Theory of Computation, Prentice Hall, , 2e éd., 361 p. (ISBN 9780132624787).
  • Peter Linz, An Introduction to Formal Languages and Automata, Sudbury, MA, Jones & Bartlett Publishers, , 5e éd., 437 p. (ISBN 9781449615529).
  • Sanjeev Arora et Boaz Barak, Computational Complexity : A Modern Approach, Cambridge University Press, , 579 p. (ISBN 9780521424264).
  • Nicholas Pippenger, Theories of Computability, Cambridge, Cambridge University Press, , 264 p. (ISBN 9780521153430)
  • Michael Sipser, Introduction to the theory of computation, Boston, MA, Cengage Learning, , 3e éd., 480 p. (ISBN 9781133187790, OCLC 761858892).

Machines abstraites en informatique théorique[modifier | modifier le code]

  • Yuri Gurevich, « Sequential Abstract State Machines Capture Sequential Algorithms », ACM Transactions on Computational Logic, vol. 1, no 1,‎ , p. 77–111 (DOI 10.1145/343369.343384, lire en ligne)

Apprentissage automatique[modifier | modifier le code]

Liens externes[modifier | modifier le code]

Sur les autres projets Wikimedia :