Cours d`informatique théorique

publicité
Cours d’informatique théorique
INF f5
Alain Lecomte
novembre 2005
who is this man?
QuickTime™ and a
TIFF (Uncompress ed) dec ompres sor
are needed to s ee this pic ture.
Alan TURING
(1912-1954)
d’après son biographe:
founder of computer
science,
mathematician,
philosopher,
codebreaker, strange
visionary and a gay
man before his time
et lui?
Quic k Ti me™ and a
T IFF (Unc om pres s ed) dec om pres s or
are needed to s ee t his pic t ure.
David HILBERT
(1862-1943)
le plus grand
mathématicien de
son siècle?
le
ème
10
problème de Hilbert
• Does there exist a universal
algorithm for solving Diophantine
equations?
(A Diophantine equation is an
equation in which only integer
solutions are allowed).
Équations diophantiennes
• Déterminer si une équation de la forme P=0, où P
est un polynôme à coefficients entiers, possède des
solutions entières
– Exemples :
x2 + y2 – 1 = 0,
x2 – 991y2 – 1 = 0
etc…
Ce problème n’est pas
« décidable »
Démontré en 1970 par Yuri
Matijasevic
Qu’est-ce que cela signifie?
• Il n’existe aucun algorithme qui indique,
pour chaque équation diophantienne, si elle
a ou non des solutions
Cas de l’informatique
• Déterminer si un programme P, pris au
hasard, calcule une fonction donnée non
nulle f(n) (n entier)
• Déterminer si deux programmes calculent la
même chose (sont équivalents)
• Déterminer si un programme quelconque,
sur une donnée représentée par un entier n,
ne va pas boucler indéfiniment
Ce sont des problèmes
« indécidables »
• Il n’existe pas d’algorithme général tel qu’étant donné un
programme P et une fonction f de N dans N, il soit capable
de dire si P calcule effectivement f
• Il n’existe pas d’algorithme général permettant de dire,
étant donnés deux programmes P et P’ qu’ils font la même
chose,
• Il n’existe pas d’algorithme général qui, étant donné un
programme P et un entier n, permette de dire que P ne va
pas boucler indéfiniment sur l’entrée n
• Soit un prédicat P (une propriété),
applicable à un entier n, P est décidable si
et seulement si il existe une méthode (un
algorithme) permettant de dire au bout d’un
temps fini (ie: un nombre fini de pas de
calcul) si P(n) est vrai ou si P(n) est faux
• Soit f une fonction de N dans N, f est
calculable si et seulement si il existe une
méthode de calcul (un algorithme)
permettant pour tout entier n d’obtenir f(n)
si nDom(f) et  si nDom(f)
Remarque 1
• Est-on limité aux prédicats sur N et aux
fonctions de N dans N?
– Ne peut-on pas aussi se poser des questions ou
faire des calculs sur des couples d’entiers? Des
suites d’entiers? Des entiers relatifs? Des
fractions? Des nombres réels?
– Ne peut-on pas aussi se poser des questions ou
faire des calculs sur des chaînes de caractères?
Des arbres? Des graphes?
Réponse
• Oui, bien sûr… tant qu’on se pose des
questions ou qu’on calcule sur des objets
énumérables (ou numérotables) c’est-à-dire:
qui sont éléments d’ensembles
dénombrables
Dénombrabilité
• Un ensemble dénombrable est un ensemble
dont les éléments peuvent être énumérés, ou
numérotés : on peut les arranger de telle
sorte qu’il y ait un premier, un deuxième, un
troisième, etc.
• On rajoute aussi  aux ensembles
dénombrables… (par sympathie pour lui)
Tout ensemble fini est dénombrable
• {0, 1, 2, 3, 4} est évidemment dénombrable
• {paul, marie, lucien, jean} est dénombrable
(il suffit de choisir un classement arbitraire,
par exemple par ordre d’âge)
• {« paul », « marie », « lucien », « jean »}
est dénombrable (choisir par exemple
l’ordre alphabétique)
• {xN; x<100} est dénombrable
• {0,1, 2, 3}{0, 1, 2, 3} est dénombrable (classer
les couples dans l’ordre lexicographique, avec
0<1<2<3)
• {0, 1, 2, 3}n est dénombrable pour tout n
(même raison)
• L’ensemble des mots utilisant les lettres de
l’alphabet latin et de longueur inférieure ou égale
à 26 est dénombrable
• Un ensemble fini est dénombrable parce
qu’il est toujours possible de définir une
bijection de cet ensemble vers une partie
finie de N (c’est-à-dire un ensemble de la
forme [0..n])
Infini dénombrable
• N est infini dénombrable,
• P = {xN, x est pair} est infini dénombrable:
– Il existe une bijection de P vers N (donc une
numérotation possible des entiers pairs)
• I = {xN, x est impair} est infini dénombrable
Remarque 2
• Un ensemble infini dénombrable peut très bien être une
partie stricte d’un autre ensemble infini dénombrable,
– Ex: P  N, I  N
• C’est une caractérisation de l’infini : un ensemble infini,
c’est un ensemble qui peut être mis en bijection avec
une partie stricte de lui-même (c’est le cas de N, mais
aussi de P, penser aux multiples de 4 etc.)
• Z (l’ensemble des entiers relatifs) est infini
dénombrable… on peut classer les relatifs comme
suit:
0; -1; +1; -2; +2; -3; +3; -4; +4; -5 etc.
La fonction qui donne la numérotation est:
f(0) = 1
f(-n) = 2n
(n0)
f(+n) = 2n+1
• NN est infini dénombrable
voir en exercices
• Et aussi:
– L’union d’une famille dénombrable
d’ensembles dénombrables est dénombrable,
– Le produit d’un nombre fini d’ensembles
dénombrables est dénombrable
– (exercices)
• Donc sont aussi infinis dénombrables;
– Nk pour tout entier k
k
N
– 
(l’ensemble de toutes les suites finies
kN
d’entiers)
Mais R n’est pas dénombrable!
• Raisonnons seulement sur une partie stricte de R :
l’intervalle [0, 1[
• Les éléments de cet intervalle sont représentés par des
suites infinies d’entiers entre 0 et 9 (dans le système
décimal)
– Certaines de ces suites sont nulles à partir d’un certain rang,
d’autres non
– On peut donc identifier [0, 1[ à l’ensemble de toutes les suites
(finies ou infinies) d’entiers compris entre 0 et 9
• Si cet ensemble était
dénombrable, on pourrait
les classer (avec une
première, une deuxième
etc.)
• Ainsi la suite
x11x12x13x14…x1p…serait
classée première et ainsi
de suite….
n°1
x11
x12
x13
x14
x1p
x64
…
…
…
…
…
…
x6p
…
…
…
…
…
…
n°2
x21
x22
x23
x24
n°3
x31
x32
x33
x34
n°4
x41
x42
x43
x44
n°5
x51
x52
x53
x54
n°6
x61
x62
x63
n°k
xk1
xk2
xk3
xk4
…
xkp
…
x2p
x3p
x4p
x5p
x11
+1
x12
x13
x14
…
x1p
…
x21
x22
+1
x23
x24
…
x2p
…
n°3
x31
x32
x33
+1
x34
…
x3p
…
n°4
x41
x42
x43
x44
+1
…
x4p
…
n°5
x51
x52
x53
x54
x5p
n°6
x61
x62
x63
x64
…
…
x6p
…
…
n°k
xk1
xk2
xk3
xk4
…
xkp
…
n°1
n°2
• On pourrait alors
modifier cette matrice
infinie de la manière
suivante:
• A chaque élément de
la diagonale, rajouter
1, selon la règle:
0+1=1, 1+1=2, …
8+1=9 et 9+1=0
• Alors considérons la suite infinie qui se trouve sur la
diagonale:
– Elle ne peut être égale à la première car elle s’en distingue au
moins par le premier élément
– Elle ne peut être égale à la deuxième car elle s’en distingue au
moins par le deuxième élément
– Elle ne peut être égale à la troisième car elle s’en distingue au
moins par le troisième élément
– Et ainsi de suite…
– Elle ne peut donc être égale à aucune des suites contenues dans ce
tableau
• Donc, quel que soit le classement choisi des
suites infinies de 0 … 9, il y en a toujours
une qui échappe à ce classement!
• C’est donc qu’il est impossible de les
numéroter…
• Tout simplement parce qu’elles ne forment
pas un ensemble dénombrable
Ceci est connu comme l’argument
diagonal de Cantor
Puissance du continu
• L’infini de R est strictement plus grand que
celui de N, on l’appelle « la puissance du
continu »
• On démontrera de même que (N) n’est
pas dénombrable, autrement dit, là encore,
l’infini de N est strictement inférieur à celui
de l’ensemble de ses parties
• Card(N) < Card((N))
• (Théorème de Cantor)
Des chaînes aux nombres entiers
• Les chaînes de caractères (qu’on appellera simplement
les mots sur un alphabet donné A) constituent un ensemble
infini dénombrable, on peut donc leur associer à chacune
un entier: soit leur numéro d’ordre dans un classement
quelconque, soit un numéro calculé selon un code
attribuant un chiffre à chaque caractère (cf. code ASCII),
• Tout calcul sur les chaînes peut donc se ramener à un
calcul sur des entiers
Des nombres entiers aux chaînes
• Mais pour calculer sur des nombres entiers,
il faut leur donner une représentation…
sous forme de chaîne (ou de mot)! Par
exemple, dans le système binaire, sous
forme de suites de 0 et de 1
• Donc les calculs sur des entiers se ramènent
à des calculs sur des chaînes!
Problèmes de reconnaissance
• Finalement, toute approche algorithmique de problèmes ou
de calculs se ramène à manipuler des suites de symboles,
donc des chaînes,
• Si par exemple on a représenté les nombres entiers en
binaire, le problème « est-ce que n est pair? » se ramène
au problème « est-ce que la représentation de n appartient à
l’ensemble des représentations d’entiers pairs? »
• Le problème « est-ce qu’il existe des solutions entières de
l’équation xn+yn=zn? » se ramène au problème de savoir si
un certain ensemble de chaînes est non vide.
• Tout ensemble de chaînes étant défini comme un langage,
ces problèmes se ramènent à des problèmes de
reconnaissance de l’appartenance à un certain langage
• Ceci explique que la notion de langage va être centrale
dans ce cours, et que le problème fondamental traité est
finalement:
– Étant donné un langage L et un mot w,
• Est-ce que wL ?
Ensembles récursifs
• Un ensemble E est dit récursif si et seulement si le
problème « est-ce que xE ?» est décidable,
• Noter que même si pour E donné, le problème «xE ?» est
décidable, selon le choix de E, il pourra être plus ou moins
facile à résoudre,
– Problèmes de complexité algorithmique
Définir une « méthode de calcul »
• Venons-en au deuxième objectif : définir
précisément ce qu’on entend par méthode
de calcul ou algorithme
Décomposition en opérations
élémentaires
• Intuitivement, lorsque nous qualifions des
opérations simples (addition, produit…) de
« calculables », c’est parce que nous
connaissons des algorithmes pour les
effectuer, cela signifie que nous sommes
capables de réduire ces tâches à des
opérations encore plus simples, que nous
combinons entre elles.
• Le problème de la définition de ce que l’on
entend par « méthode de calcul » est donc
celui de la détermination du plus petit
ensemble possible d’opérations
élémentaires, suffisamment générales pour
que le maximum de calculs (sur des entiers,
des chaînes quelconques etc.) puissent se
ramener à des combinaisons de ces
opérations.
Plusieurs solutions
•
•
•
•
•
Machines de Turing (cours suivant)
Théorie des fonctions récursives (Church)
Lambda – calcul
Machines RAM
…
Thèse de Church-Turing
• De façon étonnante, toutes les solutions proposées à ce problème se
sont avérées équivalentes
• Autrement dit: une fonction calculable au sens des machines de Turing
est récursive et réciproquement, ou bien peut se ramener à un calcul au
sein du -calcul, ou bien peut être réalisée sur une machine RAM etc.
et réciproquement une fonction implémentable sur une machine RAM
peut être réalisée par une machine deTuring etc.
• Autrement dit, on formule la thèse selon laquelle ces définitions
permettent de cerner la notion de fonction calculable
Téléchargement