Lycée La Martinière Monplaisir Option Informatique 2eannée
Année 2016-2017 TP 4 : Procédure de Berry-Sethi
TP 4 : Procédure de Berry-Sethi
Judicaël Courant 28 novembre 2016
Le but de ce problème est d’implanter la procédure de Berry-Sethi de construction d’un automate (automate de Glushkov) reconnaissant une expression rationnelle donnée.
Un fichier afnd.ml contenant les définitions de type données ci-dessous est disponible sur le site.
On commence par définir un type des ensembles finis. Il s’agit en fait juste d’une abréviation :
hafnd.mli≡
(* type des ensembles finis *) type ’a ensf == ’a list;;
Cependant, par la suite, lorsqu’on utilisera le type ’a ensf, ce sera toujours pour désigner une liste triée par ordre croissant, sans répétition : lorsqu’on demandera une fonction prenant un argument de type ’a ensf, on pourra toujours supposer que cet argument est bien une liste triée sans répétition ; lorsqu’on demandera une fonction retournant un résultat de type ’a ensf, il faudra s’assurer que le résultat est bien trié et sans répétition.
Q1 Définir une fonction inter : ’a ensf -> ’a ensf -> ’a ensf retournant l’in- tersection des deux ensembles qui lui sont passées en argument. On utilisera le fait que les listes passées en argument sont bien triées pour faire en sorte que l’appel (inter u v) s’exécute en tempsO(n) où nest le maximum des cardinaux deu etv.
Q2 Définir une fonctionunion : ’a ensf -> ’a ensf -> ’a ensfretournant l’union des deux ensembles qui lui sont passées en argument. On utilisera le fait que les listes pas- sées en argument sont bien triées pour faire en sorte que l’appel(union u v)s’exécute en tempsO(n) où nest le maximum des cardinaux deuetv.
Q3 Définir une fonctionunion_liste : ’a ensf list -> ’a ensfretournant l’union d’une liste d’ensembles. Indication : pour respecter les contraintes données plus loin sur la fonction ensemble, il peut être malin d’écrire cette fonction de la façon suivante : le cas où la liste est vide ou ne contient qu’un élément sont triviaux, et le cas où la
Judicaël Courant- 28 novembre 2016 1/4 Document sous licence Art Libre (http://artlibre.org)
Lycée La Martinière Monplaisir Option Informatique 2eannée
Année 2016-2017 TP 4 : Procédure de Berry-Sethi
liste contient au moins deux éléments peut se faire en prenant l’union deux à deux des éléments de la liste ; il ne reste alors plus qu’à calculer l’union d’une liste deux fois plus courte.
Q4 Définir une fonctionunion_fun : ’a list -> (’a -> ’b ensf) -> ’b ensfqui, étant donné un ensemble I et une fonctionf, calculeSi∈If(i).
Q5 En déduire une fonction ensemble : ’a list -> ’a ensf prenant en argument une liste et retournant l’ensemble de ses éléments, c’est-à-dire la triant et expurgeant les doublons. On fera en sorte que cette fonction s’exécute en temps O(nlogn) où n est la longueur de la liste. Indication : cette fonction peut s’écrire en une ligne.
Q6 Écrire une fonction ajoute : ’a -> ’a ensf -> ’a ensfajoutant un élément à un ensemble.
Q7 Définir une fonction parties : ’a ensf -> ’a ensf ensf calculant l’ensemble des parties d’un ensemble.
On représentera les automates finis (déterministes ou non) par le type suivant : hafnd.mli+≡
type (’a, ’b) automate = { alphabet : ’a ensf;
etats : ’b ensf;
initiaux : ’b ensf;
finaux : ’b ensf;
transitions : (’b * ’a * ’b) ensf;
}
;;
type ’a mot = ’a list;;
Lorsque l’automate sera déterministe, l’ensemble des états initiaux sera un singleton et l’ensemble des transitions sera tel que pour tout état couple (q, x) d’un étatq et d’une lettre xil existe au plus une transition (q, x, q0).
Q8 Écrire une fonctionexecute_lettre : (’a, ’b) automate -> ’b -> ’a -> ’b ensfqui, à partir d’un automateA, d’un étatqet d’une lettrexcalcule l’ensemble, noté δ(q, x), constitué des états sur lesquels arrive une transition venant de l’étatq étiquetée parx.
Q9 Écrire une fonction execute : (’a, ’b) automate -> ’b ensf -> ’a mot ->
’b ensf qui, à partir d’un automate A, d’un ensemble d’étatsE et d’un mot u calcule l’ensemble, notéδ∗(E, u), constitué des états pouvant être atteints dans l’automate Aà partir d’un état deE en exécutant le motu.
Judicaël Courant- 28 novembre 2016 2/4 Document sous licence Art Libre (http://artlibre.org)
Lycée La Martinière Monplaisir Option Informatique 2eannée
Année 2016-2017 TP 4 : Procédure de Berry-Sethi
Q10 Écrire une fonctionest_reconnu : (’a, ’b) automate -> ’a mot -> booldi- sant si le mot donné est reconnu par l’automate donné.
Q11 Écrire une fonctiondeterminise : (’a, ’b) automate -> (’a, ’b ensf) automate retournant l’automate déterministe associé à un automate donné.
On définit le type des expressions rationnelles comme suit : hafnd.mli+≡
type ’a expr =
| Zero
| Un
| Lettre of ’a
| Conc of ’a expr * ’a expr
| Etoile of ’a expr
| Plus of ’a expr * ’a expr
;;
Q12 Écrire une fonction alphabet : ’a expr -> ’a set retournant l’alphabet em- ployé dans une expression rationnelle, c’est-à-dire l’ensemble desxpour lesquels(Lettre x) apparaît dans l’expression.
Q13 Écrire une fonctioncontient_epsilon : ’a expr -> booldisant si une expres- sion rationnelle contient le mot vide (cf cours).
Q14 Écrire une fonctionpref1 : ’a expr -> ’a setretournant l’ensemble des pré- fixes de longueur 1 d’une expression rationnelle. Écrire de même une fonction suf1 :
’a expr -> ’a sufretournant l’ensemble des suffixes de longueur 1.
Q15 Écrire une fonction succ : ’a expr -> ’a -> ’a set telle que (succ e x) re- tourne l’ensemble des lettresy telles quexy soit un facteur du langage associé àe.
Q16 Écrire une fonctionaut_local : ’a expr -> (’a, ’a option) automatetelle que(aut_local e), où le langage associé àeest supposé être local, retourne l’automate local associé à ce langage. L’ensemble des états sera représenté par le type Caml ’a option : l’état initial sera représenté par None et pour tout lettre a, les transitions étiquetées paraarriveront sur l’étatSome a.
Q17 Écrire une fonctionlinearise : ’a expr -> (’a * int) exprtelle que(linearise e)retourne une expression rationnelle linéaire obtenue en remplaçant chaque lettrexde epar une lettre (x, i) oùiest un entier, de façon à ce que les entiers soient tous distincts.
Judicaël Courant- 28 novembre 2016 3/4 Document sous licence Art Libre (http://artlibre.org)
Lycée La Martinière Monplaisir Option Informatique 2eannée
Année 2016-2017 TP 4 : Procédure de Berry-Sethi
Q18 Écrire une fonctionapplique_morphisme : (’a, ’b) automate -> (’a -> ’c) -> (’c, ’b) automatetelle que(applique_morphisme a f)retourne l’automate ayant les mêmes états que a mais dans lequel chaque transition étiquetée par une lettre x a été remplacée par une transition étiquetée par(f x).
Q19 Écrire une fonctionglushkov : ’a expr -> (’a, (’a * int) option) automate retournant l’automate de Glushkov associé à une expression rationnelle.
Q20 Écrire une fonctionafd : ’a expr -> (’a, (’a * int) option set) automate telle que (afd e)retourne le déterminisé de l’automate de Glushkov associé à l’expres- sion rationnelle e.
Judicaël Courant- 28 novembre 2016 4/4 Document sous licence Art Libre (http://artlibre.org)