• Aucun résultat trouvé

Option Informatique MP/MP*, TP 2 Judicaël Courant 2 novembre 2015 (2015-W45-1)

N/A
N/A
Protected

Academic year: 2022

Partager "Option Informatique MP/MP*, TP 2 Judicaël Courant 2 novembre 2015 (2015-W45-1)"

Copied!
2
0
0

Texte intégral

(1)

1

Option Informatique MP/MP*, TP 2

Judicaël Courant

2 novembre 2015 (2015-W45-1)

Le but de ce problème est de construire des automates finis en Caml. On dit que deux automates sont équivalents s’ils reconnaissent le même langage. On représentera un automate en Caml par le code suivant :

⟨automates.ml⟩≡

(* Type des afd reconnaissant des mots sur l'alphabet 'a.

Les états de l'automate sont numérotés par des entiers consécutifs, en commençant à 0.

L'état initial est l'état 0.

*)type 'a etat = {

acceptant: bool; (* dit si l'état est acceptant *) (* les transitions partant de cet état: *)

transitions: ('a, int) hashtbl__t;

}(* le tableau des états de l'automate: la case i du tableau contient l'état numéro i *)

type 'a afd = Automate of ('a, int) hashtbl__t vect;

En particulier, dans notre modélisation Caml, l’ensemble des états d’un automate sera toujours un ensemble d’entiers de la forme[[0, 𝑛[[.

On introduit également une exception qui servira à modéliser le fait qu’un automate est bloqué :

⟨automates.ml⟩+≡

exception Blocage;;

(2)

2

Q1 Construire un automate sur l’alphabetcharreconnaissant le langageℒ(𝑎), où𝑎désigne le carac- tère'a'.

Q2 Construire un automate reconnaissant le mot vide (et seulement le mot vide).

Q3 Construire un automate reconnaissant le langage vide.

Q4 Écrire une fonctionexecute : 'a afd -> 'a list -> 'a etat. Appliquée à un automate d’état initial 𝑞0 et un mot 𝑢, cette fonction doit rendre 𝑞 = 𝑞0⋅ 𝑢 si cet état 𝑞 est bien défini et lever l’exceptionBlocagesinon.

Q5 Écrire une fonctionest_complet : 'a list -> 'a afd -> booltel que(est_complet[𝑙0; …; 𝑙u�−1] 𝒜) indique si l’automate𝒜, supposé travailler sur l’alphabet{𝑙0, …, 𝑙u�−1}est complet, c’est-à-dire in- dique si pour tout état𝑞et toute lettre 𝑎,𝑞 ⋅ 𝑎est bien défini.

Q6 Tout automate fini déterministe(𝑄, 𝑞0, 𝐹 , 𝛿)est équivalent à un automate fini déterministe(𝑄, 𝑞0, 𝐹 , 𝛿′) complet obtenu en posant𝑄= 𝑄∪{𝑞u�}où𝑞u�∉ 𝑄, et en posant, pour tout couple(𝑞, 𝑎) ∈ 𝑄×Σ, 𝛿′(𝑞, 𝑎) = 𝛿(𝑞, 𝑎)si𝛿(𝑞, 𝑎)est bien défini, et𝛿′(𝑞, 𝑎) = 𝑞u� sinon.

Écrire une fonctioncomplete : 'a list -> 'a afd -> 'a afdtel que(complete[𝑙0; …; 𝑙u�−1] 𝒜) complète l’automate𝒜, supposé travailler sur l’alphabet{𝑙0, …, 𝑙u�−1}.

Q7 Étant donné deux automates finis déterministes 𝒜u� = (𝑄u�, 𝑞u�, 𝐹u�, 𝛿u�), pour 𝑖 = 1, 2, on peut construire un automate, appelé automate produit de 𝒜1 et 𝒜2, défini par 𝒜1× 𝒜2 = (𝑄1 × 𝑄2, (𝑞1, 𝑞2), 𝐹1× 𝐹2, 𝛿), où𝛿est défini par𝛿((𝑞, 𝑞′), 𝑎) = (𝛿(𝑞, 𝑎), 𝛿(𝑞, 𝑎)).

Montrer que𝒜1× 𝒜2 reconnaît l’intersection des langages reconnus par𝒜1 et𝒜2.

Q8 Étant donné deux entiers𝑝et 𝑞non nuls, donner une bijection𝑓u�,u�: [[0, 𝑝[[ × [[0, 𝑞[[ → [[0, 𝑝𝑞[[.

Écrire une fonctioncode : int -> int -> int * int -> inttelle que (code p q (i,j)), où 𝑖 ∈ [[0, 𝑝[[et 𝑗 ∈ [[0, 𝑞[[, retourne𝑓u�,u�(𝑖, 𝑗)ainsi qu’une fonctiondecode : int -> int -> int ->

int * inttelle quedecode p q n, où𝑛 ∈ [[0, 𝑝𝑞[[, retourne𝑓u�,u�−1(𝑛).

Q9 Notre représentation ne permet pas de construire directement le produit de deux automates𝒜1et 𝒜2 car l’ensemble des états de celui-ci est un ensemble de couples alors que l’ensemble des états d’un de nos automates est nécessairement un ensemble d’entiers. Cependant, on peut aisément transformer𝒜1×𝒜2en un automate équivalent dont l’ensemble des états est un ensemble d’entiers.

Écrire une fonction produit : 'a afd -> 'a afd -> 'a afd construisant un automate équi- valent au produit de deux automates.

Q10 On dit qu’un état 𝑞 d’un automate 𝒜 = (𝑄, 𝑞0, 𝐹 , 𝛿) est accessible s’il existe un mot 𝑢 tel que 𝛿(𝑞0, 𝑢) = 𝑞.

Écrire une fonctionaccessibles : 'a afd -> int listretournant la liste des états accessibles de l’automate qui lui est passé en argument.

Q11 On dit qu’un état𝑞 d’un automate 𝒜 = (𝑄, 𝑞0, 𝐹 , 𝛿) est coaccessible s’il existe un mot𝑢tel que 𝛿(𝑞, 𝑢) ∈ 𝐹. Écrire une fonction coaccessibles : 'a afd -> int listretournant la liste des états coaccessibles de l’automate qui lui est passé en argument.

Q12 On dit qu’un automate estémondési tous ses états sont à la fois accessibles et co-accessibles (sauf éventuellement l’état initial). L’opération d’émondagesur un automate, consiste à lui enlever des états de façon à obtenir un automate émondé. Cette définition de l’émondage est volontairement imprécise. Étant donné un automate 𝒜 = (𝑄, 𝑞0, 𝐹 , 𝛿) définir précisément ce qu’est l’automate émondé obtenu à partir de𝒜.

Q13 Étant donné un automate représenté par un élément de type afd en Caml, peut-on représenter directement l’automate émondé correspondant ? Écrire une fonctionemonde : 'a afd -> 'a afd qui, appliquée à un afd𝒜retourne un automate émondé équivalent à𝒜.

Q14 Écrire une fonctionafd_local : 'a list -> 'a list -> ('a * 'a) list -> 'a afdTel que (afd_local[𝑎0; …; 𝑎u�−1] [𝑏0; …; 𝑏u�−1] [(𝑐0, 𝑑0); …; (𝑐u�−1, 𝑑u�−1)])retourne un automate local recon- naissant le langage local𝐿ne contenant pas le mot vide, dont l’ensemble des préfixes de longueur1 est{𝑎0, …, 𝑎u�−1}, l’ensemble des suffixes de longueur1 est{𝑏0, …, 𝑏u�−1}et l’ensemble des facteurs de longueur2est {(𝑐0, 𝑑0), …, (𝑐u�−1, 𝑑u�−1)}.

Références

Documents relatifs

Étant continue sur son support et ce dernier étant compact, on déduit du théorème de Weierstrass que f est bornée sur son support et donc sur R puisqu’elle est nulle en dehors de

On généralise cette notion aux ensembles de clauses (ou aux formes normales conjonctives si l’on préfère) : on dit qu’un atome apparaît positivement (négativement) dans un

Écrire une fonction coaccessibles : afd -> int list retournant la liste des états coaccessibles de l’automate qui lui est passé en argument. Q14 On dit qu’un automate est

Écrire une fonction inverse(s) prenant en argument la représentation d’une

Écrire une fonction fusion(t1, t2) prenant en argument deux tableaux t1 et t2 de nombres supposés triés 1 de longueurs

Vous trouverez dans le fichier lance_tests.py les commandes permettant de générer les douze combinaisons possibles (quatre méthodes pour générer un tableau, trois fonctions de

5 Il y a une erreur dans l’énoncé : il faut aussi le graphe en second argument de la fonction check_tags_predecessors qui a donc pour type task -> graph

Ce sujet propose l’étude de deux algorithmes calculant l’enveloppe convexe d’un nuage de points en position générale dans le plan affine, c’est-à-dire qui ne contient pas