Fermeture de Kleene

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir Fermeture.

La fermeture de Kleene, parfois appelée étoile de Kleene ou encore fermeture itérative, est un opérateur unaire utilisé pour décrire les langages formels. Le nom vient de la notation employée: la fermeture est notée par un astérisque.

L'étoile de Kleene est l'un des trois opérateurs de base utilisés pour définir une expression rationnelle, avec la concaténation et l'union ensembliste.

Appliquée à un ensemble X, elle a pour résultat le langage X^*, défini ainsi :

  1. Si X est un alphabet, c'est-à-dire un ensemble de symboles ou caractères, alors X^* est l'ensemble des mots sur X, mot vide \varepsilon inclus.
  2. Si X est un langage, alors X^* est le plus petit langage qui le contienne, qui contienne \varepsilon et qui soit stable par concaténation.


Exemples

Pour l'alphabet \{a,b,c\}, on a

\{a,b,c\}^*=\{\varepsilon, a,b,c,aa,ab,ac,ba,bb,bc,ca,cb,cc,aaa,\ldots\}

Pour la partie X=\{aa,b\} composée des deux mots aa et b sur l'alphabet \{a,b\}, on obtient

\{aa,b\}^*=\{\varepsilon, b,aa,bb,aab, baa,bbb, aaaa, aabb, baab, bbaa,bbbb,\ldots\}

Définition[modifier | modifier le code]

On appelle fermeture de Kleene ou étoile de Kleene d'une partie X d'un monoïde M le sous-monoïde engendré par X. Ce sous-monoïde est noté X^*. Comme d'usage pour les opérations de fermeture, il peut être défini de trois manières équivalentes:

  • X^* est la plus petite partie de M contenant X et l'élément neutre de M et fermée pour l'opération de M.
  • X^* est l'intersection de tous les sous-monoïdes de M contenant X.
  • X^* est l'ensemble de tous les produits de la forme x_1x_2\cdots x_n, pour n\ge0 et x_1,x_2,\ldots, x_n\in X.

Si X est un ensemble générateur du monoïde M , on a en particulier X^*=M.

Cas du monoïde libre[modifier | modifier le code]

Dans le cas d'un alphabet A, on note A^* l'ensemble de tous les mots sur A. L'ensemble A^* est un monoïde pour la concaténation, et il est engendré par A (pour être tout à fait rigoureux, A^* est engendré par les mots composés d'une lettre, que l'on identifie avec les lettres).

Si X est une partie de A^*, alors X^* est un sous-monoïde de A^* qui peut être libre ou pas. Il est d'usage de noter par X^n l'ensemble

X^n=\{x_1x_2\cdots x_n\mid x_1,x_2,\ldots, x_n\in X\}

de tous les produits de n éléments de X. On a alors la formule

X^*=\bigcup_{n\ge0}X^n.

Si X^* est un sous-monoïde librement engendré par X, c'est-à-dire si tout mot de X^* est produit, de manière unique, de mots de X, on dit que X est un code ou que X est une base de X^*.

Par exemple, l'ensemble X=\{aa,b\} est un code, et l'ensemble X=\{a,ab,ba\} n'est pas un code parce que le mot aba possède les deux factorisations

aba= ab . a = a . ba

Opérateur plus[modifier | modifier le code]

L'opérateur plus est un opérateur analogue à l'étoile de Kleene. Il associe à une partie X d'un demi-groupe M le sous-demi-groupe engendré par X, noté X^+. On a

X^+=\bigcup_{n>0}X^n.

Comme d'usage pour l'étoile, l'opérateur plus peut être défini de trois manières équivalentes:

  • X^+ est la plus petite partie de M contenant X et fermée pour l'opération de M.
  • X^+ est l'intersection de tous les sous-demi-groupes de M contenant X.
  • X^+ est l'ensemble de tous les produits de la forme x_1x_2\cdots x_n, pour n>0 et x_1,x_2,\ldots, x_n\in X.

Dans un monoïde, on a les relations suivantes entre l'étoile et l'opérateur plus:

X^*=X^+\cup\{\varepsilon\}, X^+=XX^*=X^*X.

Voir aussi[modifier | modifier le code]