Skip to content

Commit

Permalink
Ch04.6. Exemple Machine de Turing UCL-INGI#51 (fix 3 bar)
Browse files Browse the repository at this point in the history
  • Loading branch information
gaetbout committed May 7, 2018
1 parent ede027b commit 9fdfce6
Showing 1 changed file with 19 additions and 20 deletions.
39 changes: 19 additions & 20 deletions 03_ResultatsFondamentaux.tex
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,7 @@ \section{Problème de l'arrêt}
\draw[very thick,blue] \ellipse{1,-1}{1.5}{2.5};
\draw (-1.5,0) node {$\bullet$};
\draw (-1.5,0) node[above] {$halt$};

%Partie de droite
\draw[red] (7,5) node[above] {Ensembles};
\draw[very thick, red] \ellipse{7,0}{3}{5};
Expand Down Expand Up @@ -461,11 +461,11 @@ \section{Insuffisance des fonctions totales}
Dans un modèle de calcul (langage de programmation) dans lequel tous les programmes se terminent, la fonction \emph{halt} est trivialement calculable (fonction constante 1). Étant donné que les problèmes pratiques que l'on doit résoudre sont des fonctions totales, on peut se demander. Mais on va montrer qu'un tel modèle est restrictif; il ne permet pas de calculer toutes les fonctions totales calculables.

\begin{myexem}
Un exemple de modèle de calcul ne permettant que le calcul de fonctions totales est par exemple \textbf{BLOOP} (défini plus loin) ou encore \textbf{MiniJava}, c'est-à-dire Java sans récursivité ni boucle while et où les boucles for ne peuvent modifier le compteur de boucle.
Un exemple de modèle de calcul ne permettant que le calcul de fonctions totales est par exemple \textbf{BLOOP} (défini plus loin) ou encore \textbf{MiniJava}, c'est-à-dire Java sans récursivité ni boucle while et où les boucles for ne peuvent modifier le compteur de boucle.
\end{myexem}

Posons Q un langage (\textbf{non trivial}) dont tous les programmes se terminent (ils ne calculent que des fonctions totales) et pour
lequel il existe un interpréteur calculable, $interpret(n,x){} =\phi'_n$, où
lequel il existe un interpréteur calculable, $interpret(n,x){} =\phi'_n$, où
$\phi'_n$ est la fonction calculée par le programme $Q_n$. L'interpréteur est une fonction totale car il donne toujours une réponse vu que tous les programmes se terminent. Par langage de programmation non trivial, on entend un langage où les opérations de base telles que l'addition peuvent être réalisées.

\begin{mytheo}[Hoare-Allison]
Expand Down Expand Up @@ -497,13 +497,13 @@ \section{Insuffisance des fonctions totales}
d'écrire un programme qui calcule $diag'$ en utilisant $diag$)

\item Contradiction :\\
Comme $diag'$ est calculable dans Q, il existe un programme $Q_d$ qui calcule $diag'$.
Comme $diag'$ est calculable dans Q, il existe un programme $Q_d$ qui calcule $diag'$.
Mais quelle est la valeur de $diag'(d)$ ?
Par définition de $diag'$, on a $diag'(d) = interpret(d,d)+1$. \\
Mais, comme $Q_d$ calcule $diag'$, par définition $diag'(d) = Q_d(d) = \phi_d(d) = interpret(d,d)$.
En effet, calculer $\phi_d(d)$ revient à interpréter le programme
d avec la donnée d. \\
On obtient donc $interpret(d,d)+1 = interpret(d,d)$, ce qui est impossible car $interpret(d,d)$ est un entier.
On obtient donc $interpret(d,d)+1 = interpret(d,d)$, ce qui est impossible car $interpret(d,d)$ est un entier.
\item Conclusion : $diag'$ n'est pas calculable dans $Q$, donc $diag$
n'est pas calculable dans Q, et donc interpret n'est pas calculable dans $Q$.
dans Q.
Expand Down Expand Up @@ -587,8 +587,8 @@ \subsection{Énoncé et démonstration}
\begin{mytheo}[Rice]
Si $A$ est récursif et $A\neq \emptyset, A \neq \N$. \\
Alors $\exists i \in A$ et $\exists j \in \N \setminus A$ tel que $\phi _i = \phi _j$
Si A est récursif et qu'il n'est ni nul, ni ne contient l'ensemble des programmes existant, alors il existe deux programmes dans A et $\stcomp{A}$ tel qu'ils calculent la même fonction.

Si A est récursif et qu'il n'est ni nul, ni ne contient l'ensemble des programmes existant, alors il existe deux programmes dans A et $\stcomp{A}$ tel qu'ils calculent la même fonction.
\end{mytheo}

