Cours 5 : Automates à pile

Définition

Syntaxe

Automate à pile :

$𝒜 ≝ ⟨Q, 𝛴, 𝛤, 𝛿, q_0, z_0, F⟩$ où

  • $Q$ est un ensemble fini d’états
  • $𝛴$ alphabet fini d’entrée
  • $𝛤$ alphabet de pile
  • $𝛿 ⊆ Q × 𝛤 × (𝛴∪ \lbrace 𝜀 \rbrace) × Q × 𝛤^\ast$ finie
  • $q_0∈Q$
  • $z_0 ∈𝛤$ OU $z_0 ∈𝛤^+$
  • $F⊆Q$
  digraph {
    rankdir=LR;
    q_1[shape="doublecircle"];
    ⊥ -> q_0;
    q_0 -> q_0[label="a, A/AA | a, ⊥/⊥A"];
    q_0 -> q_1[label="𝜀, A/A | 𝜀, ⊥/⊥"];
    q_1 -> q_1[label="b, A/𝜀"];
  }

Sémantique opérationnelle

Système de transitions infini sur l’ensemble des configurations $Q×𝛤^\ast$

  • configuration initiale : $q_0, z_0$

  • Transitions : $q, 𝛾z ⟶^a_𝒜 q’, 𝛾𝛾’$ si $(q, z, a, q’, 𝛾’)∈𝛿$

  • Le langage est

    L(𝒜) ≝ \lbrace w∈𝛴^\ast \mid ∃ q_f∈ F, 𝛾∈𝛤^\ast; q_0, z_0 ⟶^w_𝒜 q_f, 𝛾\rbrace

Exs :

\begin{align*} q_0, \bot & ⟶^a q_0, \bot A \\ & ⟶^a q_0, \bot AA \\ & ⟶^𝜀 q_1, \bot \bot AA \\ & ⟶^b q_1, \bot A \\ & ⟶^b q_1, \bot \\ \end{align*}
L(𝒜) ≝ \lbrace a^n b^m \mid n≥ m ≥0 \rbrace

Palindromes pairs :

où $x ∈ \lbrace a, b, \bot \rbrace$

  digraph {
    rankdir=LR;
    q_2[shape="doublecircle"];
    ⊥ -> q_0;
    q_0 -> q_0[label="a, x/xA | b, x/xB"];
    q_0 -> q_1[label="𝜀, x/x"];
    q_1 -> q_1[label="b, B/𝜀 | a, A/𝜀"];
    q_1 -> q_2[label="𝜀, ⊥/𝜀"];
  }

Mots bien parenthésés (mots de Dyck) :

  • $a$ : parenthèse ouvrante
  • $b$ : parenthèse fermante

$𝛤 = \lbrace \bot, 1 \rbrace$

  digraph {
    rankdir=LR;
    q_1[shape="doublecircle"];
    ⊥ -> q_0;
    q_0 -> q_0[label="a, x/x1 | b, 1/𝜀"];
    q_0 -> q_1[label="𝜀, ⊥/𝜀"];
  }

NB : Avec la transition $𝜀, ⊥/𝜀$, on vide la définitivement la pile ⟶ on ne peut plus faire de transition dès lors.

Lemme fondamental

Lemme fondamental :

$q, 𝛾𝛾_1 ⟶^w_𝒜 q’’, 𝜀$ en $n$ étapes

ssi

$q, 𝛾_1 ⟶^{w_1}_𝒜 q’, 𝜀$ en $n_1$ étapes

ET

$q, 𝛾 ⟶^{w_2}_𝒜 q’, 𝜀$ en $n_2$ étapes

Preuve

⟸ :

On observe que si $q, 𝛾_1 ⟶^{w_1}_𝒜 q’, 𝜀$ en $n_1$ étapes alors $∀𝛾, q, 𝛾𝛾_1 ⟶^{w_1}_𝒜 q’, 𝛾$ en $n_1$ étapes, puis $q’, 𝛾 ⟶^{w_2}_𝒜 q’’, 𝜀$ en $n_2$ étapes. Le résultat s’ensuit.

