|
Un langage L sur un alphabet A est un ensemble de chaînes (ou ensemble de mots) sur A. L est donc un sous-ensemble de A*, autrement dit L ⊆ A*. |
Par conséquent, l'ensemble des langages L sur A est l'ensemble P(A*) des parties de A*, autrement dit : L ∈ P(A*).
Par exemple, si l'on considère l'alphabet A = {0, 1} alors L1 = {0, 00, 1, 01, 11, 10 } est un langage sur A. De même, pour tout entier naturel n, An est un langage sur A, où, rappelons le, An est l'ensemble des mots de longueur n sur A. Si de plus, pour toute lettre a, an désigne le mot formé de n symboles a consécutifs, alors L2 = { 0n1n | n ≥ 0}, L3 = {0n10m | n ≥ 0, m ≥ 1}, L4 = {1n | n ≥ 2} et L5 = {0i | i ≥ 0} = {0}* sont d'autres exemples de langages sur A.
Parmi tous les langages sur un alphabet A donné, on en distingue quelques uns particuliers, dont par exemple les suivants.
Par exemple, L = {aib | i ≥ 0 } = {b, ab, aab, aaab...} est dit préfixe mais n'est pas suffixe. L = {an | n ∈ N} n'est ni l'un ni l'autre.
Notons par ailleurs que ∅ ≠ {ε}.
Comme les langages sont des ensembles, on peut leur appliquer les opérations ensemblistes classiques : union, intersection, complémentation, etc. De plus, par extension de la concaténation des mots aux langages, on peut définir quelques autres opérateurs.
Par extension, le produit est parfois appelé "concaténation de deux langages". Cette concaténation est notée × (et le symbole × est souvent omis), mais il s'agit bien de deux concaténations différentes : l'une entre mots et l'autre entre ensembles de mots. Intuitivement, la concaténation de deux langages est l'ensemble des mots obtenus en concaténant un mot du premier langage avec un mot du second. Par exemple, si L1={a,bc} et L2={de,f} alors L1 × L2={ade, af, bcde, bcf}.
Sur ces opérateurs entre langages, on a, entre autres, les quelques propriétés suivantes :
Jusqu'ici, un langage sur un alphabet A pouvait être n'importe quelle partie dans P(A*) , ce qui est très vaste. En particulier, au moment de vérifier si un mot appartient à un langage, il est utile d'avoir une caractérisation précise de ce langage, ce qui n'est pas toujours évident si l'on considère une partie infinie quelconque dans P(A*) . On va donc, d'un point de vue pragmatique, s'intéresser à des classes de langages particuliers pour lesquels on a des descriptions finies, utilisables pour décider si oui ou non, un mot est dans un langage. Parmi ces types de langages, on s'intéresse en premier lieu aux langages rationnels.
Exercices et tests :
Exercice 5.1. Montrer que le
produit de deux langages préfixes est un langage préfixe.
jeudi, 11/12/03 10:45