E. Formenti

Introduction à la calculabilité

Le cours adopte tout d’abord une vision abstraite (les fonctions partielles partiellement récursives – PPR en abrégé) pour aller définir une classe de fonctions “candidate” à caractériser les capacités calculatoires des ordinateurs d’aujourd’hui (et de tous ceux qui sont basées sur le modèle de Von Neumann). Ensuite nous allons introduire les machines RAM en tant que version simplifiée d’un ordinateur moderne et nous montrerons que les fonctions calculées par ces machines coïncident avec les fonctions PPR. Par un argument diagonal nous montrerons qu’il existe des fonctions non-calculables.

Le cours est structuré sur 8 séances de 3 heures chacune (2h de cours magistral, 1h de TD).

Contenu

La notion de calcul est très ancienne. En effet, on trouve de traces des premiers calculs déjà auprès des Sumériens mais il est probable que l’idée de calcul soit beaucoup plus ancienne. Par contre, la théorie autour du calcul, qu’on appelle calculabilité, est beaucoup plus récente et peut être faite remonter au début des années trente du XX siècle. Si dans les temps anciens on s’intéressait plutôt à comment automatiser un calcul et donc plus au procédé (l’algorithme), au jour d’aujourd’hui on est plus concentré à comprendre le calcul en soit et ce qui est calculable par un procédé plus au moins automatisé.

Le cours adopte tout d’abord une vision abstraite (les fonctions partielles partiellement récursives – PPR en abrégé) pour aller définir une classe de fonctions “candidate” à caractériser les capacités calculatoires des ordinateurs d’aujourd’hui (et de tous ceux qui sont basées sur le modèle de Von Neumann). Ensuite nous allons introduire les machines RAM en tant que version simplifiée d’un ordinateur moderne et nous montrerons que les fonctions calculées par ces machines coïncident avec les fonctions PPR. Par un argument diagonal nous montrerons qu’il existe des fonctions non-calculables. A ce point, comme nous allons sans doute être pris par le temps, il sera fait un sondage pour choisir l’un parmi trois sujets qui vont compléter le cours: les systèmes de programmation acceptables et le théorème d’isomorphisme de Rogers; les langages de programmation de haut-niveau; la théorie de l’indécidabilité. Le contenu précis de ces trois derniers chapitres sera mieux illustré en cours.

Prérequis

Pas de prérequis particuliers sinon une habitude à des preuves par induction et par l’absurde. Une bonne connaissance des cours d’outils formels pour l’informatique (SLZIP14) et de celui de langages formels (SL3MI52) seront sans doute un plus qui pourra aider à mieux comprendre le cours en profondeur.

Livres suggérés et site web du cours

Pas de textes nécessaires pour suivre le cours. Tout le cours sera écrit intégralement au tableau. Les annonces, les feuilles de TD, les annales, etc seront fournies via le site web suivant (mis à jours 2018 en cours) :

cliquez ici pour accéder au site du cours de l’an passé

Devoirs

Tout le long du cours vous seront donné des devoirs (lire exercices) à faire à la maison. Ces devoirs seront parfois corrigés, parfois pas. La politique est que les devoirs sont donnés pour aider les étudiants à prendre confiance avec la matière, à mieux comprendre, se mettre à l’épreuve, etc, il ne seront donc pas contrôlés. On fait confiance totale à l’étudiant et à son sens de responsabilité.

Notation

La note finale du cours est composé d’une note de contrôle continu (CC) et d’une note de contrôle final (EX). La note finale (N) est donc N=(12EX+8CC)/20.

Chaque contrôle consistera en un épreuve écrite d’une heure sur des exercices semblables à ceux vus en TD. Ceux qui ont eu une mauvaise note ou ceux qui voudraient gagner quelques points en plus ont la possibilité de développer un petit projet informatique en lien avec la matière.

Au secours!

Quelques points du cours et surtout quelques exercices demandent de se torturer pas mal les méninges. Il est donc normal que vous rencontriez des difficultés de temps en temps. Voici, par ordre de priorité, les actions à entreprendre en cas de difficulté que ce soit un point précis du cours ou un exercice:

  • échanger, discuter avec vos copains de cours pour voir s’ils ont une solution ou pour chercher à en trouver une ensemble;
  • si à plusieurs vous n’y arrivez toujours pas, voir si parmi les anciens étudiants, si vous en connaissez, il y en a qui vous pourraient aider;
  • en dernier recours, écrire un mail groupé au professeur en exposant clairement votre solution partielle, les démarches que vous avez entreprises, les textes que vous avez consulté et les points qui coincent. Vous pouvez aussi poser vos questions ou exprimer vos doutes à la fin d’un cours.

En cas d’urgence (absolue!) vous pouvez aussi écrire sur le forum de discussion qui est sur le site web du cours. Bien sûr, le forum, tout comme l’email, est à utiliser avec parcimonie!

Merci

Merci pour avoir choisi ce cours. J’espère que vous y trouverez des idées intéressantes et du bonheur intellectuel !

Enrico Formenti Nice, le 10 septembre 2018.