OCaml (option informatique) · Chapitre 20 · Exercice de TD
Semi-décider l'arrêt
Calculabilité et décidabilité · niveau 2
Énoncé
Écrire (en idéalisant l'exécution d'un programme) un semi-décideur de l'arrêt, et expliquer sa limite.
Corrigé
(* execute_n_etapes p x k : exécute p sur x pendant au plus k étapes,
renvoie true si p s'est arrêté dans ce délai (fonction idéalisée). *)
let semi_arrete p x =
let k = ref 0 in
while not (execute_n_etapes p x !k) do k := !k + 1 done;
true
On simule p de plus en plus longtemps. Si p s'arrête (en k0 étapes), on le détecte dès k = k0 et l'on renvoie true. Mais si p boucle, la recherche sur k ne s'arrête jamais : aucune réponse non. Semi-décideur, pas décideur.
Exercices semblables
- Syracuse, problème ouvert mais pas indécidable corrigé
- Comprendre une réduction corrigé
- La diagonale corrigé
- Une propriété sémantique indécidable corrigé
- Le castor affairé (busy beaver) corrigé