DM1 : Virus

Calculabilité DM 1 : Virus

On notera $C$ l’ensemble des codes de machines de Turing (abrégé MT).

EX 1

Soit

\(f : \begin{cases} C ⟶ C \\ ⟨M⟩ \mapsto ⟨M'⟩, \text{ où $M$ est une MT} \end{cases}\) calculable.

Montrons qu’il existe une machine $M$ telle que, sur toute donnée $x$ : \(M_U (f(⟨M⟩),⟨x⟩) = ⟨ M(x)⟩\)

On pose : \(g \overset{\text{déf}}{:} \begin{cases} C ⟶ C \\ ⟨M⟩ \mapsto ⟨M(M)⟩, \text{ où } M(M) ≝ x \mapsto \begin{cases} M(⟨M⟩)(x) \text{ si } M(⟨M⟩) \text{ est le code d'une MT} \\ \bot \text{ sinon. } \end{cases}\end{cases}\)

Attenion : il faut montrer que $g$ est calculable ! $g(⟨M⟩)$ pourrait très bien ne pas terminer sur un entrée $⟨M⟩$. Exhiber explicitement $⟨M⟩$.

Alors en notant $M$ la machine $g(⟨M_{f\circ g}⟩)$ :

  • $f(⟨M⟩) = f(⟨g(⟨M_{f\circ g}⟩)⟩) = (f \circ g)(⟨M_{f\circ g}⟩)$, d’où, pour toute donnée $x$, \(M_U (f(⟨M⟩),⟨x⟩) = M_{f\circ g}(⟨ M_{f\circ g}⟩)(x)\) car $f\circ g$ est calculable, en tant que composée de fonctions calculables, et

  • $g(⟨M_{f\circ g}⟩) = M_{f\circ g}(⟨M_{f\circ g}⟩)$, et, pour toute donnée $x$ : \(g(⟨M_{f\circ g}⟩)(x) = M_{f\circ g}(⟨M_{f\circ g}⟩)(x)\) car $M_{f\circ g}(⟨M_{f\circ g}⟩)∈C$, puisque $f, g ∈ C^C$.

Donc $M ≝ g(⟨M_{f\circ g}⟩)$ est est telle que, pour toute donnée $x$ : \(M_U (f(⟨M⟩),⟨x⟩) = ⟨ M(x)⟩\)

EX 2

1

On note $f$ la fonction : \(f : C⟶C, ⟨M⟩ \mapsto ⟨M'_M⟩\) où $M’_M$ est la MT qui, pour tout entrée $x$ (sur le premier ruban), renvoie :

  • $⟨M⟩$ (sur le deuxième ruban) dans un état $q_{emit}$ si $x=𝜀$
  • $\bot$ sinon

La fonction $f$ est calculée par la machine qui, à toute entrée $x$, associe :

  • Le code de $M_x$ si $x ∈ C$
  • $\bot$ sinon

Donc par l’exercice 1, il existe une machine $ℳ$ telle que, pour toute donnée $x$ : \(M_U (⟨M'_ℳ⟩,⟨x⟩) = ⟨ ℳ(x)⟩\)

Et en particulier, pour $x=𝜀$, il vient que :

$ℳ$ est un virus.

2

On note $M_d$ la machine :

\[M_d : C∋⟨M⟩ \mapsto \begin{cases} accept \text{ si $M$ est un virus} \\ reject \text{ ou } \bot \text{ sinon} \end{cases}\]

$M_d$ prend en entrée une donnée $x$, et :

  • si $x ∈ C$ : $M_d$ simule $x$ sur $𝜀$ (en utilisant le deuxième ruban, qui est initialisé à $$𝜀$), puis :
    • si le calcul de $x$ sur $𝜀$ passe par une configuration $(q_{emit},(w_1, w_2),(𝜀, $⟨M⟩))$ : $M_d$ s’arrête sur $accept$.
    • sinon, $M_d$ s’arrête sur $reject$ (si le calcul termine) ou renvoie $\bot$.
  • sinon : $M_d$ s’arrête sur $reject$

Il vient alors que :

Pour toute machine $M$, $M_d$ accepte $⟨M⟩$ si, et seulement si, $M$ est un virus.

Donc l’ensemble des codes de virus \(V ≝ \{⟨M⟩ ∈ C \vert \text{le calcul de $M(𝜀)$ passe par $(q_{emit},(w_1, w_2),(𝜀, \$⟨M⟩))$}\}\) est récursivement énumérable.

3

Montrons que $V$ n’est pas récursif, i.e, d’après l’exercice 2 - question 2, que $V$ n’est pas co-récursivement énumérable.

Problème $𝒫$ :

  • Donnée : $⟨M’⟩ ∈ C$
  • Question : $⟨M’⟩∈ \overline{V}$ ?

On réduit le problème du non-arrêt $\overline{𝒫_{arrêt}}$ à $𝒫$.

Soit $g$ la fonction calculable qui prend en entrée un couple $(⟨M⟩,⟨w⟩) ∈ C \times {données}$ et qui retourne $⟨ℳ_{M,w}⟩∈C$, où :

$ℳ_{M,w}$ prend en entrée une donnée $x$ et :

  • Si $x=𝜀$ :
    • simule $M$ sur $w$, puis :
      • si $M(w)\neq \bot$ : écrit $⟨ℳ_{M,w}⟩$ sur le deuxième ruban, dans un état $q_{emit} ∉ Q_{M}$.
      • ne termine pas, sinon
  • rejette sinon

NB :

Une telle machine $ℳ_{M,w}$ existe, car en considérant la fonction calculable : \(f_{M,w} : C⟶C, ⟨M'⟩ \mapsto ⟨M''_{M',M,w}⟩\) où $M’‘_{M’,M,w}$ est la MT qui, pour tout entrée $x$ (sur le premier ruban) :

  • Si $x=𝜀$ :
    • simule $M$ sur $w$, puis :
      • si $M(w)\neq \bot$ : écrit $⟨M’⟩$ sur le deuxième ruban, dans un état $q_{emit} ∉ Q_{M}$.
      • ne termine pas, sinon
  • rejette sinon

$f_{M,w}$ admet un “point fixe” (au sens de l’exercice 1), qu’on note $ℳ_{M,w}$.


Comme \(∀M, M(w) \neq \bot ⟺ ℳ_{M,w} ∈ V\)

c’est-à-dire :

\[∀M, M(w) = \bot ⟺ ℳ_{M,w} ∈ \overline{V}\]

alors on a bien \(\overline{𝒫_{arrêt}} ≼ 𝒫\)

et

$\overline{V}$ n’est pas récursivement énumérable, d’où $V$ n’est pas récursif.

EX 3

1) On pose $V_0 ≝ V$, et pour tout $n∈ℕ$ : $M ∈ V_{n+1}$ si, et seulement si :

  • $M∈V_n$

ou

  • $M(𝜀)$ passe par une configuration dans laquelle le ruban de sortie contient le code d’une machine de $V_n$.

Alors il vient que $𝒱 = \bigcup\limits_{n∈ℕ} V_n$

Par récurrence sur $n∈ℕ$ : “$V_n$ est récursivement énumérable”

  • Pour $n=0$ : prouvé dans l’exercice 2
  • Pour $n>0$ :

On note $M_{d_n}$ la machine :

\[M_{d_n} : C∋⟨M⟩ \mapsto \begin{cases} accept \text{ si $M$ est un infectée par un virus} \\ reject \text{ ou } \bot \text{ sinon} \end{cases}\]

$M_{d_n}$ prend en entrée une donnée $x$, et :

  • si $x ∈ C$ : $M_{d_n}$ simule $x$ sur $𝜀$ sur le premier ruban, puis, à chaque configuration $(q_{emit},(w_1, w_2),(𝜀, $⟨M’⟩))$ du calcul $x(𝜀)$ : $M_{d_{n-1}}$ est simulée sur $M’$, sur le deuxième ruban.
    • si $M_{d_{n-1}}$ accepte $M’$ : $M_{d_n}$ accepte $x$
    • sinon : $M_{d_n}$ rejette ou ne termine pas (selon que $M_{d_{n-1}}(M’)$ termine ou pas).
  • sinon : $M_{d_n}$ rejette.

Alors, par hypothèse de récurrence : pour toute machine $M$, $M_{d_n}$ accepte $⟨M⟩$ si, et seulement si, $M ∈ V_n$.

On conclut donc que $𝒱 = \bigcup\limits_{n∈ℕ} V_n$ est récursivement énumérable.

Attention : une union infinie de langages réc. én. n’est pas forcément réc. én.

Ex :

\(Arret = \bigcup_{n∈ℕ} Arret_n\) où

\[Arret_n ≝ \{⟨M,w⟩ | M \text{ ne termine pas sur } w ∧ |⟨M,w⟩|≤n \}\]

2)

On a montré que : $∀n≥0, V_n$ est récursivement énumérable, donc en particulier $𝒱\backslash V = \bigcup\limits_{n>0} V_n$ est récursivement énumérable (les $V_i$ croissent).

Or : \(\underbrace{\overline{V}}_{\text{non réc. énumérable par II.3)}} = \underbrace{(𝒱\backslash V)}_{\text{réc. énumérable}} \sqcup \overline{𝒱}\)

Donc comme les langages récursivement énumérables sont stables par union, il vient nécessairement que :

$\overline{𝒱}$ n’est pas récursivement énumérable, d’où 𝒱 n’est pas récursif.

EX 4

On réutilise les notations précédentes, et on utilise un astérisque pour les ensembles définis avec la nouvelle définition de virus.

1)

Montrons que $\overline{𝒱^\ast}$ n’est pas récursivement énumérable.

$\overline{V_0^\ast}$ est l’ensemble des codes de MT infectées par une machine $M$ comportant un ruban de sortie tel qu’il existe une donnée $x_M$ telle que le calcul de $M$ ne passe par une configuration dans laquelle le ruban de sortie contient $⟨M⟩$ : donc $\overline{V_0^\ast} \supset \overline{V_0}$, et par une récurrence immédiate : \(∀ n ∈ ℕ, \overline{V_n^\ast} \supset \overline{V_n}\) d’où \(\overline{𝒱^\ast} \supset \overline{𝒱}\)

Donc on réduit aisément le problème de la non semi-décidabilité de $\overline{𝒱}$ à $\overline{𝒱^\ast}$, et

$𝒱^\ast$ n’est pas co-récursivement énumérable

2)

