From d1387fae5a9ef597c0f92650f7f5aba5f3578b42 Mon Sep 17 00:00:00 2001
From: "David A. Madore" <david+git@madore.org>
Date: Thu, 15 Mar 2018 15:24:33 +0100
Subject: Third exercise.

---
 controle-20180322.tex | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 99 insertions(+)

(limited to 'controle-20180322.tex')

diff --git a/controle-20180322.tex b/controle-20180322.tex
index a1eb15e..d06ec8d 100644
--- a/controle-20180322.tex
+++ b/controle-20180322.tex
@@ -181,6 +181,105 @@ de $b$).
 (6) Déduire des questions (2) à (5) que $L$ n'est pas rationnel.
 
 
+%
+%
+%
+
+\exercice
+
+Dans cet exercice, on s'intéresse au langage $L$ formé des
+programmes $e$ (codés, dans un langage Turing-complet fixé quelconque,
+comme des entiers naturels ou comme des mots sur un alphabet fixé sans
+importance) qui, quelle que soit le paramètre $n$ qu'on leur fournit
+en entrée, terminent en temps fini et retournent la valeur $0$ : soit
+$L = \{e : (\forall n) {\varphi_e(n)\downarrow} = 0\}$.  Si l'on
+préfère, $L$ est l'ensemble de toutes les façons de coder la fonction
+constante égale à $0$.  On appellera aussi $M$ le complémentaire
+de $L$.  On se demande si $L$ ou $M$ sont semi-décidables.
+
+\smallskip
+
+(1) Créon et Antigone se disputent pour savoir si $L$ est
+semi-décidable.  Créon pense qu'il l'est, et il tient le raisonnement
+suivant pour l'expliquer :
+
+{\narrower
+
+Pour savoir si un programme $e$ est dans l'ensemble $L$, il suffit de
+l'examiner pour vérifier que toutes les instructions qui mettent fin
+au programme renvoient la valeur $0$ : si c'est le cas, on termine en
+répondait « oui » (c'est-à-dire $e\in L$) ; sinon, on rentre dans une
+boucle infinie.  Ceci fournit un algorithme qui semi-décide $L$.
+
+\par}
+
+\smallskip
+
+\noindent Antigone, elle, pense que $L$ n'est pas semi-décidable.  Son
+argument est le suivant :
+
+{\narrower
+
+Si $L$ était semi-décidable, je pourrais m'en servir pour résoudre le
+problème de l'arrêt.  En effet, donné un programme $e'$ et une
+entrée $m$ sur laquelle je cherche à tester l'arrêt de $e'$, je peux
+fabriquer le programme $e$ qui prend une entrée $n$, lance l'exécution
+de $e'$ sur l'entrée $m$ pendant au plus $n$ étapes et à la fin
+renvoie $1$ si ces $n$ étapes ont suffi à terminer l'exécution
+de $e'$, et $0$ sinon.  Dire que $e \in L$ signifie que $e'$ ne
+termine jamais sur $m$, donc pouvoir semi-décider $L$ permet de
+résoudre algorithmiquement le problème de l'arrêt, ce qui est
+impossible.
+
+\par}
+
+\smallskip
+
+\noindent Qui a raison ?  Expliquer précisément quelle est l'erreur
+commise par le raisonnement incorrect, et détailler les éventuels
+passages incomplets dans le raisonnement correct.
+
+\medskip
+
+(2) Héloïse et Abélard se disputent pour savoir si $M$ est
+semi-décidable.  Héloïse pense qu'il l'est, et elle tient le
+raisonnement suivant pour l'expliquer :
+
+{\narrower
+
+Pour savoir si un programme $e$ est dans l'ensemble $M$, il suffit de
+tester successivement les valeurs $\varphi_e(n)$ pour tous les $n$
+possibles : si l'on rencontre un $n$ tel que $\varphi_e(n)$ n'est
+pas $0$, alors on termine en répondant « oui » (c'est-à-dire $e\in
+M$) ; sinon, on ne va jamais terminer, et cela signifie que $e\not\in
+M$.  Ceci fournit un algorithme qui semi-décide $M$.
+
+\par}
+
+\smallskip
+
+\noindent Abélard, lui, pense que $M$ n'est pas semi-décidable.  Son
+argument est le suivant :
+
+{\narrower
+
+Si $M$ était semi-décidable, je pourrais m'en servir pour résoudre le
+problème de l'arrêt.  En effet, donné un programme $e'$ et une
+entrée $m$ sur laquelle je cherche à tester l'arrêt de $e'$, je peux
+fabriquer le programme $e$ qui prend une entrée $n$, l'ignore purement
+et simplement, exécute $e'$ sur l'entrée $m$ et à la fin renvoie $0$.
+Dire que $e\in M$ signifie que $e'$ ne termine pas sur $m$, donc
+pouvoir semi-décider $M$ permet de résoudre algorithmiquement le
+problème de l'arrêt, ce qui est impossible.
+
+\par}
+
+\smallskip
+
+\noindent Qui a raison ?  Expliquer précisément quelle est l'erreur
+commise par le raisonnement incorrect, et détailler les éventuels
+passages incomplets dans le raisonnement correct.
+
 %
 %
 %
-- 
cgit v1.2.3

