Ce projet a pour but d'étudier les langages et les automates finis, à travers divers opérations qu'on peut effectuer sur des automates.
Le projet est réalisé sous forme d'un fichier Jupyter Notebook en utilisant le langage de programmation python. Pour simplifier les fonctions présentées dans le projet, on fait de la programmation orientée objet avec python, afin de pouvoir mieux manipuler les objets qui representent un automate (Transition, Etat, Automate).
Dans le fichier jupyter, on peut voir que le projet se compose en 5 parties différentes : _Présentation : Une présentations des classes State, Transition et Automate, et explication des attributs et méthodes de chacune de ces classes. Il est impératif de comprendre comment fonctionnent ces 3 classes car elles seront au coeur de toute la suite du projet. _Prise en main : Dans cette partie on va commencer à créer des automates en utilisant différentes façons (à partir d'un ensemble de transitions, d'un fichier...etc). _Test et complétion : Des exercices de base de manipulation des automates, quelques fonctions qui vont servir pour la suite ainsi que des fonctions qui permettent de savoir si un automate est complet où détérministe, sinon le compléter. _Détérminisation : Dans la précédente partie on a écrit une fonction qui permet de savoir si un automate est détérministe ou non, maintenant on s'intersse à une fonction qui permet de créer un nouvel automate détérministe à partir d'un automate non détérministe, en prenant soin de vérifier tout les cas possibles. _Construction : Cette partie est un peu plus technique que les précédentes car il faut savoir traduire un algorithme mathématique en langage python, en construisant des automates à partir de différentes opérations telles que le complémentaire, l'intersection, l'union...etc.
ce projet m'a permis de développer ma façon de reflechir, en schématisant un problème informatique où un algorithme, et de concevoir une première idée pour ecrire cet algorithme dans le corps d'une fonction python. C'est aussi un bel exemple de mélange entre programmation orientée objet et de programmation fonctionnelle.