Cours 1 : Qu'est-ce que l'informatique ?
Calculabilité
Il existe des choses que l'on sait spécifier sans savoir les calculer.
- Racine d'un polynome de degré 5 (Théorème d'Abel, 1826)
- Construction à la règle et au compas (Théorème de Wantzel, 1837)
Turing
Machine de Turing
La machine de Turing (1936) définit une calculabilité. Il s'agit d'un ensemble de 5-uplets (E1,S1,E2,S2,M) signifiant : "Si la machine est dans l'état E1, que le symbole sur la bande, sous la tête de lecture, est S1, alors la machine passe en état E2, écrit S2 sur la bande, et bouge la tête de lecture dans le sens M". Exemple :
Bande : ....10110M0100101M1101011.... tête de lecture : * ( Start, M, Delete, M, -> ) ( Start, 0, Start, 0, -> ) ( Start, 1, Start, 1, -> ) ( Delete, M, Rewind, M, <- ) ( Delete, 0, Delete, 0, -> ) ( Delete, 1, Delete, 0, -> ) ( Rewind, M, Stop, M, <- ) ( Rewind, 0, Rewind, 0, -> ) ( Rewind, 1, Rewind, 1, -> ) ( Stop )Exemple de la multiplication 3x5 en codage unaire
Bande : 111x11111qui se transforme par une machine qui va bien en
Bande : 111111111111111On sent que la machine est plus simple que si le codage avait été décimal...
Machine de Turing Universelle
On peut coder la desciption d'une machine M1 sur une bande... et consrtuire une machine M2 qui travaille là-dessus. M1 est une donnée... alors que c'est aussi la description d'une machine.
Si la bande contient un codage de M1, puis
Si la bande contient un codage de M1, suivi du codage D d'une donnée sur laquelle M1 sait travailler :
- On peut construire M2 qui lit M1, et écrit sur la bande le résultat de l'exécution de la machine M1 sur D. M2 est une machine de Turing universelle (i.e. un ordinateur !). M1 est un programme, et D une donnée.
- On ne peut pas construire de machine M2 qui detrmine si M1 termine.
Church
Church (le directeur de thèse de Turing) a défini en 1930 une calculabilité via le λ-calcul. Ils 'agit de réécriture, et non de modifier une bande par une suite d'instructions.
Exemple:
- (λx.xx) y donne yy
- (λx.(λy.yx)) A B donne (λy.yA) B donne BA
Thèse de Church-Turing
La λ-calculabilité et la Turing-calculabilité sont les mêmes.
L'ordinateur
Calcule ce qui est Turing-calculable. Attention aux limitation de taille de bande (mémoire) et au nombre d'opération requis (temps de calcul). Ils définissent la complexité d'un algorithme.
La bande contient la descriptions de machines (i.e. programmes, i.e. logiciels), mais aussi les données sur lesquelles ces machines vont travailler. L'un de ces programmes à le statut particulier de système d'exploitation, il gère les ressources de l'ordinateur.
Les langages de programmation
L'idée est que la description de la machine de turing que comprend le processeur est illisible... On utilise un compilateur (un programme aussi) qui transforme du texte lisible par un humain en code binaire pour le processeur. Le texte lisible est assez formatté, c'est ce qui définit un langage de programmation.
Syntaxe et sémantique
La première ligne est du langage C, l'autre non.
i=3*i++; i=3*+i+;... pourquoi ? C'est ce que définit la syntaxe. Qu'est-ce que fait le texte bien formé ? C'est ce que définit la sémantique.
Les langages impératifs
C'est le langage des recettes de cuisine. Une séquence d'ordres qui modifient l'état de quelque chose.
Les langages fonctionnels
Ils se basent sur la réécriture de formules, comme la calcul mathématique.
Les langages logiques
C'est bien plus utilisé qu'on ne le croit... C'est fait pour les systèmes experts de diagnostique, les systèmes de résolution de contrainte (faire un emploi du temps par exemple), mais surtout les makefile.
Exemple classique :
Homme(Socrate) Mortel(X) <= Homme(X)On demande alors
Mortel(Socrates) ? true Mortel(x) ? x=Socrates
Exemple contemporain : Vous recevez des amis. Vous savez ce qu'ils aiment, et vous voulez préparer un plat qui contente tout le monde.
Aime(Paul, Puree) Aime(Paul, Crepes) Aime(Pierre,Pizza) Aime(Pierre,Rognons) Aime(Pierre,Crepes) Aime(Jean, Pizza) Aime(Jean, Rognons) Aime(Jean, Crepes) Repas(X) <= Aime(Jean,X) et Aime(Pierre,X) et Aime(Paul,x) Repas(plat) ? plat = Crepes
Programmation Objet
Notion transversale aux types de langage, introduite pour ce cours dans le cadre de la programmation impérative.