⟹ :

Si

q, 𝛾 𝛾_1 ⟶^{a_1}_𝒜 q_1, 𝛾𝛾_2 ⟶^{a_2}_𝒜 q_2, 𝛾𝛾_3 \\ ⋯ ⟶^{a_{n_1}}_𝒜 q_{n_1}, 𝛾𝛾_{n_1+1}

$∀1≤i≤n, 𝛾_i≠𝜀$

alors

q, 𝛾_1 ⟶^{a_1}_𝒜 q_1, 𝛾_2 ⟶^{a_2}_𝒜 q_2, 𝛾_3 \\ ⋯ ⟶^{a_{n_1}}_𝒜 q_{n_1}, 𝛾_{n_1+1}

Donc si on prend le calcul où $𝛾_{n_1+1}=𝜀$, $a_1 ⋯ a_{n_1} = w_1$,

$q, 𝛾_1 ⟶^{w_1}_𝒜 q’, 𝜀$ en $n_1$ étapes, puis $q’, 𝛾 ⟶^{w_2}_𝒜 q’’, 𝜀$ en $n_2$ étapes

Acceptance par pile vide

N(𝒜) ≝ \lbrace w ∈ 𝛴^\ast \mid ∃q∈Q, q_0 z_0 ⟶^w_𝒜 q, 𝜀\rbrace

Prop : Soit $L⊆𝛴^\ast$

∃𝒜; L = L(𝒜) ⟺ ∃𝒜'; L = N(𝒜')

Preuve :

⟹ :

𝒜 ≝ (Q, 𝛴, 𝛤, 𝛿, q_0, z_0, F)

On construit

𝒜' ≝ (Q', 𝛴', 𝛤', 𝛿', q_0', z_0')

en rajoutant un nouveau symbole de fond de pile $\bot$, et des transitions partant des anciens états finals vers un nouvel état $q_f$ qui vide la pile.

On pose :

  • $Q’ ≝ Q \sqcup \lbrace q_f \rbrace$
  • $𝛤’ ≝ 𝛤 \sqcup \lbrace \bot \rbrace$
  • $q’_0 = q_0$
  • $z’_0 =z_0$
  • $𝛿’ ≝ 𝛿 ∪ \lbrace (q,z, 𝜀, q_f, 𝜀) \mid q∈F \text{ ou } q=q_f, z∈𝛤’ \rbrace$
  digraph {
    rankdir=LR;
    subgraph cluster_0 {
      label="𝒜'"
    subgraph cluster_1 {
      label="𝒜"
        q_1[shape=doublecircle, style=dashed]; q_2[shape="doublecircle", style=dashed]; q_3[shape="doublecircle", style=dashed]; ⋯;
    }
    ⊥z_0; q_f;
  }
    ⊥z_0 -> ⋯;
    ⋯ -> {q_1, q_2, q_3};
    q_1 ->q_f[label="𝜀, z/𝜀"];
    q_2 ->q_f[label="𝜀, z/𝜀"];
    q_3 ->q_f[label="𝜀, z/𝜀"];
    q_f -> q_f[label="𝜀, z/𝜀"]
  }

$L(𝒜)⊆N(𝒜’)$

clair

$N(𝒜’) ⊆ L(𝒜)$

Si $q_0, \bot z_0 ⟶^w_{𝒜’} q, 𝜀$ alors $q_0, \bot z_0 ⟶^{w_1}{𝒜’} q_f, 𝛾 ⟶^{w_2}{𝒜’} q_f, 𝜀$

