Td 1 automates Théorie des langages-télécharger pdf...

Théorie des langages : Td 1 automates

Télécharger PDF

Travaux pratiques - Option informatique

Simulation d’un automate

Préliminaire

Question 1

Définir une fonction binaire_faible de type int → int list qui associe à un entier la liste des bits de sa décomposition en base 2, le bit de poids le plus faible se trouvant en tête de liste.

Par exemple, pour l’entier 6 (110 en binaire), la fonction renvoie [0; 1; 1].

En déduire une fonction binaire_fort qui décompose un entier en base 2 en plaçant cette fois le bit de poids le plus fort en tête de liste.

Pour le même entier 6, la fonction renvoie [1; 1; 0].

1. Automates déterministes

On choisit de représenter un automate fini déterministe A = (Σ, Q, q₀, F, δ) à l’aide d’un type ’a pour l’ensemble des états Q et d’un type ’b pour l’alphabet Σ.

Voici le type défini pour un automate déterministe :

type ('a, 'b) dfa = {
  Start : 'a ;
  Accept : 'a list ;
  Delta : ('a * 'b * 'a) list
} ;;

Question 2

Définir une fonction reconnu de type (’a, ’b) dfa → ’b list → bool qui détermine si l’automate reconnaît un mot de Σ* (représenté par le type ’b list).

Cette fonction doit simuler le parcours de l’automate sur la liste des symboles.

Question 3

Définir une fonction genere_fort de type int → (int, int) dfa qui associe à un entier d un automate déterministe reconnaissant les entiers divisibles par d, lorsque ceux-ci sont lus en base 2 à partir du bit de poids le plus fort.

Pour vérifier la correction de cette fonction, utiliser les fonctions binaire_fort et reconnu définies précédemment.

2. Automates non déterministes

On choisit de représenter un automate fini non déterministe A = (Σ, Q, I, F, δ) par le type suivant :

type ('a, 'b) ndfa = {
  Nstart : 'a list ;
  Naccept : 'a list ;
  Ndelta : ('a * 'b * 'a) list
} ;;

Question 4

Pour obtenir un automate non déterministe reconnaissant les entiers divisibles par d à partir du bit de poids le plus faible, à partir d’un automate déterministe généré par genere_fort, il faut inverser l’ordre des bits.

Définir une fonction genere_faible de type int → (int, int) ndfa qui génère un tel automate.

Question 5

Définir une fonction reconnu2 de type (’a, ’b) ndfa → ’b list → bool qui détermine si un automate non déterministe reconnaît un mot de Σ*.

Cette fonction doit gérer les transitions non déterministes et vérifier si au moins un chemin mène à un état final.

Pour vérifier la correction de cette fonction, utiliser les fonctions binaire_faible et reconnu définies précédemment.

FAQ

Qu’est-ce qu’un bit de poids faible et fort ?

Le bit de poids faible est le premier bit à droite (le moins significatif), tandis que le bit de poids fort est le premier bit à gauche (le plus significatif) dans une représentation binaire.

Comment vérifier qu’un automate reconnaît bien les mots attendus ?

Utiliser la fonction de reconnaissance (reconnu ou reconnu2) en appliquant la décomposition binaire (binaire_faible ou binaire_fort) des mots à tester.

Pourquoi utiliser un automate non déterministe pour le bit de poids faible ?

Un automate non déterministe permet de gérer plus facilement les transitions inversées, car il peut explorer plusieurs états simultanément, contrairement à un automate déterministe.



Partagez vos remarques, questions , propositions d'amélioration ou d'autres cours à ajouter dans notre site

Enregistrer un commentaire (0)
Plus récente Plus ancienne

Publicité 1

Publicité 2