NSI (terminale) · Chapitre 16 · Exercice d'entraînement
L'argument diagonal
Calculabilité, décidabilité et paradigmes de programmation · Programmes, données et calculabilité · niveau 3 (difficile)
Énoncé
L'argument diagonal. On considère des fonctions qui, à tout entier , associent ou . En voici cinq, rangées dans une liste :
fonctions = [lambda n: 0,
lambda n: n % 2,
lambda n: 1 if n < 3 else 0,
lambda n: 1,
lambda n: n // 2 % 2]
def diagonale(n):
return 1 - fonctions[n](n)
- Calculer
fonctions[i](i)pour de à , puisdiagonale(i). Montrer quediagonaleest différente de chacune des cinq fonctions de la liste. - Justifier que, pour toute liste (finie ou infinie) de fonctions à valeurs dans , la fonction n'est égale à aucune des .
- Un programme Python est un texte fini. Expliquer comment on pourrait ranger tous les programmes Python dans une liste dans laquelle chacun a un rang.
- On note la fonction calculée par (en convenant que si ne s'arrête pas sur ou ne renvoie ni ni ). En déduire qu'il existe des fonctions, des entiers naturels dans , qu'aucun programme ne calcule.
Un exercice à chercher : son corrigé n'est pas publié. Sur Adloun, le tuteur guide par questions, sans donner la réponse.