Article de reference

Opérations sur les chaînes

En informatique , dans le domaine de la théorie des langages formels , on utilise fréquemment une variété de fonctions de chaîne ; cependant, la notation utilisée est différente...

En informatique , dans le domaine de la théorie des langages formels , on utilise fréquemment une variété de fonctions de chaîne ; cependant, la notation utilisée est différente de celle utilisée pour la programmation informatique , et certaines fonctions couramment utilisées dans le domaine théorique sont rarement utilisées en programmation. Cet article définit certains de ces termes de base.

Chaînes et langages

Une chaîne est une séquence finie de caractères. La chaîne vide est notée . La concaténation de deux chaînes et est notée , ou plus court . La concaténation avec la chaîne vide ne fait aucune différence : . La concaténation de chaînes est associative : .

Par exemple, .

Un langage est un ensemble fini ou infini de chaînes de caractères. Outre les opérations d'ensemble habituelles telles que l'union, l'intersection, etc., la concaténation peut être appliquée aux langages : si et sont des langages, leur concaténation est définie comme l'ensemble des concaténations de toute chaîne de et de toute chaîne de , formellement . Là encore, le point de concaténation est souvent omis par souci de concision.

Le langage constitué uniquement de la chaîne vide doit être distingué du langage vide . Concaténer un langage quelconque avec le premier n'apporte aucun changement : , tandis que concaténer avec le second produit toujours le langage vide : . La concaténation des langages est associative : .

Par exemple, en abrégeant , l'ensemble de tous les nombres décimaux à trois chiffres est obtenu comme . L'ensemble de tous les nombres décimaux de longueur arbitraire est un exemple de langage infini.

Alphabet d'une chaîne

L' alphabet d'une chaîne est l'ensemble de tous les caractères qui apparaissent dans une chaîne particulière. Si s est une chaîne, son alphabet est indiqué par

L' alphabet d'une langue est l'ensemble de tous les caractères qui apparaissent dans n'importe quelle chaîne de , formellement : .

Par exemple, l'ensemble est l'alphabet de la chaîne , et ce qui précède est l'alphabet de la langue ci-dessus ainsi que de la langue de tous les nombres décimaux.

Substitution de chaîne

Soit L une langue et Σ son alphabet. Une substitution de chaîne ou simplement une substitution est une application f qui associe des caractères de Σ à des langues (éventuellement dans un alphabet différent). Ainsi, par exemple, étant donné un caractère a ∈ Σ, on a f ( a )= L aL a ⊆ Δ * est une langue dont l'alphabet est Δ. Cette application peut être étendue aux chaînes comme

f (ε)=ε

pour la chaîne vide ε, et

f ( sa )= f ( s ) f ( a )

pour la chaîne sL et le caractère a ∈ Σ. Les substitutions de chaînes peuvent être étendues à des langages entiers comme

Les langages réguliers sont fermés en cas de substitution de chaîne. Autrement dit, si chaque caractère de l'alphabet d'un langage régulier est remplacé par un autre langage régulier, le résultat est toujours un langage régulier. De même, les langages sans contexte sont fermés en cas de substitution de chaîne.

Un exemple simple est la conversion f uc (.) en majuscule, qui peut être définie par exemple comme suit :

Pour l'extension de f uc aux chaînes, nous avons par exemple

  • f uc (‹Street›) = {‹S›} ⋅ {‹T›} ⋅ {‹R›} ⋅ {‹A›} ⋅ {‹SS›} ⋅ {‹E›} = {‹STRASSE›},
  • f uc (‹u2›) = {‹U›} ⋅ {ε} = {‹U›}, et
  • f uc (‹Allez !›) = {‹G›} ⋅ {‹O›} ⋅ {} = {}.

Pour l'extension de f uc aux langages, nous avons par exemple

  • f uc ({ ‹Straße›, ‹u2›, ‹Go!› }) = { ‹STRASSE› } ∪ { ‹U› } ∪ { } = { ‹STRASSE›, ‹U› }.

Homomorphisme de chaîne

Un homomorphisme de chaîne (souvent appelé simplement homomorphisme dans la théorie formelle du langage ) est une substitution de chaîne telle que chaque caractère est remplacé par une seule chaîne. C'est-à-dire, , où est une chaîne, pour chaque caractère .

Les homomorphismes de chaîne sont des morphismes monoïdes sur le monoïde libre , préservant la chaîne vide et l' opération binaire de concaténation de chaîne . Étant donné un langage , l'ensemble est appelé l' image homomorphe de . L' image homomorphe inverse d'une chaîne est définie comme

tandis que l'image homomorphe inverse d'une langue est définie comme

En général, , bien que l'on ait

et

pour n'importe quelle langue .