Pour $w=w_1 w_2$ et $q_f$ la première apparition de $q_f$ dans l’exécution : le seul moyen de dépiler $\bot$ est de passer par $q_f$ en $q_f, w_2 = 𝜀$ donc $w_1 = w$ et la première fois où on arrive en $q_f$, la pile vaut soit $𝜀$, soit $\bot 𝛾$.

⟸ :

{\cal A}' ≝ ⟨Q \sqcup \lbrace q_f \rbrace, 𝛴, 𝛤 \sqcup \lbrace \bot \rbrace, 𝛿', q_0, \bot z_0, \lbrace q_f \rbrace ⟩

𝛿' ≝ 𝛿 ∪ \lbrace (q, \bot, 𝜀, q_f, 𝜀) \mid q∈F \rbrace

On rajoute un nouveau fond de pile $\bot$, et à chaque fois que la pile est “vide” (pour notre nouveau fond), on ajoute des transitions de la forme $q, \bot ⟶^𝜀 q_f, 𝜀$

  digraph {
    rankdir=LR;
    subgraph cluster_0 {
      label="𝒜'"
    subgraph cluster_1 {
      label="𝒜"
        q_1[style=dashed]; q_2[style=dashed]; q_3[style=dashed]; ⋯;
    }
    ⊥z_0;q_f[shape="doublecircle"];
  }
    q_f[shape="doublecircle"];
    ⊥z_0 -> ⋯;
    ⋯ -> {q_1, q_2, q_3};
    q_1 ->q_f[label="𝜀, ⊥/𝜀"];
    q_2 ->q_f[label="𝜀, ⊥/𝜀"];
    q_3 ->q_f[label="𝜀, ⊥/𝜀"];
  }

Th : Si $L = L(G)$ est algébrique, alors on peut construire $𝒜$ un automate à pile tq $L = N(𝒜)$.

Preuve :

Ce qu’on met dans la pile, ce sont des morceaux de dérivation gauche de notre grammaire.

  digraph {
    rankdir=TB;
    ⋯1[label="⋯"];
    ⋯2[label="⋯"];
    ⋯3[label="⋯"];
    subgraph cluster_1 {
      label = "Arbre de dérivation";
      A;⋯1; B; ⋯2; C; ⋯3;
    }
    S -> {A, B, C};
    A -> ⋯1;
    B -> ⋯2;
    C -> ⋯3;
    ⋯1 -> w;
    ⋯2 -> w;
    ⋯3 -> w;
  }

Soit $G = ⟨N, 𝛴, P, S⟩$

On construit

𝒜 ≝ ⟨ \lbrace q \rbrace, 𝛴, N∪𝛴, 𝛿, q, S ⟩

avec