De même, comme les $𝒱_i’$ croissent :

Problème $𝒫’$ $\succcurlyeq$ Problème $𝒫_0’$
Donnée : $⟨M’⟩ ∈ C$   Donnée : $⟨M’⟩ ∈ C$
Question : $⟨M’⟩∈ 𝒱’ = \bigcup\limits_{n ∈ ℕ} V’_n$ ?   Question : $⟨M’⟩∈ V’_0 = V’$ ?

On réduit le problème du non-arrêt à $𝒫_0’$.

Soit $g$ la fonction calculable \(g : \begin{cases} C \times \{données\} ⟶ V' \\ ⟨M⟩,⟨w⟩ \mapsto ⟨ℳ_{M,w}⟩ \end{cases}\)

où $ℳ_{M,w}$ prend en entrée une donnée $x$ et simule $M$ sur $w$ pendant $\vert x\vert $ étapes sur le premier ruban, puis :

  • si, avant la $\vert x\vert $-ième étape, $M$ s’arrête sur $w$ : $ℳ_{M,w}$ rejette.
  • sinon, si au bout de la $\vert x\vert $-ième étape, $M$ ne s’est toujours pas arrêtée sur $w$ : $ℳ_{M,w}$ écrit $⟨ℳ_{M,w}⟩$ sur le deuxième ruban, dans un état $q_{emit} ∉ Q_{M}$.

NB :

Une telle machine $ℳ_{M,w}$ existe, car en considérant la fonction calculable : \(f_{M,w} : C⟶C, ⟨M'⟩ \mapsto ⟨M''_{M',M,w}⟩\) où $M’‘_{M’,M,w}$ est la MT qui, pour tout entrée $x$ (sur le premier ruban) :

  • si, avant la $\vert x\vert $-ième étape, $M$ s’arrête sur $w$ : rejette.
  • sinon, si au bout de la $\vert x\vert $-ième étape, $M$ ne s’est toujours pas arrêtée sur $w$ : écrit $⟨M’⟩$ sur le deuxième ruban, dans un état $q_{emit} ∉ Q_{M}$.

$f_{M,w}$ admet un “point fixe” (au sens de l’exercice 1), qu’on note $ℳ_{M,w}$.


Il vient donc que :

  • pour toute donnée $x$, $ℳ_{M,w}$ passe par une configuration dans laquelle le ruban de sortie contient $⟨ℳ_{M,w}⟩$

si, et seulement si

  • pour toute donnée $x$, $M$ ne s’arrête pas sur $w$ en moins de $\vert x\vert $ étapes

si, et seulement si

  • $M$ ne s’arrête pas sur $w$

Donc \(\overline{𝒫_{arrêt}} ≼ 𝒫_0' ≼ 𝒫'\)

et

$𝒱’$ n’est pas récursivement énumérable.

Attention : \(V⊆V' ∧ V \text{ non réc.én } \lnot ⟹ V' \text{ non réc.én}\)

Contre-ex :

\[Arret ⊆ 𝛴^\ast\]

Leave a comment