Je me suis amusé à réviser la théorie du calcul pour le plaisir et cette question me harcelait depuis un moment (drôle, je n'y ai jamais pensé lorsque j'ai appris la théorie des automates à mes études de premier cycle). Alors "pourquoi" étudions-nous exactement les automates finis déterministes et non déterministes (DFA / NFA)? Voici donc quelques réponses que j'ai trouvées après un discours mais que je ne vois toujours pas dans quelle mesure elles ont contribué au moment "aha":
- Etudier ce qu’ils sont et ne sont pas capables de faire, c’est-à-dire des limitations
- Pourquoi?
- Étant donné qu’ils sont les modèles de base du calcul théorique et fonderaient d’autres modèles de calcul plus performants.
- Qu'est-ce qui les rend "basiques"? Est-ce qu'ils n'ont qu'un seul bit de stockage et de transition d'état?
- Ok, et alors? Comment tout cela contribue-t-il à répondre à la question de la calculabilité? Il semble que les machines de Turing aident à bien comprendre cela et qu'il existe des modèles de calcul moins complexes, tels que les PDA, les DFA / NFA / Regex, etc.
Donc, même si je «comprends» dans une certaine mesure, je suis incapable de me répondre à cette question? Comment expliqueriez-vous le mieux pourquoi étudier les D / N-FA? Quelle est la question à laquelle ils cherchent à répondre? Comment cela aide-t-il et pourquoi est-ce la première chose enseignée dans la théorie des automates?
PS: Je connais les différentes applications lexicographiques et les simulateurs de motifs qui peuvent être implémentés en tant que tels. Cependant, je ne souhaite pas savoir à quoi il sert dans la pratique mais quelle était la raison de leur utilisation / invention / conception lors de l’aboutissement de l’étude de la théorie du calcul. D'un point de vue historique, qu'est-ce qui a amené quelqu'un à commencer par cela et à quelle compréhension «aha» est-il censé aboutir? Si vous deviez expliquer leur importance aux étudiants CS qui commencent tout juste à étudier la théorie des automates, comment le feriez-vous?
Réponses:
J'ai personnellement apprécié plusieurs Aha! moments de l'étude de la théorie de base des automates. Les NFA et les DFA forment un microcosme pour l'informatique théorique dans son ensemble.
Je pourrais continuer (et ainsi de suite) * Je trouve utile d’avoir des automates derrière la tête et de les rappeler de temps en temps pour comprendre un nouveau concept ou pour acquérir une intuition à propos d’idées mathématiques de haut niveau. Je doute que tout ce que je viens de mentionner puisse être communiqué dans les premières conférences d’un cours, voire dans un premier cours. Ce sont des récompenses à long terme basées sur un investissement initial dans les conférences initiales d'un cours de théorie des automates.
Pour parler de votre titre: je ne cherche pas toujours l'illumination, mais quand je le fais, je préfère les automates finis. Reste soif, mon ami.
la source
Il existe de nombreuses bonnes raisons théoriques d'étudier les N / DFA. Deux qui me viennent immédiatement à l’esprit sont:
Les machines Turing (nous pensons) capturent tout ce qui est calculable. Cependant, nous pouvons nous demander: quelles sont les parties essentielles d’une machine de Turing? Que se passe-t-il lorsque vous limitez une machine de Turing de différentes manières? Les DFA constituent une limitation très grave et naturelle (perte de mémoire). Les PDA sont une limitation moins sévère, etc. Il est théoriquement intéressant de voir ce que la mémoire vous donne et ce qui se passe lorsque vous vous en privez. Cela me semble une question très naturelle et fondamentale.
Les machines de Turing ont besoin d'une bande infinie. Notre univers est fini, donc, dans un certain sens, chaque périphérique informatique est un DFA. Cela semble être un sujet important, et encore naturel, à étudier.
Demander pourquoi on devrait étudier les DFA équivaut à se demander pourquoi on devrait apprendre le théorème de complétude de Godel alors que la vraie chose intéressante est son théorème d' incomplétude .
La raison pour laquelle ils sont le premier sujet de la théorie des automates est qu’il est naturel de passer de modes moins compliqués à des modes moins compliqués.
la source
Pour ajouter une perspective supplémentaire au reste des réponses: parce que vous pouvez réellement faire des choses avec des automates finis, contrairement aux machines de Turing.
Toutes les propriétés intéressantes des machines de Turing sont indécidables. Au contraire, avec les automates finis, à peu près tout est décidable. L'égalité linguistique, l'inclusion, la vacuité et l'universalité sont décidables. Combinées à ces automates finis, toutes les opérations auxquelles vous pouvez penser sont terminées et que ces opérations sont calculables, vous pouvez faire à peu près tout ce que vous voudriez faire avec des automates finis.
Cela signifie que si vous pouvez capturer quelque chose à l'aide d'automates finis, vous disposez automatiquement de nombreux outils pour l'analyser. Par exemple, dans les tests de logiciels, les systèmes et leurs spécifications peuvent être modélisés comme des automates finis. Vous pouvez ensuite tester automatiquement si votre système implémente correctement la spécification.
Les machines de Turing et les automates finis enseignent donc aux gens un contraste intéressant et omniprésent: plus de pouvoir descriptif va de pair avec moins de traçabilité. Les automates finis ne peuvent pas décrire grand chose, mais nous pouvons au moins faire des choses avec eux.
la source
Etat. vous devez apprendre que l'on peut modéliser le monde (pour certains problèmes) comme un espace d'états fini, et que l'on peut penser au calcul dans ces paramètres. Ceci est une idée simple mais extrêmement utile si vous effectuez une programmation - vous rencontreriez des états, encore et encore, et FA vous donnerait le moyen de les penser. Je considère cela comme une excuse suffisante pour enseigner un cours complet. Bien entendu, l'état peut être déterministe ou non déterministe. Ainsi, DFA et NFA, mais vous pouvez convertir entre eux, etc.
La deuxième chose à apprendre est le théorème Halting. Ce qui est lié au théorème d'incomplétude de Godel. (Vous ne pouvez pas construire une machine capable de tout calculer, et il existe des affirmations mathématiques que vous ne pouvez ni prouver ni réfuter, et qui doivent donc être considérées comme des axiomes. C’est-à-dire que nous vivons dans un monde qui n’a pas de description précise ni de réalité. oracles - oui pour nous!)
Maintenant, j'ai fait mes études de premier cycle en maths, et vous vous habituez à l'idée d'apprendre des choses dont vous n'avez aucune idée (l'apprentissage de la théorie des groupes, de la théorie des mesures, de la théorie des ensembles, des espaces de Hilbert, etc., etc., etc.). , BTW]). Il y a quelque chose à dire sur comment apprendre à apprendre - la prochaine fois que vous devrez apprendre quelques mathématiques bizarro (parce que vous devez les utiliser pour faire quelque chose dans le monde réel) qui vous paraît très étrange et que vous prenez dans la foulée. Plus précisément, la troisième chose à apprendre est la maturité mathématique - être capable de bien argumenter, de savoir quand les preuves sont correctes ou non, d'écrire des preuves, etc. Si vous en avez déjà un, ce cours est facile, et vous ne vous en soucierez pas trop. bien pourquoi tu l'apprends.
À part cela, le cours est une perte de temps totale, comme tout le reste. Plus précisément, vous pouvez mener une vie heureuse sans connaître ces informations. Mais ceci est littéralement vrai de toute connaissance. Plus ou moins. Pour moi, un cours à l'université vaut son temps, si vous regardez le monde différemment après l'avoir appris. C’est définitivement l’un des cours qui a changé ma façon de penser le monde. Que peut-on demander de plus?
la source
Bien que ce ne soit pas vraiment la raison pour laquelle ils ont été étudiés à l'origine, les automates finis et les langages normaux qu'ils reconnaissent sont suffisamment flexibles pour être utilisés comme blocs de construction pour des théories mathématiques plus complexes. Dans ce contexte, voir des groupes particulièrement automatiques (groupes dans lesquels les éléments peuvent être représentés par des chaînes dans un langage courant et dans lesquels les produits des éléments par des générateurs de groupe peuvent être calculés par des transducteurs à états finis) et des sous-décalages sofic (sous-décalages d'un espace de décalage dont les mots interdits forment une langue normale). Il y a donc des raisons de les étudier, même si vous êtes intéressé par les mathématiques pures plutôt que par l'informatique.
Des automates finis ont également été utilisés dans la conception d'algorithmes pour d'autres types d'objets. Par exemple, un algorithme de Culik permettant de vérifier si un automate cellulaire unidimensionnel est réversible implique de construire, de modifier et de tester les propriétés de certains NFA. Et un article de FOCS rédigé en 1986 par Natarajan a montré comment résoudre un certain problème dans la conception des chaînes d’assemblage mécanique en le réduisant à un calcul concernant les automates finis.
la source
Vous posez (au moins) deux questions différentes: (a) Quelles parties de la théorie reposent sur des automates finis? (b) Pourquoi les automates finis ont-ils été développés en premier lieu? Je pense que le meilleur moyen de s’attaquer à ce dernier est de regarder les anciens papiers, tels que:
Voici les deux premiers paragraphes:
En bref, ils ont été développés comme un modèle d’ordinateurs réels, dotés de ressources limitées.
la source
Une autre raison est qu’il s’agit de modèles théoriques relativement pratiques . Une machine de Turing, en dehors de l'impossibilité de l'infini bande, est un peu difficile à programmer pour ce que c'est comme de programmer un ordinateur (notez que ce n'est pas une bonne analogie pour commencer!). Les PDA et les DFA sont toutefois tout à fait disposés à être des modèles de programmes réels en ce sens qu’une conception PDA / DFA peut souvent être facilement transformée en un véritable programme. La conception du compilateur, par exemple, les utilise beaucoup. Ainsi, à ce type de points de connexion entre la théorie et la pratique, nous avons une idée de la façon dont tout est lié, et de ce que nous pouvons et ne pouvons pas faire.
la source
Découvrez le jeu "Living Binary Addition" ici: http://courstltc.blogspot.com/2012/12/living-binary-adder-game.html J'avais l'habitude de présenter ce jeu à mes étudiants dans les premiers chapitres sur DFA / NFA. Il illustre deux choses importantes dans la théorie des automates:
Cela apporte parfois le moment "Aha" à mes étudiants.
la source
Le concept de DFA est très utile pour concevoir des solutions efficaces à de nombreux types de problèmes. Un exemple est le réseautage. Chaque protocole peut être implémenté comme une machine à états. Implémenter la solution de cette manière rend le code plus simple et plus simple signifie un taux de défauts plus bas. Cela signifie également que les modifications du code sont plus faciles et ont un impact moindre, avec encore moins de taux de défauts.
Certaines personnes ont du mal à considérer un protocole réseau comme une machine à états, mais ceux qui peuvent faire le saut le trouvent très enrichissant en termes de retour sur investissement.
la source
En fait, mes étudiants me demandent parfois précisément cela - après avoir passé une grande partie du semestre sur des automates finis et finalement arriver aux machines de Turing. Pourquoi consacrer autant de temps à un formalisme plus faible alors qu’il existe un formalisme plus fort? J'explique donc le compromis inhérent entre pouvoir expressif et complexité analytique. Les modèles les plus riches sont généralement plus difficiles à analyser. La dichotomie DFA contre TM est extrême, car le problème de l'adhésion est trivial pour l'un et incalculable pour l'autre. Un exemple moins extrême serait DFA vs PDA. Le problème de l’appartenance à ce dernier s’avère être efficacement résolu, mais la solution n’est pas du tout anodine. Nous constatons cet événement dans de nombreuses branches des mathématiques et des sciences: étudiez un modèle simple pour obtenir une compréhension aussi complète que possible, ce qui conduit généralement à mieux comprendre des modèles plus complexes.
la source
Je vois plusieurs réponses appelant FM "moins" que les machines de Turing.
L’un des objectifs principaux de la classe de troisième cycle que j’ai choisie était leur équivalence, et non leurs distinctions. Pour chaque modèle de FSM que nous avons étudié, nous devions prouver leur équivalence à Turing Machines. Ceci est fait en implémentant une machine de Turing dans le FSM. IIRC, nous avons également étudié d’autres modèles informatiques qui ne mettent pas en œuvre une MT, mais j’oublie ce qu’ils étaient. Le fait est que si vous pouvez implémenter une MT, vous pouvez exécuter n’importe quel programme de MT sur le modèle, avec une bande analogique suffisamment grande pour le problème à traiter.
La réponse à la question était la suivante: TM est le modèle de calcul de base, mais il n’est pas très pratique pour construire des machines utiles. D'où les modèles FSM.
Cela m’a été rapporté viscéralement quand, à peu près à la même époque (1984), j’ai découvert le langage FORTH. Son moteur d'exécution repose sur la réalisation pure d'un PDA Dual Stack. En allant plus loin, j'aime ce même moteur sous les compilateurs d'expression
Bien que, pour moi, l’impact réel de FSM ait été de découvrir le livre "Theory of Finite Automata" de Trakhtenbrot et Korzynski (?) Quand j’avais 18 ans, une découverte qui m’a essentiellement permis de faire carrière.
la source