La classe des langages réguliers est fermée sous les homomorphismes et les homomorphismes inverses. De même, les langages sans contexte sont fermés sous les homomorphismes et les homomorphismes inverses.

Un homomorphisme de chaîne est dit ε-libre (ou e-libre) si pour tout a de l'alphabet . Les chiffrements simples de substitution à une seule lettre sont des exemples d'homomorphismes de chaîne (ε-libres).

Un exemple d'homomorphisme de chaîne g uc peut également être obtenu en définissant de manière similaire à la substitution ci-dessus : g uc (‹a›) = ‹A›, ..., g uc (‹0›) = ε, mais en laissant g uc indéfini sur les caractères de ponctuation. Des exemples d'images homomorphes inverses sont

  • g uc −1 ({ ‹SSS› }) = { ‹sss›, ‹sß›, ‹ßs› }, puisque g uc (‹sss›) = g uc (‹sß›) = g uc (‹ßs›) = ‹SSS›, et
  • g uc −1 ({ ‹A›, ‹bb› }) = { ‹a› }, puisque g uc (‹a›) = ‹A›, tandis que ‹bb› ne peut pas être atteint par g uc .

Pour ce dernier langage, g uc ( g uc −1 ({ ‹A›, ‹bb› })) = g uc ({ ‹a› }) = { ‹A› } ≠ { ‹A›, ‹bb› }. L'homomorphisme g uc n'est pas ε-libre, car il mappe par exemple ‹0› sur ε.

Un exemple très simple d'homomorphisme de chaîne qui mappe chaque caractère à un seul caractère est la conversion d'une chaîne codée EBCDIC en ASCII .

Projection de corde

Si s est une chaîne et est un alphabet, la projection de chaîne de s est la chaîne qui résulte de la suppression de tous les caractères qui ne sont pas dans . Elle s'écrit . Elle est formellement définie par la suppression des caractères du côté droit :

Ici désigne la chaîne vide . La projection d'une chaîne est essentiellement la même qu'une projection en algèbre relationnelle .

La projection de chaîne peut être promue à la projection d'un langage . Étant donné un langage formel L , sa projection est donnée par

Quotient droit et gauche

Le quotient droit d'un caractère a d'une chaîne s est la troncature du caractère a dans la chaîne s , à partir du côté droit. Il est noté . Si la chaîne n'a pas de a sur le côté droit, le résultat est la chaîne vide. Ainsi :

Le quotient de la chaîne vide peut être pris :

De même, étant donné un sous-ensemble d'un monoïde , on peut définir le sous-ensemble quotient comme

Les quotients gauches peuvent être définis de la même manière, les opérations se déroulant à gauche d'une chaîne.

Hopcroft et Ullman (1979) définissent le quotient L 1 / L 2 des langues L 1 et L 2 sur le même alphabet comme L 1 / L 2 = { s | ∃ tL 2 . stL 1 } . Il ne s'agit pas d'une généralisation de la définition ci-dessus, car, pour une chaîne s et des caractères distincts a , b , la définition de Hopcroft et Ullman impliquedonnant {}, plutôt que { ε }.

Le quotient gauche (lorsqu'il est défini de manière similaire à Hopcroft et Ullman 1979) d'un langage singleton L 1 et d'un langage arbitraire L 2 est connu sous le nom de dérivée de Brzozowski ; si L 2 est représenté par une expression régulière , il peut en être de même pour le quotient gauche.

Relation syntaxique

Le quotient droit d'un sous-ensemble d'un monoïde définit une relation d'équivalence , appelée relation syntaxique droite de S. Elle est donnée par

La relation est clairement d'indice fini (a un nombre fini de classes d'équivalence) si et seulement si les quotients droits de la famille sont finis ; c'est-à-dire si

est fini. Dans le cas où M est le monoïde des mots sur un alphabet, S est alors un langage régulier , c'est-à-dire un langage qui peut être reconnu par un automate à états finis . Ceci est discuté plus en détail dans l'article sur les monoïdes syntaxiques .

Annulation du droit

L' annulation à droite d'un caractère a d'une chaîne s est la suppression de la première occurrence du caractère a dans la chaîne s , en commençant par le côté droit. Elle est notée et est définie de manière récursive comme

La chaîne vide est toujours annulable :

De toute évidence, l'annulation à droite et la projection commutent :

Préfixes

Les préfixes d'une chaîne sont l'ensemble de tous les préfixes d'une chaîne, par rapport à une langue donnée :

où .

La fermeture du préfixe d'une langue est

Exemple:

Une langue est dite préfixée fermée si .

L'opérateur de fermeture de préfixe est idempotent :

La relation de préfixe est une relation binaire telle que si et seulement si . Cette relation est un exemple particulier d' ordre de préfixe .

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index