cursus.

Cours 1 · FondementsLeçon 2 sur 2

Rappels mathématiques utiles

5 h de lecture9 sections Version PDF

À la fin de cette leçon, vous saurez

Ensembles et relations, induction structurelle, récurrence sur la longueur d'un mot, et la notion de fonction de transition dont dépendent les automates.

Le chapitre 1 a défini les objets ; celui-ci fournit les outils pour raisonner dessus. Ce ne sont pas des rappels décoratifs : sans induction ni récurrence, on ne peut prouver aucun théorème du cours, et sans la notion de fonction, on ne peut pas définir un automate. Ce chapitre est court parce qu'il suppose des bases acquises — mais il isole précisément les points que la théorie des langages sollicite sans cesse, et où l'imprécision se paie plus tard.

Ensembles, un rappel ciblé

Un langage est un ensemble ; les opérations du chapitre 1 sont des opérations d'ensembles. Trois points méritent d'être fixés, parce qu'ils reviendront tels quels.

L'inclusion ABA \subseteq B signifie : tout élément de AA est élément de BB. Pour prouver ABA \subseteq B, on prend un élément quelconque de AA et on montre qu'il est dans BB. Pour prouver une égalité A=BA = B, la méthode standard est la double inclusion : ABA \subseteq B et BAB \subseteq A. C'est ainsi qu'on démontrera l'équivalence de deux automates, ou d'un automate et d'une expression régulière.

Le cardinal A|A| est le nombre d'éléments de AA. Un ensemble peut être fini, infini dénombrable (ses éléments peuvent être énumérés en liste, comme Σ\Sigma^*) ou non dénombrable. Cette distinction n'est pas anodine : elle est la clé d'un résultat surprenant vu plus bas.

L'ensemble des parties P(A)\mathcal{P}(A) est l'ensemble de tous les sous-ensembles de AA. Si AA a nn éléments, P(A)\mathcal{P}(A) en a 2n2^n. Retenez ce 2n2^n : il expliquera, au chapitre 4, pourquoi la déterminisation d'un automate peut faire exploser son nombre d'états.

Relations

Une relation sur un ensemble EE est un sous-ensemble de E×EE \times E : elle dit quels couples sont « en relation ». Une relation peut être réflexive, symétrique, transitive.

Le cas important pour le cours est la relation d'équivalence : réflexive, symétrique et transitive à la fois. Une telle relation partitionne EE en classes d'équivalence — des paquets disjoints qui recouvrent tout EE, où deux éléments sont dans le même paquet exactement quand ils sont en relation. Cette idée, abstraite pour l'instant, sera l'outil exact de la minimisation d'un automate au chapitre 6 : on regroupera les états « indistinguables » en une seule classe.

L'induction structurelle

Beaucoup d'objets du cours sont définis inductivement : on donne des cas de base, puis des règles pour construire des objets plus gros à partir d'objets plus petits. Le mot lui-même se définit ainsi :

  • base : ε\varepsilon est un mot ;
  • règle : si uu est un mot et aΣa \in \Sigma une lettre, alors aua \cdot u est un mot.

Tout mot s'obtient par un nombre fini d'applications de la règle à partir de la base. Les expressions régulières (chapitre 5) et les grammaires (chapitre 7) sont définies exactement de la même manière.

Quand un objet est défini inductivement, on le raisonne par induction structurelle : pour prouver qu'une propriété PP vaut pour tous les objets, il suffit de la prouver sur les cas de base, puis de montrer qu'elle se transmet par chaque règle de construction. C'est le même principe que la récurrence sur les entiers, appliqué à la structure de l'objet plutôt qu'à un nombre.

La récurrence sur la longueur d'un mot

C'est le schéma de preuve le plus employé du cours, et celui de l'exercice. Pour établir qu'une propriété P(u)P(u) est vraie pour tout mot uu, on procède par récurrence sur u|u| :

  1. Base : on prouve P(ε)P(\varepsilon) — la propriété pour le mot vide, de longueur 0.
  2. Hérédité : on suppose PP vraie pour tout mot de longueur nn (hypothèse de récurrence), et on en déduit PP pour un mot quelconque de longueur n+1n+1, généralement écrit u=awu = a \cdot w avec w=n|w| = n.

Comme tout mot a une longueur finie, ces deux étapes suffisent à couvrir Σ\Sigma^* tout entier. L'égalité uv=u+v|u \cdot v| = |u| + |v| du chapitre 1 est l'ingrédient qui fait fonctionner presque toutes ces récurrences.

Un point de méthode qui sépare les copies : le cas de base ne se néglige jamais. Oublier de traiter ε\varepsilon — parce qu'il « paraît évident » — est l'erreur classique, et souvent c'est précisément là que la propriété est la plus subtile à établir.

Quiz · vérifiez votre compréhension Sans réponse

On veut prouver qu'une propriété P(u) est vraie pour tout mot u de Σ*, par récurrence sur |u|. Que doit contenir la preuve ?

La fonction de transition

Dernier outil, et le plus tourné vers la suite. Une fonction f:ABf : A \to B associe à chaque élément de AA (le domaine) un élément de BB (le codomaine). « Un », pas « au moins un » ni « au plus un » : à chaque entrée correspond exactement une sortie.

L'objet central du cœur du cours est la fonction de transition d'un automate, qu'on notera δ\delta. Elle prendra un état et une lettre, et rendra un état :

δ:Q×ΣQ,δ(q,a)=q.\delta : Q \times \Sigma \to Q, \qquad \delta(q, a) = q'.