𝛿 ≝ \lbrace (q, A, 𝜀, q, \underbrace{𝛼^R}_{\text{ reverse : le mot à l'envers}}) \mid A ⟶ 𝛼 ∈ P\rbrace \quad \, \text{(règle guess)}\\ ∪ \lbrace (q, a, a, q, 𝜀) \mid a∈𝛴 \rbrace \quad \text{(règle check)}

Invariant :

$∀u∈𝛴^\ast, A, B∈N, 𝛾∈(N∪𝛴)^\ast$,

B ⟹_{lm}^\ast u A 𝛾 \, \, \text{ ssi } \, \, q, B ⟶^u_𝒜 q, 𝛾^R A
  • Cas de base : $B = u A 𝛾$, i.e $B=A ∧ u=𝛾=𝜀$

  • Étape d’induction :

Si

B ⟹_{lm}^n u A 𝛾 ⟹_{lm}u \underbrace{𝛼}_{=u'A'𝛾'} 𝛾

par HR :

\begin{align*} q, B & ⟶^u_𝒜 q, 𝛾^R A &&\text{(guess) } n \text{ fois}\\ q, 𝛾^R A & ⟶^u_𝒜 q, 𝛾^R 𝛾'^R A' u'^R &&\text{(guess) } 1 \text{ fois} \\ q, 𝛾^R 𝛾'^R A' u'^R & ⟶^{u'}_𝒜 q, 𝛾^R 𝛾'^R A' &&\text{(check) } \vert u' \vert \text{ fois} \\ \end{align*}

Réciproquement :

Si $q, B ⟶^u_𝒜 q, 𝛾^RA ⟶^𝜀_𝒜 q, 𝛾^R𝛼^R$

où $𝛼 = u’A’𝛾’$ et $q, 𝛾^R 𝛾’^R A’ u’^R ⟶^{u’}_𝒜 q, 𝛾^R 𝛾’^R A’$

Par HR,

B ⟹_{lm}^n uA𝛾

puis

A ⟶ 𝛼

donc

uA𝛾 ⟹_{lm} uu'A'𝛾'𝛾

Par l’invariant :

S⟹_{lm}^\ast w \quad \text{ ssi } \quad q, S ⟶^w_𝒜 q, 𝜀

Forme normale de GREIBACH (GNF)

Une grammaire est sous GNF :

si $∀A⟶𝛼∈P, 𝛼∈𝛴N^\ast$

Th (GREIBACH) :

Si $G$ est une grammaire algébrique, alors on peut construire $G’$ en GNF tq :

L(G)\backslash \lbrace 𝜀\rbrace = L(G')

Corollaire : Si $L=L(G)$, $𝒜$ simple (un seul état), en temps réel (pas d’$𝜀$-transition) tq $L\backslash \lbrace 𝜀\rbrace = L(A)$

En effet, les règles guess de la construction précédente deviennent :

  • $q, A ⟶𝜀 q, 𝛽^R,a$ où $A⟶a𝛽 ∈P$

puis

  • $q, 𝛽^Ra ⟶^a q, 𝛽^R$

On les remplace par

𝛿 = \lbrace (q, A, a, a, 𝛽^R) \mid A ⟶ a𝛽 ∈P \rbrace

Th : Soit $𝒜$ un automate à pile. On peut construire une grammaire algébrique $G$ tq $N(𝒜) = L(G)$ de taille $\vert G \vert ∈ O(\vert 𝒜\vert Q^{M-1})$ où $M$ majore les $m$ (dans la définition de $P$)

NB : $\vert 𝒜 \vert$ est la somme des $m+1$, pour $m$ intervenant dans la définition de $P$.

$G = (N, 𝛴, P, S)$

N≝ \lbrace (q, z, q') ∈ Q × 𝛤 × Q \rbrace \sqcup \lbrace S \rbrace

Invariant :

L_G(q, z, q') ≝ \lbrace w∈𝛴^\ast \mid q,z⟶^w_𝒜 q', 𝜀 \rbrace

On a

N(𝒜) = \bigcup_{q∈Q} L(q_0, z_0, q)
P≝ \lbrace S ⟶ (q_0, z_0, q) \mid q∈Q\rbrace \\ ∪ \lbrace (q,z,q')⟶ a(q_1,z_1,q_2) ⋯ (q_m, z_m, q') \mid (q, z, a, q_1, z_m, ⋯, z_1)∈𝛿, q_2, ⋯ , q_m∈Q \rbrace
L(q, z, q') = \bigcup\limits_{\substack{(q, z, a, q_1, z_m, ⋯, z_1)∈𝛿 \\ q_2,⋯, q_m∈Q}} \lbrace a \rbrace \cdot L(q_1, z_1, q_2) ⋯ L(q_m, z_m, q_2)

car :

Si

q, z⟶^a_𝒜 q_1, z_m ⋯ z_1 ⟶^w_𝒜 q', 𝜀

Par le lemme fondamental, on a l’existence de

$q_2, ⋯, q_m, q_{m+1} = q’$ tq

  • $q_i, z_i ⟶^{w’i}_𝒜 q{i+1}, 𝜀$
  • et $w = w_1 ⋯ w_m$

Leave a comment