On utilise le plus souvent le théorème de Rice en ayant recourt à sa contraposée:
Expand Down Expand Up @@ -616,15 +616,15 @@ \subsection{Énoncé et démonstration}
while true do;
\end{lstlisting}
$P_k$ ne s'arrête jamais, il vaut donc en permanence \textit{bottom} : $\forall x \ \phi_k(x) = \perp$

\item $\stcomp{A}\neq \emptyset$ car $A \neq \N$,
supposons $k\in \stcomp{A}$ (hypothèse sans importance, car montrer que
$A$ ou $\stcomp{A}$ est non récursif revient au même, car $A$ non
récursif $ \Leftrightarrow $ $\stcomp{A}$ non récursif)
\item $A\neq \emptyset$ par hypothèse. Prenons un élément quelconque $m$ de cet ensemble ($m\in A$)
\item Par hypothèse $\forall i \in A, \forall j \in \stcomp{A}$ $\phi_i \neq \phi_j$. Donc
\item Par hypothèse $\forall i \in A, \forall j \in \stcomp{A}$ $\phi_i \neq \phi_j$. Donc
$\phi_m \neq \phi_k$
\item Pour $n$ et $x$ fixé, analysons le programme $P(z)$ suivant.
\item Pour $n$ et $x$ fixé, analysons le programme $P(z)$ suivant.
$P(z) \equiv $
\begin{lstlisting}
P_n(x);
Expand All @@ -633,8 +633,8 @@ \subsection{Énoncé et démonstration}

Ce programme a un numéro $d$. Quelle est la fonction $\phi_d(z)$ calculée par $P(z)$ ? Il n'y a que deux possibilités.
\begin{itemize}
\item Si $P_n(x)$ ne se termine pas, alors le programme $P(z)$ ne se termine pour aucune valeur de $z$. On a donc $\phi_d =\phi_k$.
\item Si $P_n(x)$ se termine, alors le programme $P(z)$ calcule la même fonction que $P_m(z)$. On a donc $\phi_d =\phi_m$.
\item Si $P_n(x)$ ne se termine pas, alors le programme $P(z)$ ne se termine pour aucune valeur de $z$. On a donc $\phi_d =\phi_k$.
\item Si $P_n(x)$ se termine, alors le programme $P(z)$ calcule la même fonction que $P_m(z)$. On a donc $\phi_d =\phi_m$.
\end{itemize}

Pour déterminer si $\phi_d =\phi_k$ ou $\phi_d =\phi_m$, il suffit de tester si $d \in A$. Par hypothèse $\forall i \in A, \forall j \in \stcomp{A}$ $\phi_i \neq \phi_j$. Nous avons aussi $k\in \stcomp{A}$ et $m\in A$.
Expand All @@ -643,17 +643,17 @@ \subsection{Énoncé et démonstration}
\item Si $d \in \stcomp{A}$, alors $\phi_d \neq \phi_m$, donc $\phi_d =\phi_k$.
\end{itemize}
En résumé : si $d \in A$ alors l'exécution de $P_n(x)$ se termine, sinon l'exécution de $P_n(x)$ ne se termine pas.
On peut alors écrire le programme suivant qui décide \textbf{HALT}.

On peut alors écrire le programme suivant qui décide \textbf{HALT}.
$halt(n,x) \equiv $
\begin{lstlisting}
construire un programme P(z)= P_n(x); P_m(z) ;
d <- numero de P(z);
if d in A then print(1);
else print(0);
\end{lstlisting}


\item Contradiction, car \textbf{HALT} n'est pas récursif.
\item Conclusion: $A$ n'est pas récursif.
\end{enumerate}
Expand Down Expand Up @@ -682,7 +682,7 @@ \subsection{Analyse}

\item Les propriétés intéressantes d'un programme concernant la
fonction qu'il calcule, non pas sa forme (syntaxe), sont non calculables.

\item La plupart des problèmes intéressants au sujet des programmes sont non calculables
\end{itemize}

Expand Down Expand Up @@ -840,7 +840,7 @@ \section{Théorème du point fixe}
\end{myrem}

\item $h(u,v)=\phi_{S(u)}(v)$\\
Ceci est une application de la propriété S (propriété S-m-n affaiblie), avec $S$ totale calculable,
Ceci est une application de la propriété S (propriété S-m-n affaiblie), avec $S$ totale calculable,

\item $g(u)=f(S(u))$\\
$g$ est totale calculable car $S$ et $f$ le sont ($f$
Expand Down Expand Up @@ -897,7 +897,7 @@ \section{Théorème du point fixe}
f(x) =
\begin{cases}
m & \text{si }x \in A,\\
n & \text{si }x \in \bar{A}.
n & \text{si }x \in $\bar{A}$.
\end{cases}
\]
On remarque que comme $A$ est récursif,
Expand Down Expand Up @@ -1025,4 +1025,3 @@ \section{Conclusion}

% subsection conclusion (end)
% section r_sultats_fondamentaux (end)

0 comments on commit 9fdfce6

Please sign in to comment.