Je ne suis pas certain de l'utilisation des expressions langage "infini" ou langage "fini" en théorie informatique.
L = { a b }∗
Un autre problème est que la théorie formelle du langage est plutôt particulière dans la façon dont elle utilise le terme «langage».
Pour tout le monde dans ce monde, sauf les personnes dans la théorie formelle du langage, un langage est un système d'énoncés utilisés pour communiquer, donc chaque énoncé a une forme (sa syntaxe ) et une sorte de sens (sa sémantique ). La théorie du langage formel, du moins la partie utilisée en informatique, est consacrée au problème de la meilleure définition formelle de la syntaxe des langages. Il s'agit de la relation entre la syntaxe des langues (à quoi ressemblent les énoncés) et les formalismes (langues!) Tels que les expressions régulières utilisées pour définir la syntaxe des langues.
Ainsi, dans la théorie formelle du langage, «un langage» est défini simplement comme «un ensemble de chaînes». Il n'attribue généralement pas de signification aux chaînes de la langue.
Dans le même temps, les formalismes utilisés pour décrire les langues, telles que les expressions régulières, forment également des langues dans ce sens: par exemple, chaque expression régulière est une chaîne et, par conséquent, l'ensemble d'expressions régulières est une langue. Cependant, pour ces formalismes, les chaînes dans la langue do ont un sens: par exemple, la signification de chaque expression régulière est la langue qu'elle désigne.
a b { a b } est une langue, à savoir la langue constituée de la chaîne a b. cependant,a bn'est pas seulement une chaîne, mais aussi une expression régulière: un membre de l'ensemble d'expressions régulières valides (qui est une langue). Comme toute expression régulière, elle a un sens: elle désigne une langue, dans ce cas, la langue{ a b }.
Passons maintenant à votre exemple: { a b }∗. L'opérateur∗ dénote une fonction qui mappe les langues aux langues: il mappe chaque langue L à la langue composée de toutes les chaînes qui se composent d'une chaîne Lzéro ou plusieurs fois répété. SiL est la langue vide, le résultat est L; dans tous les autres cas, le résultat est un langage infini. Par exemple,{ a b }∗ est la langue { ϵ , a b , a b a b , a b a b a b , a b a b a b a b , … }. C'est infini, mais en utilisant l'opérateur∗, nous pouvons le décrire de manière finie, comme { a b }∗.
De plus, nous pouvons utiliser une expression régulière pour décrire ce langage, à savoir ( a b )∗. Comme toutes les expressions régulières, il s'agit d'une chaîne finie, mais comme la plupart des expressions régulières qui contiennent le∗ opérateur, il décrit un langage infini.
Chaque fois qu'un texte sur les langues formelles utilise une expression telle que ( a b )∗qui dénote une langue, demandez-vous si elle discute de l'expression régulière elle-même (par exemple, comment elle est construite, quelle langue elle dénote, etc.) ou si elle utilise simplement l'expression régulière pour se référer à la langue dénotée.
ab*
(l'étoile de Kleene) signifie que vous pouvez avoir zéro ou plusieurs combinaisons de la chaîneab
, cela inclut un nombre infini potentiel de chaînes: {"", ab ^ 1, ab ^ 2, ab ^ 3, ... ., ab ^ n}. Cependant, vous pouvez toujours construire un FSM qui reconnaît ce langage car il n'y a en réalité aucun moyen de générer une chaîne infinie, lorsqu'elles sont traitées par une machine, toutes les chaînes doivent être finies, mais cela ne rend pas le langage lui-même fini. L'infinité des langues est théorique.