CALC-AGREG

ENS Rennes - Année 2015/2016



1er décembre 2015

Machines de Turing

Notes de cours : le chapitre correspondant du livre de Sipser

Définition
Variantes : plusieurs rubans, non-déterminisme
Langage accepté/décidé
Classes R et RE
Lemme de König pour montrer que la notion de langage décidé est la même sur les machines déterministes et non-déterministes
Activité : quelques exercices du chapitre du livre de Sipser
11 décembre 2015

Fonctions récursives

notes de cours
De quoi s'amuser avec les fonctions récursives

Notre but est de construire une classe de fonctions qui correspond à ce que l'on définirait comme calculable avec une machine (cerveau, ordinateur etc.).
I) Fonctions récursives primitives
Au début, nous avons construit l'ensemble des fonctions primitives récursives. On a introduit les schémas primitifs. Avec tout cela, on peut exprimer plein de choses : sommes, produits, minimisation bornée. Cette classe de fonctions correspond à tout ce qu'on peut exprimer en Bucle (un langage avec des boucles "répéter f(n) fois" et des définitions de fonctions, mais on n'a pas le droit à la récursivité). Les algorithmes écrits terminent tous.
On a vu que l'on peut simuler de la récursivité multiple (Fibonacci). On peut aussi simuler des structures de données pour des listes. Les opérations de base (extraire la tête, la queue etc. sont récursives primitives).
II) Limites
Avec le procédé de diagonalisation de Cantor, et en utilisant une énumération que l'on peut effectivement mécaniser, on construit une fonction qui a l'air calculable, mais qui n'est pas primitive.
III) Fonctions récursives partielles (et totales)
On introduit alors les fonctions récursives partielles via la minimisation non bornée. Le seule moyen de les rendre totales est d'utiliser des prédicats sûrs. Au niveau langage de programmation, on peut introduire le Mucle (en rajoutant des boucles mu). Les fonctions récursives totales sont les fonctions Mucle dont on a une garantie qu'elle termine et les fonctions récursives partielles correspondent à toutes les fonctions que l'on peut écrire en Mucle.
Si on réapplique le diagonalisation de Cantor aux fonctions récursives totales, on obtient une fonction... mais qui n'a pas l'air calculable. Peut-on décider si un prédicat est sûr ? Avec quel formalisme le prouver ? On a l'impression que l'on a atteint les limites.
C'est la thèse de Church-Turing : c'est l'hypothèse qu'il y ait une correspondance entre les fonctions récursives totales et ce que l'on peut calculer avec une machine réelle (ordinateur, cerveau etc.).

15 décembre 2015 IV) Equivalence entre fonctions récursives et machine de Turing
Compilateur fonctions récursives vers machines de Turing

Indécidabilité

notes de cours

Rappel sur les problèmes de décision : tryptique : présentation entrée/sortie, langage, prédicat
Liens entre R et RE
Théorème de l'arrêt
Réductions
Théorème de Rice
Problème de correspondance de Post

Vacances
mardi 5 janvier 2016, 13h30-15h30

NP-complétude

Poly sur la NP-complétude
Introduction informelle à la notion de non-déterminisme pour les problèmes de recherche : jeu à un joueur
Définitions des classes de complexité : P, EXPTIME, NP
Réduction polynomiale et NP-dureté.
SAT. Théorème de Cook.
3SAT, 3-COLORING
Discussions
Exemple de réductions
vendredi 8 janvier 2016, 13h30-15h30 ENSEMBLE INDEPENDANT est NP-complet (démonstration complète : dans NP, NP-dur)

Classes de complexité

Poly sur les classes de complexité
TIME(f), SPACE(f), NTIME(f), NSPACE(f). PSPACE, NSPACE
Théorème de Savitch.
Formules booléenne quantifiée.
TQBF est PSPACE-complet
vendredi 22 janvier 2016, 13h30-15h30

Panorama sur le programme de l'agrégation

Model checking logique du premier ordre
Universalité d'une expression rationnelle
P != EXPTIME
LOGSPACE et NLOGSPACE
Discussion autour des problèmes de décision en logique, en langages formels, en programmation linéaire, etc.


Références