Cours 1 : đœ-rĂ©duction et đŒ-renommage
$\sim$ 1930 : Alonzo Church.
- $đ$-termes :
-
$s,t,u, v \ldots :=$
- variables : $x,y,z, \ldots$
- applications : $uv$
- $đ$-abstractions : $đx.u$
Intro historique : crise des fondements mathématiques.
- Hilbert, Church, Cantor
Cantor : a dĂ©couvert que tout ensemble $A$ sâinjecte strictement dans $đ«(A)$ ⶠcardinalitĂ©s non comparables.
ⶠa Ă©crit une lettre au pape pour sâexcuser car âlâinfini câest Dieu, et Dieu est uniqueâ (lâa beaucoup troublĂ©).
Infini de $â$ : $2^{\aleph_0} > \aleph_0$
$\aleph_1$ : plus petit cardinal strictement plus grand que $\aleph_0$.
Question :
\[\aleph_1 \overset{?}{=} 2^{\aleph_0}\]ⶠProposition indépendante de ZFC (on peut la rajouter ou rajouter sa négation).
NB : Beaucoup de logiciens sont morts fous.
- ThéroÚme de Zermello :
-
Tout ensemble peut ĂȘtre bien ordonnĂ©.
ⶠPour le dĂ©montrer : part dâun certain ensemble dâaxiomes (mais oublie lâaxiome du choix).
Peano avait dĂ©couvert 30 ans avant le caractĂšre fondamental de lâaxiome du choix ⶠavait âtout inventĂ© avant tout le mondeâ (thĂ©orie de lâintĂ©gration Borel/Lebesgue, PainlevĂ©, âŠ), mais on lâa oubliĂ©.
Church : âLa thĂ©orie des ensembles, câest nulâ ⶠça ne parle que dâensembles, les fonctions sont dĂ©finies Ă partir des ensembles, etcâŠ
NB : En maths, on fait des preuves qui pourraient se traduire en th des ensembles, mais dans les faits : on ne lâutilise pas en pratique.
âč Church invente le $đ$-calcul en 1940 pour remĂ©dier à ça (et fonder les maths).
Mais Kleene, son Ă©lĂšve, dĂ©couvrira plus tard ça nâexprime que les fonctions calculables ⶠgrosse dĂ©ception pour Church.
Mais au dĂ©but : tout le monde sâen fiche.
NB : Renommage des variables muettes ⶠtrivialité à formaliser.
Mais de maniĂšre âamusanteâ : Church sâĂ©tait trompĂ© la premiĂšre fois lĂ -dessus.
- $đœ$-rĂ©duction :
- \[(đœ) : \underbrace{(đx.u)v}_{\text{un redex (Reduction Expression)}} ⶠ\underbrace{u[x:=v]}_{\text{contractum (du redex)}}\]
Quel Ă©tait le bug de Church ?
RedĂ©couvert par McCarthy en 53, avec Lisp, et lâa nommĂ© âle problĂšme du fun arg ascendant/descendantâ
\[(đx.x)v ⶠv\]ex :
\[(đx.+x1)4 ⶠ+41\]NB : le $đ$-calcul est non typĂ©
Ex impossible Ă comprendre avec un esprit âbien typĂ©â :
\[đż â đx.(xx)\]Puis :
\[đș â đżđż\]Donc, par la $đœ$-rĂ©duction :
\[đș â (đx.xx)đż ⶠđżđż = đș\]ⶠprogramme qui boucle : Ă©quivalent du
while (1) ;;
NB : pourquoi on dĂ©finit une relation binaire de ârĂ©ductionâ, si on voudrait plutĂŽt une relation dâĂ©quivalence ?
ⶠdâun point de vue informatique, on va parler du ânombre dâĂ©tapes de rĂ©ductionâ, etc⊠(pas dâintĂ©rĂȘt a priori en logique, mais on verra par la suite que si)
NB : Pour les parenthĂšses, on utilisera la mĂȘme convention que OCamL :
\[xyz â (xy)z â x(yz)\]Lâapplication nâest PAS associative !
\[đ x_1 ⯠x_n.u = đ x_1 (đx_2 ⯠(đx_n.u))))\]\[(đx.x)[x := yz] = đx.yz\]
car $đyz.yz$ nâa pas de sens (pas un $đ$-terme).
ProblÚme : ne préserve pas la sémantique
Plusieurs solutions :
- Le meilleure : Solution de De Bruijn
On va faire autrement : si on âoublieâ toutes les occurrences de $x$ aprĂšs $đx.$
\[(đx.đy.y)[y:=x]\\ = (đx.đy.y)\](fonction de projection sur la deuxiĂšme coordonnĂ©e)
\[(đx.đy.z)[z:=x]\\ = (đx.đy.x)\]encore une fois : viole la sĂ©mantique intuitive.
Solution ? Remplacement des variables :
\[(đx'.đy'.z)[z:=x]\\ (đx'.đy'.x)\]MAIS on ne peut pas faire ça, car on nâa pas de notion de substitution de variables : on est en train dâessayer de le faire !
NB : $đ$-calcul ⶠil y a des variables liĂ©es qui deviennent libres !
Un patch qui marche : substitution partielle
Donnera :
- soit le résultat attendu
- soit sera non défini
Notion de variables libres / liées : définies par récurrence sur les termes de maniÚre naturelle.
- $fv(x)$ : âfree variablesâ : ensemble des variables libres de $x$
- $bv(x)$ : âbound variablesâ : ensemble des variables liĂ©es de $x$
NB : Il nây a aucun rapport entre le fait dâĂȘtre libre ou liĂ© :
Ex :
\[đz.\underbrace{(đx.xy)}_{x \text{ liĂ©}}\underbrace{(zx)}_{x \text{ libre}}\] \[fv = \lbrace x, y \rbrace \\ bv = \lbrace x, z \rbrace\]- Substitution partielle :
-
- $u[x := v]$ dĂ©fini lorsque $xâbv(u)$
- Puis, par rĂ©currence sur $u$ lorsque $fv(u)â©bv(u) = â $
$đŒ$-Ă©quivalence
\[(đŒ) : đx.u \, đŒ \, đy.(u[x:=y])\]si
- $xâ y$
- $x, yâbv(u)$
MAIS : ces conditions sont vérifiées dans ce cas :
\[đx.y \, đŒ \, đx.x\]mais on ne pas quâil y ait Ă©galitĂ©, donc on rajoute la condition :
- $yâfv(u)$
- Congruence $=_đŒ$ :
-
câest une relation dâĂ©quivalence qui est une congruence, i.e :
\[u =_đŒ v âč uw =_đŒ vw \\ u =_đŒ v âč wu =_đŒ wv \\ u =_đŒ v âč đx.u =_đŒ đx.v \\\]et câest la plus petite congruence qui contient $đŒ$, avec $u=_đŒv â u \, đŒ \, v$
ⶠConvention de Barendregt :
- on refuse dâavoir des variables libres et liĂ©es
- on ne peut pas avoir deux variables liĂ©es de mĂȘme nom (du type $đx.đy.đx. \ldots$)
Mais problĂšme ici :
\[(đx.yxx)(đz.z) ⶠy (đz.z) (đz.z)\]âč on le remplace, icognito, par :
\[(đx.yxx)(đz.z) ⶠy (đz.z) (đz'.z')\]Morale : On peut considĂ©rer tous les termes modulo $đŒ$-renommage et tout se passe bien.
\[\begin{align*} (đx.x(đy.yyx)(đz.xz))(đx',y',z'.x'y'z') & = (đx',y',z'.x'y'z')(đy.yy(đx',y',z'.x'y'z'))(đz.(đx',y',z'.x'y'z')z) \\ & \\ \end{align*}\]
$u$ se $đœ$-contracte en $v$, notĂ© $u â¶_đœ v$
NB : pas de rĂ©duction parallĂšle : contraction de plusieurs redex identiques en mĂȘme temps de la mĂȘme maniĂšre.
digraph {
rankdir=TB;
A[label="(đy.(đx.x)y)z"];
B[label="(đx.x)z"];
C[label="(đy.y)z"];
D[label="z"];
A -> {B,C};
B -> D;
C -> D;
}
- Fortement normalisable ( = terminant) :
-
toutes les branches terminent
- Normalisable ( = faiblement trerminant) :
-
il existe une branche qui termine
Ex :
- lâex prĂ©cĂ©dent est fortement normalisable, donc a fortiori normalisable.
- $đș$ nâest pas normalisable
- Normalisable mais pas fortement normalisable :
digraph {
rankdir=TB;
A[label="(đx.y)đș"];
B[label="y"];
C[label="(đx.y)đș"];
D[label="(đx.y)đș"];
E[label="âŻ"];
A -> {B,C};
C -> D;
C -> B;
D -> E;
E -> B;
D -> B;
}
Si on prend deux stratĂ©gies diffĂ©rentes qui arrivent Ă une forme normale, câest nĂ©cessairement la mĂȘme.
Relations binaires
Soit $â¶$ une relation binaire sur $A$.
Prop de Church-Rosser (CR) :
ssi \(\overset{\ast}{\longleftrightarrow} = \overset{\ast}{â¶}\overset{\ast}{â”}\)
NB :
- câest la plus petite relation dâĂ©quivalence qui contient $â¶$.
- Dans la thĂ©orie des groupes $1\cdot x$ nâest pas un redex, $x$ non plus, donc on ne peut pas les rĂ©duire pour obtenir la mĂȘme chose. Mais ils sont Ă©gaux ⶠpas de Church-Rosser
- Confluence :
-
si $u â¶^\ast v_1$ et $uâ¶^\ast v_2$, alors il existe $w$ tel que $v_1 â¶^\ast w$ et $v_2 â¶^\ast w$
Th : La confluence Ă©quivaut Ă CR
Le $đ$-calcul est confluent.
- Confluence locale :
-
si $u ⶠv_1$ et $uⶠv_2$, alors il existe $w$ tel que $v_1 â¶^\ast w$ et $v_2 â¶^\ast w$
Ăvidemment : Confluence âč Confluence locale, mais la rĂ©ciproque nâest pas vraie :
Contre-exemple de Curry
digraph {
A -> B;
B -> A;
A -> C;
B -> D;
}
Câest localement confluent
\[A ⶠC \\ A ⶠB\]puis $B ⶠC$
mais pas confluent :
\[A ⶠC \\ A ⶠB ⶠD\]- Confluence forte :
-
si $u ⶠv_1$ et $uⶠv_2$, alors il existe $w$ tel que $v_1 â¶^{â€1} w$ et $v_2 â¶^{â€1} w$
Confluence forte + rĂ©duction parallĂšle âč confluence
Th de Neumann :
Si $â¶$ est localement confluente, fortement normalisante, alors elle est confluente.
HypothĂšse superflue :
- $â¶$ finiment branchante :
-
tous les sommets du diagramme sont dâaritĂ© finie.
Lemme de König :
Tout arbre $T$ tq :
- (a) $T$ est Ă branchement fini
- (b) toutes les branches de $T$ sont finies
(c) est fini.
NB :
digraph {
rankdir=TB;
A -> A11;
A -> A21;
A21 -> A22;
A -> A31;
A31 -> A32;
A32 -> A33;
A -> âŻ;
}
Toutes les branches sont finies, mais il nâexiste pas de plus grande branche.
On montre
\[ÂŹ(c)⧠(a) âč ÂŹ(b)\]- Arbre :
-
Ensemble ordonnĂ© (par la relation âĂȘtre ancĂȘtre deâ) bien fondĂ©, dont les segments initiaux sont des chaĂźnes (totalement ordonnĂ©s).
NB : Le lemme de König est une forme faible de lâaxiome du choix â¶
- axiome des choix dépendants :
-
si jâai une fonction qui a toute suite de choix finis associe un nouveau choix, il existe une fonction de choix.
MAIS :
Gödel : lâaxiome du choix est indĂ©pendant de la thĂ©orie ZF
- ⶠavec ensembles constructibles :
-
la plus petite famille dâensembles quâon peut former avec les constructions classiques de ZF.
Gödel montre que le sous-modĂšle des ensembles constructibles vĂ©rifie immĂ©diatement lâAC dĂšs quâil existe un modĂšle des ensembles le vĂ©rifiant.
âč Il y a une hiĂ©rarchie dâaxiomes, plus ou moins forts : AC > Axiome des choix dĂ©pendants, etcâŠ
NB : Peano, 30 ans avant Zermello, avait eu ce problĂšme, dans König, et avait dĂ©jĂ pris des prĂ©cautions dans la dĂ©finition des arbres pour ne pas avoir Ă recourir Ă lâAC.
\[đ(u) = \max \lbrace \text{ longueur d'une branches } u â u_0 ⶠ⯠ⶠu_n \rbrace\]
digraph {
rankdir=TB;
A[label = "Confluence locale"];
B[label = "Confluence"];
C[label = "Confluence forte"];
D[label = "Church-Rosser"];
A -> B[label="si ft normalisant (Neumann)"];
B -> A;
C -> B;
B -> D;
D -> B;
}
Confluence âč PropriĂ©tĂ© de la forme normale unique
$đ$-rĂšgle
\[(đ) : đx.ux ⶠu\]uniquement si
\[xâfv(u)\]NB :
- Aucun langage de programmation nâimplĂ©mente $đ$ : ni OCamL, ni Coq, âŠ
-
Il y a $đœ$-Ă©quivalence si $u$ est une abstraction : $u â đy.t$
-
MAIS : il existe des termes $u$ (par ex: les variables : $uây$) tels que
\[đx.yx â _{đœ} y\]En effet : par lâabsurde, sinon : il seraient rĂ©ductibles, par confluence, en un mĂȘme terme $w$ : mais ils sont dĂ©jĂ en forme normale !
NB : cf. Procédure de Knuth et Bendix
$đ^\ast$-calcul
On rajoute des termes de la forme
let x=u in v
let x=u in v
ⶠ$v[x:=u]$
Prop : le $đ^\ast$-calcul est fortement confluent
NB : Barendregt en a inventĂ© une preuve utilisant une âmesure entiĂšreâ.
\[SN â \lbrace u \mid u \text{ termine } \rbrace\] \[\overline{SN} â \lbrace đâ [x_1 := w_1, âŻ, x_n := w_n ], \text{ oĂč } w_iâSN \rbrace\]- Substitution parallĂšle $đ â [x_1 := w_1, âŻ, x_n := w_n ]$ :
-
une fonction qui Ă chaque $x_i$ associe $w_i$ (modulo $đŒ$-renommage, toujours)
DĂ©m :
Démontrons, apr réc sur la structure de $u$ :
\[uâ SN\]-
Si $u = x$ : OK
-
Si $u = st$, $u ⶠs_1 t_1 ⶠâŻ$ : oĂč on rĂ©duit Ă gauche ou Ă droite Ă chaque Ă©tape. Si la rĂ©duction est infinie, il y a une rĂ©duction infinie Ă gauche ou Ă droite : impossible, car $â¶$ est fortement normalisante par HR.
-
$u = đx. s$, $đx. s_1 ⶠđx. s_2 ⶠâŻ$ est finie.
-
$u = $
let x=s in t
ⶠ$u = $let x=s' in t'
ⶠIl âfautâ renforcer lâhypothĂšse de rĂ©currence
Pouvoir expressif du $đ$-calcul
On va coder toutes les fonctions calculables, grùce aux fonctions récursives de Gödel : la plus petite classe de fonctions contenant les fonctions constantes, la fonction successeur, les projections, la récurrence primitive (cf. le cours de calculabilité).
BUT : Pour chaque $f$ rĂ©cursive, on veut trouver un $đ$-terme $\lceil f \rceil$ tq :
\[ân_1, âŻ, n_k ââ, \text{ si } f(n_1, âŻ, n_k) \text{ dĂ©fini, alors } \lceil f \rceil \lceil n_1 \rceil ⯠\lceil n_k \rceil â¶^\ast \lceil f(n_1, âŻ, n_k) \rceil\]let rec f x = u f x in f
Le terme $f$ cherché est tq
\[âv, fv =_{đœ} u f v\]On cherche un $f$ tq :
\[f =_{đœ} uf\]ⶠun point fixe de $u$
â¶
Th : Tous les termes du $đ$-calcul ont un point fixe, et mĂȘme MIEUX :
Il existe un terme clos (appelé combinateur, souvent noté $y$) tq :
\[âu, yu \text{ est un point fixe de } u\]
Corollaire : $yu =_{đœ} u (yu)$
Combinateur de pts fixes de Church
\[Y â đf.(đx.f(xx))(đx.f(xx))\]NB : aucun combinateur de point fixe ne peut normaliser.
\[Yu â¶_đœ (đx. u(xx)) (đy. u(y)) \\ â¶_đœ u (đy. u(y)) (đy. u(y)) \\ â”_đœ u(Yu)\]Combinateur de pts fixes de Turing :
\[đł â AA\]oĂč
\[A â đg,h.h(ggh)\]â¶
\[đłu â¶_đœ (đg,h.h(ggh))Au \\ â¶_đœ u(AAu) â”_đœ u(đłu)\]Donc let rec f x = u f x in f
$â Yu$
DĂ©f : $u â¶_1 v$ ssi il existe un $đ^\ast$-terme $uâ$ tel que $uâ$
- est obtenu à partir de $u$ en ajoutant des $\ast$ à certains rédex.
- $uâ â¶^\ast v$ en $đ^\ast$-calcul
NB : $v$ est un $đ$-terme, mais aussi en particulier un $đ^\ast$-terme.
- Effacement des Ă©toiles :
- \[E(u')=u\]
Th : Pour toute fonction rĂ©cursive $f: â^kâ¶â$, il existe un $đ$-terme $f$ tq
- Si $f(n_1, âŻ, n_k)$ est dĂ©finie, alors $\lceil f \rceil \lceil n_1 \rceil ⯠\lceil n_k \rceil â¶^\ast \lceil f(n_1, âŻ, n_k) \rceil$
- Si $f(n_1, âŻ, n_k)$ nâest pas dĂ©finie, alors $\lceil f \rceil \lceil n_1 \rceil ⯠\lceil n_k \rceil$ ne termine pas
ThéorÚme de standardisation
- Forme de tĂȘte :
-
tout terme $u$ sâĂ©crit de façon unique \(đ x_1 ⯠x_n. h u_1 ⯠u_n\) oĂč
-
$h$ (la tĂȘte) est
- soit une variable $x$ : la variable de tĂȘte ⶠalors de $u$ est en forme ânormale de tĂȘteâ (ce nâest pas nĂ©cessairement une forme normale par contre).
- soit une $đ$-abstraction $đx.t$ (et alors $nâ„1$), et $(đx.t)u_1$ est appelĂ© rĂ©dex de tĂȘte
-
- RĂ©duction de tĂȘte :
-
$uâ¶_t v$ ssi $u = đx_1 ⯠x_m. (đx.t) u_1 ⯠u_n$ ($nâ„1$) et $v=đx_1 ⯠x_m.t[x:=u_1] u_2 ⯠u_n$
NB : elle est dite faible si $m=0$ : câest une rĂ©duction de tĂȘte faible quâimplĂ©mentent les langages qui font de lâappel par nom.
Ex $đx. x((đy.y)z)$ est en forme normale de tĂȘte, mais pas en forme normale.
digraph {
rankdir=TB;
App2[label="App"];
đx -> App;
App -> {x, App2};
App2 -> {đy, z};
đy -> y;
}
â
digraph {
rankdir=TB;
h[label="đx_1âŻx_n.h"]
h -> {u_1, u_2, âŻ, u_n};
}
R. David : RĂ©duction standard ⶠon descend dans lâarbre pour rĂ©duire, en sâinterdisant de remonter.
\(u âč_s v\) ssi
soit $v$ nâest pas une variable ($mâ„1$ ou $nâ„ 1$) : \(u ⶠ^\ast_t đ x_1 ⯠x_m. u_0 ⯠u_n \\ âč_s đ x_1 ⯠x_m. v_0 ⯠v_n = v\)
sinon : $u â¶^\ast_t v$
Th : \(â¶^\ast = âč_s\)
Leave a comment