« MATH0980 : contenu algorithmique des démonstrations mathématiques » : différence entre les versions
(première version du wiki) |
|||
(13 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 21 : | Ligne 21 : | ||
Les nouvelles importantes pour le cours (les plus récentes en haut). |
Les nouvelles importantes pour le cours (les plus récentes en haut). |
||
'''Rq''' : pour mettre la date dans le wiki, il suffit de mettre "<tt><nowiki>~~~~</nowiki></tt>". |
'''Rq''' : pour mettre la date dans le wiki, il suffit de mettre "<tt><nowiki>~~~~~</nowiki></tt>". |
||
* [[Utilisateur:Hyvernat|Hyvernat]] 4 janvier 2008 à 14:16 (CET) : création du wiki. |
|||
* 20 février 2008 à 18:38 (CET) : je viens de voir que la seance de demain n'est pas dans le planning provisoire... J'espère qu'il y aura des gens. (Normalement oui, vu que je l'ai bien précisé la semaine dernière... |
|||
* 15 février 2008 à 10:15 (CET) : '''4ème séance''' ([[Utilisateur:Hyvernat|Hyvernat]]) : ''théorème de Church-Rosser, applications, premiere definition du typage simple'' |
|||
* 8 février 2008 : '''3ème seance''' ([[Utilisateur:Hyvernat|Hyvernat]]) : ''le lambda-calcul pur, definitions de base'' |
|||
* 23 janvier 2008 à 09:23 (CET) : le cours a disparu, mais il revient ! Nous commencerons donc avec une semaine de retard... |
|||
* 4 janvier 2008 à 14:16 (CET) : création du wiki. |
|||
==Plan (provisoire) du cours== |
==Plan (provisoire) du cours== |
||
Comme nous commençons avec une semaine de retard, il faudra ajuster ce plan : soit en décalant les seances, soit en rattrapant les deux heures du 17 janvier en rallongeant d'autres séances... |
|||
Ligne 58 : | Ligne 63 : | ||
== |
==Support de TD== |
||
===Séance 1=== |
|||
-- à compléter au fur et à mesure -- |
|||
* [http://www.lama.univ-savoie.fr/~hyvernat/Enseignement/0708/math980/td1.pdf TD 1] |
|||
* [http://www.lama.univ-savoie.fr/~hyvernat/Enseignement/0708/math980/td2.pdf TD 2] |
|||
==Quelques références== |
==Quelques références== |
||
Ligne 71 : | Ligne 74 : | ||
* lambda-calcul : "Lambda-calcul, types et modèles" de Jean-Louis Krivine ; édité par Masson (1990). Cet ouvrage est epuisé, mais il y en a deux exemplaires à la bibliothèque de mathématiques. JL Krivine a également mis la version anglaise de son livre sur sa [http://www.pps.jussieu.fr/~krivine page web] |
* lambda-calcul : "Lambda-calcul, types et modèles" de Jean-Louis Krivine ; édité par Masson (1990). Cet ouvrage est epuisé, mais il y en a deux exemplaires à la bibliothèque de mathématiques. JL Krivine a également mis la version anglaise de son livre sur sa [http://www.pps.jussieu.fr/~krivine page web] |
||
* le livre "Proofs and Types" de Jean-Yves Girard, Yves Lafont et Paul Taylor. Ce livre est épuisé mais est disponible sur [http://iml.univ-mrs.fr/~lafont/publications.html la page d'Yves Lafont] |
|||
* un cours de lambda-calcul donné par C. Berline, avec des notes de cours. [http://www.pps.jussieu.fr/~berline/Cours.html cours de lambda-calcul] |
|||
* pour un éclairage '''très différent''' du même sujet (contenu calculatoire de la logique classique), vous pouvez lire les [http://www.cs.chalmers.se/~coquand/cor3.ps notes] de Thierry Coquand. |
|||
---- |
---- |
||
---- |
---- |
||
=Contenu algorithmique des démonstrations mathématiques= |
=Contenu algorithmique des démonstrations mathématiques= |
||
Ligne 85 : | Ligne 92 : | ||
==Déduction naturelle et traduction de Gödel== |
==Déduction naturelle et traduction de Gödel== |
||
===blabla=== |
|||
==Le <math>\lambda</math>-calcul...== |
|||
===Introduction, historique=== |
|||
Le <math>\lambda</math>-calcul est à l'origine une notation prenant les notions de ''fonctions'' et ''d'application'' comme primitives. Historiquement, on peut le voir comme issu des notations utilisées dans "Principia Mathematica" de Whitehead et Russel (1910-13) où la notation était "<math>\widehat x(\phi x)</math>" ([http://quod.lib.umich.edu/cgi/t/text/pageviewer-idx?c=umhistmath&cc=umhistmath&idno=aat3201.0001.001&frm=frameset&view=image&seq=46 un exemple]). Plus tard, dans les années 30, Church a transformé cette notation en "<math>\widehat{\ }x(\phi x)</math>", puis "<math>\lambda x(\phi x)\!</math>". (À verifier...) |
|||
Cette notation est similaire à (mais beaucoup plus pratique que) la notation mathématique habituelle "<math>x\mapsto\sin(x+\pi/2)</math>" représentant "la fonction qui, à <math>x</math> associe <math>\sin(x+\pi/2)</math>". |
|||
===Définitions=== |
|||
Reportez-vous au livre de Krivine pour une approche entièrement formelle... |
|||
====Termes==== |
|||
On se donne un ensemble infini dénombrable <math>\mathcal{V}</math> de ''variables''. En général, on les notes <math>x</math>, <math>y'</math>, <math>z_{42}</math>, <math>f</math>... |
|||
Les expressions du <math>\lambda</math>-calcul, appelée "<math>\lambda</math>-termes, sont obtenue grace aux rêgles suivantes |
|||
* si <math>x</math> est une variable, alors <math>x</math> est un <math>\lambda</math>-terme (''variable'') |
|||
* si <math>x</math> est une variable et si <math>u</math> est un <math>\lambda</math>-terme, alors <math>\lambda x.u</math> est un <math>\lambda</math>-terme (''abstraction'') |
|||
* si <math>u</math> et <math>v</math> sont des <math>\lambda</math>-termes, alors <math>(u)v</math> est un <math>\lambda</math>-terme (''application'') |
|||
'''Attention :''' en mathématique, l'application d'une fonction est notée <math>f(u)\!</math>, alors qu'elle est notée "<math>(f)u\!</math>" en <math>\lambda</math>-calcul ! |
|||
On note <math>(u)\,v_1\,v_2\,...\,v_n</math> pour <math>(...(((u)\,v_1)\,v_2)\,...)\,v_n</math> et <math>\lambda xyz.t\!</math> pour <math>\lambda x.\lambda y.\lambda z.t\!</math>. |
|||
définition de "sous-terme" |
|||
Les ''variables libres'' d'un terme sont définie par récurrence sur le terme : |
|||
* <math>\mathcal{L}(x) = \{x\}</math> |
|||
* <math>\mathcal{L}(\lambda x.u) = \mathcal{L}(u) \setminus\{x\}</math> |
|||
* <math>\mathcal{L}\big((u)v\big) = \mathcal{L}\big(u\big) \cup \mathcal{L}\big(v\big)</math> |
|||
====<math>\alpha</math>-équivalence==== |
|||
En notant <math>u\langle x:=y\rangle</math> pour le terme dans lequel la variable <math>x</math> est remplacée par la variable <math>y</math>, on définit |
|||
* <math> x\equiv y\!</math> ssi <math>x=y\!</math> |
|||
* <math> (u)v\equiv (u')v'\!</math> ssi <math> u\equiv u'\!</math> et <math> v\equiv v'\!</math> |
|||
* <math>\lambda x.u \equiv \lambda x'.u'\!</math> ssi <math> u\langle x:=y\rangle\equiv u'\langle x':=y\rangle</math> pour toutes les variables <math>y</math> n'apparaissant ni dans <math>u</math> ni dans <math>u'</math>. |
|||
Cette relation est appelée "<math>\alpha</math>-équivalence. |
|||
C'est une relation d'equivalence, et on considerera ''toujours'' les termes à cette équivalence prêt. |
|||
'''rq :''' on peut toujours se ramener à des termes où aucune variable libre n'est liée dans un sous-terme. |
|||
====substitution et <math>\beta</math>-réduction==== |
|||
La substitution est définit comme suit : |
|||
* <math>x[x:=t] = u</math> et <math>y[x:=t] = y</math> si <math>x\neq y</math> |
|||
* <math>(u)v[x:=t] = (u[x:=t])v[x:=t]</math> |
|||
* <math>\lambda y.u[x:=t] = \lambda y.u[x:=t]</math> '''à condition que <math>y</math> ne soit pas libre dans <math>t</math>''' |
|||
Si la condition dans le cas de l'abstraction n'est pas vérifiée, on renome la variable <math>y</math> en une variable qui n'apparait n'est pas libre dans <math>t</math>. |
|||
La <math>\beta</math>-réduction est la relation suivante appliquée pour n'importe quel sous-terme |
|||
<math>(\lambda x.u)\,t\quad\to\quad u[x:=t]</math> |
|||
C'est aussi une rêgle de réecriture... |
|||
On note <math>\to^+\!</math>, <math>\to^*\!</math> et <math>\approx_\beta\!</math> pour les clotures ''transitive'', ''reflexives et transitives'' et ''reflexive, transitive et symmétrique'' de la relation <math>\to\!</math>. |
|||
====exemples==== |
|||
... |
... |
||
===Le théorème de Church-Rosser=== |
|||
;Théorème (Church-Rosser): |
|||
<math>\to_\beta^*</math> est confluente : si<math>u\to_\beta^* v_1</math> et <math>u\to_\beta^* v_2</math> alors <math>v_1\to_\beta^* t</math> et <math>v_1\to_\beta^* t</math> pour un terme <math>t</math> |
|||
On utilise la preuve classique de Tait et Martin-Löf avec la réduction parallèle. |
|||
... |
|||
==Le lambda-calcul simplement typé== |
|||
une premiere definition du typage |
Dernière version du 20 février 2008 à 17:38
Ce wiki est un complément pour le cours du Master deuxième année intitulé "contenu algorithmique des démonstrations mathématiques". Le cours est donné par Karim Nour et Pierre Hyvernat à l'université Claude Bernard, à Lyon...
Nous encourageons tous les étudiants à y participer en l'augmentant au fur et à mesure de l'avancement du cours.
Pour pouvoir modifier les pages, inscrivez-vous pour obtenir un login et mot de passe. (S'il vous plaît, utilisez votre vrai nom...)
Allez regarder ici pour vous familiariser avec les wikis.
Vous pouvez également utiliser la page de discussion pour ... discuter (ou poser des questions).
Exercice :
créez-vous un compte et essayez de modifier cette page (correction de fôtes d'aurtograffe, rajout de détails, mise en page, ...)
Details techniques / administratifs
Nouvelles
Les nouvelles importantes pour le cours (les plus récentes en haut).
Rq : pour mettre la date dans le wiki, il suffit de mettre "~~~~~".
- 20 février 2008 à 18:38 (CET) : je viens de voir que la seance de demain n'est pas dans le planning provisoire... J'espère qu'il y aura des gens. (Normalement oui, vu que je l'ai bien précisé la semaine dernière...
- 15 février 2008 à 10:15 (CET) : 4ème séance (Hyvernat) : théorème de Church-Rosser, applications, premiere definition du typage simple
- 8 février 2008 : 3ème seance (Hyvernat) : le lambda-calcul pur, definitions de base
- 23 janvier 2008 à 09:23 (CET) : le cours a disparu, mais il revient ! Nous commencerons donc avec une semaine de retard...
- 4 janvier 2008 à 14:16 (CET) : création du wiki.
Plan (provisoire) du cours
Comme nous commençons avec une semaine de retard, il faudra ajuster ce plan : soit en décalant les seances, soit en rattrapant les deux heures du 17 janvier en rallongeant d'autres séances...
- Séance 1 : 17 janvier (KN) Présentation du cours ; déduction naturelle et traduction de Gödel.
- Séance 2 : 24 janvier (KN) Sémantiques pour les logiques classiques et intuitionniste.
- Séance 3 : 31 janvier (KN) Calcul des séquents et élimination des coupures.
- Séance 4 : 7 février (PH) Introduction au lambda-calcul : Church-Rosser.
- Séance 5 : 14 février (PH) Représentation des fonctions récursives.
- Séance 6 : 28 février (PH) Lambda-calcul typé : préservation de type et forte normalisation.
- Séance 7 : 6 mars (PH) Fonctions représentables en lambda-calcul typé.
- Séance 8 : 13 mars (KN et/ou PH) Contrôle.
- Séance 9 : 20 mars (KN) Lambda-mu-calcul : Church-Rosser et préservation de type.
- Séance 10 : 27 mars (KN) Plusieurs preuves de forte normalisation du lambda-mu-calcul typé.
- Séance 11 : 3 avril (KN) Entiers classiques et mise en mémoire.
- Séance 12 : 10 avril (PH) Sémantique du lambda-calcul (1).
- Séance 13 : 17 avril (PH) Sémantique du lambda-calcul (2).
- Séance 14 : 24 avril (KN et/ ou PH) Examen final.
Support de TD
Quelques références
- logique générale : "Introduction à la Logique Théorie de la démonstration" de René David, Karim Nour et Christophe Raffalli ; édité par Dunod. (Voir ici pour plus de détails...)
- lambda-calcul : "Lambda-calcul, types et modèles" de Jean-Louis Krivine ; édité par Masson (1990). Cet ouvrage est epuisé, mais il y en a deux exemplaires à la bibliothèque de mathématiques. JL Krivine a également mis la version anglaise de son livre sur sa page web
- le livre "Proofs and Types" de Jean-Yves Girard, Yves Lafont et Paul Taylor. Ce livre est épuisé mais est disponible sur la page d'Yves Lafont
- un cours de lambda-calcul donné par C. Berline, avec des notes de cours. cours de lambda-calcul
- pour un éclairage très différent du même sujet (contenu calculatoire de la logique classique), vous pouvez lire les notes de Thierry Coquand.
Contenu algorithmique des démonstrations mathématiques
Introduction
-- à compléter --
Déduction naturelle et traduction de Gödel
Le -calcul...
Introduction, historique
Le -calcul est à l'origine une notation prenant les notions de fonctions et d'application comme primitives. Historiquement, on peut le voir comme issu des notations utilisées dans "Principia Mathematica" de Whitehead et Russel (1910-13) où la notation était "" (un exemple). Plus tard, dans les années 30, Church a transformé cette notation en "", puis "". (À verifier...)
Cette notation est similaire à (mais beaucoup plus pratique que) la notation mathématique habituelle "" représentant "la fonction qui, à associe ".
Définitions
Reportez-vous au livre de Krivine pour une approche entièrement formelle...
Termes
On se donne un ensemble infini dénombrable de variables. En général, on les notes , , , ...
Les expressions du -calcul, appelée "-termes, sont obtenue grace aux rêgles suivantes
- si est une variable, alors est un -terme (variable)
- si est une variable et si est un -terme, alors est un -terme (abstraction)
- si et sont des -termes, alors est un -terme (application)
Attention : en mathématique, l'application d'une fonction est notée , alors qu'elle est notée "" en -calcul !
On note pour et pour .
définition de "sous-terme"
Les variables libres d'un terme sont définie par récurrence sur le terme :
-équivalence
En notant pour le terme dans lequel la variable est remplacée par la variable , on définit
- ssi
- ssi et
- ssi pour toutes les variables n'apparaissant ni dans ni dans .
Cette relation est appelée "-équivalence.
C'est une relation d'equivalence, et on considerera toujours les termes à cette équivalence prêt.
rq : on peut toujours se ramener à des termes où aucune variable libre n'est liée dans un sous-terme.
substitution et -réduction
La substitution est définit comme suit :
- et si
- à condition que ne soit pas libre dans
Si la condition dans le cas de l'abstraction n'est pas vérifiée, on renome la variable en une variable qui n'apparait n'est pas libre dans .
La -réduction est la relation suivante appliquée pour n'importe quel sous-terme
C'est aussi une rêgle de réecriture...
On note , et pour les clotures transitive, reflexives et transitives et reflexive, transitive et symmétrique de la relation .
exemples
...
Le théorème de Church-Rosser
- Théorème (Church-Rosser)
est confluente : si et alors et pour un terme
On utilise la preuve classique de Tait et Martin-Löf avec la réduction parallèle.
...
Le lambda-calcul simplement typé
une premiere definition du typage