Exercices sur les automates finis et les applications, Exercices de Applications des sciences informatiques
Christophe
Christophe3 March 2014

Exercices sur les automates finis et les applications, Exercices de Applications des sciences informatiques

PDF (124.3 KB)
3 pages
524Numéro de visites
Description
Exercices d’informatique sur les automates finis et les applications. Les principaux thèmes abordés sont les suivants: exercices.
20points
Points de téléchargement necessaire pour télécharger
ce document
Télécharger le document
IF114-0607-session1.dvi

ENSEIRB 2006-2007 - Département informatique - Première année IF114 - Automates finis et applications

Examen (session1)

Veillez à soigner la rédaction de vos solutions, particulièrement vos justifications et vos preuves. Soyez précis et concis. Bon courage et bonne chance !

Exercice 1 (4 points)

On rappelle ci-dessous la négation du lemme de l’étoile.

Si pour tout N ∈ N, il existe w ∈ L vérifiant :

1. |w| > N ,

2. et pour toute décomposition w = x.u.y avec |u| > 0 et |x.u| ≤ N , il existe n ∈ N tel que x.un.y 6∈ L

alors, L n’est pas un langage régulier.

Pour chacun des langages suivants, prouvez qu’il est régulier en donnant l’automate fini minimal qui l’accepte, ou qu’il est irrégulier en utilisant la négation du lemme de l’étoile.

1. L1 = {(ab) k | k ∈ N}

2. L2 = {a kbm | k,m ∈ N et k ≤ m}

3. L3 = {a kbm | k,m ∈ N}

Exercice 2 (4 points)

Pour tout automate fini déterministe A = (Q, q0,Σ, δ, F ), nous définissons A = (Q, q0,Σ, δ, F ) par :

– Q = Q ∪ {χ} où χ 6∈ Q est un nouvel état – pour tout q ∈ Q et s ∈ Σ, si δ(q, s) = q′, alors δ(q, s) = q′, inversement, si δ(q, s) n’est

pas définie, alors δ(q, s) = χ – enfin, F = Q \ F .

1. Soit A l’automate fini ci-dessous. Représentez l’automate A correspondant.

1 2 3

a

b a

a, b

2. Prouvez que, quel que soit A, L(A) = L(A) : le langage de A est le complémentaire du langage de A (remarque : aucune induction n’est nécessaire ici).

Exercice 3 (7 points)

On définit l’opérateur de soustraction préfixe sur les expressions régulières de la façon suivante :

1

docsity.com

– ε−1β = β – a−1∅ = ∅ – a−1ε = ∅ – a−1a = ε – b−1a = ∅

– a−1(α+ β) = (a−1α) + (a−1β) – a−1(αβ) = (a−1α)β si ε 6∈ L(α) – a−1(αβ) = (a−1α)β+(a−1β) si ε ∈ L(α) – a−1(α∗) = (a−1α)α∗

pour tous symboles a, b ∈ Σ distincts et toutes expressions régulières α, β sur Σ.

L’opération a−1α consiste à retirer a au début des mots définis par α. Par exemple :

a−1(a∗ba(a+ b)∗) = (a−1a∗)ba(a+ b)∗ + a−1(ba(a+ b)∗)

= (a−1aa∗)ba(a+ b)∗ + (a−1b)a(a+ b)∗

= (εa∗)ba(a+ b)∗ + ∅a(a+ b)∗

= a∗ba(a+ b)∗ + ∅

= a∗ba(a+ b)∗

Notons que εα = α et ∅+ α = α et ∅α = ∅ pour toute expression régulière α.

1. Pour remplir le tableau suivant, on débute avec l’expression régulière a∗ba(a + b)∗

(première ligne) à laquelle on applique successivement a−1 (première colonne) puis b−1

(deuxième colonne). Si une nouvelle expression régulière est construite par ce calcul, on crée une nouvelle ligne dans le tableau, puis on lui applique a−1 et b−1, et ainsi de suite. Complétez le tableau ci-dessous (le nombre de lignes est exact).

a b

a∗ba(a+ b)∗ a∗ba(a+ b)∗

2. Représentez l’automate dont la relation de transition est définie par le tableau précédent. Son état initial est a∗ba(a+b)∗, et ses états finaux sont les expressions régulières α telles que ε ∈ L(α). Quelles propriétés remarquables possède cet automate ? Que représente l’expression régulière de chacun des états ?

3. Écrivez en langage naturel un algorithme qui calcule l’automate (c’est à dire le tableau) depuis une expression régulière α quelconque. On supposera connue une fonction qui calcule a−1α pour a et α quelconques.

Exercice 4 (5 points)

Afin d’implanter l’opération de soustraction préfixe définie à l’exercice précédent, nous devons disposer d’une représentation des expressions régulières. Celles-ci sont généralement représentées par des arbres :

a

b •

a ∗

+

a b

pour l’expression a∗ba(a+ b)∗

2

docsity.com

Nous supposons donc l’existence d’un type tree et de la fonction :

#define EPSILON 0

#define EMPTY 1

#define CONCAT ’.’

#define UNION ’+’

#define KLEENE ’*’

tree *node(char op, tree *l, tree *r);

L’arbre précédent se construit donc comme suit :

node(CONCAT,

node(KLEENE,

node(’a’,NULL,NULL),

NULL),

node(CONCAT,

node(’b’,NULL,NULL),

node(CONCAT,

node(’a’,NULL,NULL),

node(KLEENE,

node(UNION,

node(’a’,NULL,NULL),

node(’b’,NULL,NULL)),

NULL))))

Le calcul de a−1 peut alors être effectué sur ces arbres, comme montré ci-dessous :

a−1•

a

b •

a ∗

+

a b

= +

a−1∗

a

b •

a ∗

+

a b

a−1•

b •

a ∗

+

a b

= +

a−1a∗

a

b •

a ∗

+

a b

a−1b •

a ∗

+

a b

= +

ε ∗

a

b •

a ∗

+

a b

∅ •

a ∗

+

a b

= •

a

b •

a ∗

+

a b

On dispose des fonctions :

char label(tree *t);

tree *left(tree *t);

tree *right(tree *t);

qui retournent respectivement l’étiquette, le fils gauche et le fils droit d’un nœud de l’arbre.

1. Écrivez en langage C la fonction tree *prefix_sub(char c, tree *t); qui calcule c−1t sans réaliser les simplifications par ε et ∅ correspondant à la dernière étape ci- dessus. S’il vous est nécessaire de définir de nouvelles fonctions, donnez leurs signatures et les traitements réalisés, sans en écrire le code.

2. Indiquez comment modifier votre fonction prefix_sub pour y ajouter les simplifications ∅α = ∅ et ∅+ α = α et εα = α

3

docsity.com

commentaires (0)
Aucun commentaire n'a été pas fait
Écrire ton premier commentaire
Ceci c'est un aperçu avant impression
Chercher dans l'extrait du document
Docsity n'est pas optimisée pour le navigateur que vous utilisez. Passez à Google Chrome, Firefox, Internet Explorer ou Safari 9+! Téléchargez Google Chrome