Lue à voix haute : « depuis l'état qq, en lisant la lettre aa, on va dans l'état qq' ». Toute la mécanique d'un automate déterministe (chapitre 3) tiendra dans cette fonction. Et c'est justement l'exigence de fonction — une seule sortie par entrée — qui distinguera le déterminisme du non-déterminisme : au chapitre 4, on relâchera cette contrainte, δ\delta rendra un ensemble d'états, et l'on ne parlera plus de fonction au sens strict mais de relation. Toute la difficulté de la déterminisation viendra de ce basculement.

Quiz · vérifiez votre compréhension Sans réponse

Un ensemble A a 5 éléments. Combien d'états, au maximum, l'automate déterminisé issu d'un automate à 5 états peut-il avoir — et où lit-on ce nombre ?

À vous

L'exercice met la récurrence en pratique sur un objet concret : le miroir d'un mot. Vous définissez la fonction miroir par récursion sur la structure du mot — un cas de base pour ε\varepsilon, un cas récursif pour awa \cdot w —, puis vous testez la propriété miroir(uv)=miroir(v)miroir(u)\text{miroir}(u \cdot v) = \text{miroir}(v) \cdot \text{miroir}(u).

L'important est ce que la solution révèle : la structure de la fonction récursive est exactement celle de la preuve par récurrence. Définir par récursion et prouver par récurrence sont le même geste — celui que vous répéterez tout le reste de l'année.

Exercice · JavaScript · à vous de jouer

Définissez la fonction miroir par récursion sur la structure d'un mot, puis testez la propriété miroir(u·v) = miroir(v)·miroir(u). Les tests suggèrent — la solution vous donne la vraie preuve par récurrence, dont la structure calque exactement celle de la fonction.

En attente
// Le miroir d'un mot : miroir(abc) = cba. On le définit PAR RÉCURSION sur la
// structure du mot — exactement comme on le prouverait par induction.
//
//   miroir(ε)      = ε                      (cas de base)
//   miroir(a · u)  = miroir(u) · a          (cas récursif : a est la 1re lettre)
//
// C'est la traduction en code d'une définition inductive. Le "cas de base" et
// le "cas récursif" sont exactement les deux cas d'une preuve par récurrence.

// ── À VOUS (1) : définir miroir par récursion ───────────────────────────────
function miroir(u) {
  if (u === "") return "";        // cas de base : miroir(ε) = ε
  // cas récursif : première lettre = u[0], reste = u.slice(1)
  return ""; // à compléter avec miroir(u.slice(1)) et u[0]
}

// ── À VOUS (2) : vérifier une propriété par la pratique ─────────────────────
// PROPRIÉTÉ à établir : pour tous mots u, v :  miroir(u·v) = miroir(v)·miroir(u)
// (l'ordre s'inverse !). Testez-la sur de nombreux couples : si elle tient
// partout, c'est bon signe — mais SEULE une preuve par récurrence la garantit.
function proprieteTient(u, v) {
  return miroir(u + v) === miroir(v) + miroir(u);
}

// ── Vérification ────────────────────────────────────────────────────────────
console.log("miroir('abc') =", miroir("abc"), "(attendu cba)");
console.log("miroir('') =", "'" + miroir("") + "'", "(attendu ε)");
console.log("");
const mots = ["", "a", "ab", "abba", "aabb", "xyz"];
let toutesOk = true;
for (const u of mots) for (const v of mots) {
  if (!proprieteTient(u, v)) { console.log("CONTRE-EXEMPLE : u=" + u + " v=" + v); toutesOk = false; }
}
console.log(toutesOk ? "La propriété tient sur tous les tests." : "Propriété fausse !");

Console de sortie
Le résultat s'affiche dans la console

Ce que la suite en fait

Vous disposez maintenant du vocabulaire (chapitre 1) et des outils de preuve (ce chapitre). Le bloc II peut commencer, et c'est le cœur du cours.

Le chapitre 3 introduit l'objet vers lequel tout ce qui précède tendait : l'automate fini déterministe, entièrement bâti sur la fonction de transition δ\delta définie ici. La double inclusion servira à prouver des équivalences, la récurrence sur la longueur à établir qu'un automate reconnaît bien le langage voulu, et le 2n2^n de l'ensemble des parties reviendra dès le chapitre 4 pour expliquer le coût de la déterminisation.

À retenir

Flashcards · 1 / 4Toucher pour retourner

Exercices d'entraînement

Exercice 1 · cherchez avant de lire la correction

Récurrence sur la longueur

Pour un mot uu et un entier n0n \geq 0, on note unu^n la concaténation de nn copies de uu (avec u0=εu^0 = \varepsilon). Démontrer par récurrence sur nn que un=nu.|u^n| = n \cdot |u|.

Exercice 2 · cherchez avant de lire la correction

Involution du miroir

On admet la propriété miroir(uv)=miroir(v)miroir(u)\text{miroir}(u \cdot v) = \text{miroir}(v) \cdot \text{miroir}(u). Démontrer par récurrence sur u|u| que miroir(miroir(u))=u\text{miroir}(\text{miroir}(u)) = u pour tout mot uu.

Exercice 3 · cherchez avant de lire la correction

Parties et relation d'équivalence

  1. Un ensemble EE a 44 éléments. Combien P(E)\mathcal{P}(E) a-t-il d'éléments ?
  2. Sur Σ\Sigma^*, on pose uvu \sim v lorsque u=v|u| = |v|. Est-ce une relation d'équivalence ? Combien a-t-elle de classes ?
Fin de la leçon

Vous avez parcouru les 9 sections.

Marquez-la terminée pour faire avancer votre parcours, ou revenez sur un point avant de passer à la suite.