Cours 15: PCF
Expressivité
-
Pouvoir expressif du $λ$-calcul simplement typé sur les entiers de Church = polynômes + quelques fonctions (max, min, etc…) ⟶ pas très expressif
-
Expressivité du Système F = fonctions récursives totales dans l’artihmétique du second ordre (correspond à $PA_2$)
-
$λ$-calcul pur = Turing-complet (toutes les fonctions récursives)
Programming with Computable Functions (PCF)
(ch. 6 du Amadio-Curien)
Pour étendre le $λ$-calcul simplement typé:
- soit on étend les types ⟶ Système F
- soit on garde les types et on étend les règles de construction de termes + opérateur de point fixe ⟶ PCF
Introduit par Dana Scott et Plotkin dans les années 90 (pères de la sémantique dénotationnelle)
On utilise ce langage pour tester des choses (sémantique, etc…) avant de l’appliquer à de vrais langages de programmation
Présentation
\[Terms ≝ x \mid λx. M \mid MN\\ Types ≝ \underbrace{\omicron: bool \mid ι: int}_{\text{ground types}} \mid A ⇒ B\]Pour un contexte $Γ$:
\[\cfrac{}{Γ ⊢ t: \omicron}\\ \cfrac{}{Γ ⊢ f: \omicron}\\ \cfrac{n ∈ ℕ}{Γ ⊢ n: ι}\\ \cfrac{Γ ⊢ M: \omicron \quad Γ ⊢ P, Q: \overbrace{g}^{\text{ground type: } ι \text{ or } \omicron}}{Γ ⊢ \texttt{if } M \texttt{ then } P \texttt{ else } Q: g}\]Ex: Dans la règle, le fait de se restreindre aux types de base $g$ n’est pas une vraie restriction (c’est du sucre syntaxique), car tous les types sont de la forme $A_1 ⇒ ⋯ ⇒ A_n ⇒ g$, et:
\[λx_1^{A_1}, ⋯, x_n^{A_n}. \texttt{if } M \texttt{ then } P \, x_1 \, ⋯ \, x_n \texttt{ else } Q \, x_1 \, ⋯ \, x_n\] \[\cfrac{Γ ⊢ M: ι}{Γ ⊢ succ(M): ι}\\ \cfrac{Γ ⊢ M: ι}{Γ ⊢ pred(M): ι}\\ \cfrac{Γ ⊢ M: ι \quad Γ ⊢ N:ι}{Γ ⊢ M=N: \omicron}\]Il ne reste qu’une chose pour être Turing-complet: la récursion.
Pour ce faire, on va utiliser un opérateur de point fixe:
\[\cfrac{Γ ⊢ M: A ⇒ A}{Γ ⊢ (Y_A \, M): A}\\ Y_A \, M ⟶ M \, (Y_A \, M)\]Ex: l’addition
\[add \, x \, y = \begin{cases} y \text{ si } x=0 \\ add \, (x-1) \, (y+1) \text{ si } x > 0 \end{cases}\\ ⟹ add ≝ \underbrace{Y}_{A} \, \underbrace{(λf^{ι ⇒ ι ⇒ ι} \, x^ι \, y^ι. \texttt{if } x=0 \texttt{ then } y \texttt{ else } f \, (pred \, x) \, (succ \, y))}_{\underbrace{(ι ⇒ ι ⇒ ι) }_{≝ A}⇒ \underbrace{ι ⇒ ι ⇒ ι}_{A}}\]NB: La sémantique vient de Scott et de Strachey ⟶ la programmation correspond à résoudre des équations mathématiques, avec des expressions qui décrivent des primitives de programmation. $λ$-calcul différentiel ⟶ équations différentielles.
Sémantique opérationnelle
On a de nouvelles règles de réduction, comme on a de nouveaux constructeurs.
\[Y_A \, M ⟶ M \, (Y_A \, M)\\ \texttt{if } true \texttt{ then } P \texttt{ else } Q ⟶ P\\ \texttt{if } false \texttt{ then } P \texttt{ else } Q ⟶ Q\\ pred \, (n+1) ⟶ n\\ pred \, 0 ⟶ 0 \\ succ \, n ⟶ n+1\\ n = n ⟶ true\\ n = m ⟶ false \text{ si } n≠m\]Comme PCF est utilisé comme un langage de programmation, on donne une stratégie de réduction (même si on a la propriété de Church-Rosser).
Sémantique opérationnelle: weak call-by-name
- Evaluation context:
- \[E[] ≝ [] \mid (E \, []) \, M \mid \texttt{if } E [] \texttt{ then } P \texttt{ else } Q\\ succ \, (E []) \mid pred \, (E []) \mid E[] = M \mid n = E []\]
- A program:
-
a closed term of ground type (it represents either a boolean or an integer).
Lemma: Let $M$ be a closed term of ground type. If $M$ has a redex, then there exists a unique evaluation context $E[]$ and redex $R$ s.t.
\[M = E[R]\]
Proof: Induction on $M$.
Beware: if $M = \underbrace{N_0 N_1}_{\text{of type } ι}$, then $N_0: A ⇒ ι$ and $N_1: A$, and we can’t use the IH, since it’s not a ground type.
Cette sémantique est weak parce qu’elle n’évalue pas en dessous des $λ$: si on a une fonction $λx^ι. (λg^ι. g^ι) \, 0$, on s’arrête, parce qu’on est face à une $λ$-abstraction.
Ex: Si
\[\underbrace{N_0}_{A_1 ⇒ ⋯ ⇒ A_n ⇒ ι} \, N_1 \, ⋯ \, N_n\]alors si $n>0$, $N_0$ est une $λ$-abstraction (par les règles de typage).
Let $M$ be a program.
We define $M ⟶ N$ iff
\[M = E[R]\]and
\[N = E[C]\]where $R ⟶ C$
Lemma (Subject Reduction): If $Γ ⊢ \underbrace{M}_{\text{the subject}}:A$ and $M ⟶ N$, then $Γ ⊢ N:A$
Maintenant, on a un langage Turing-complet: une $M: ι → ι$ peut être n’importe quelle fonction récursive partielle.
Certains termes ne sont pas normalisables:
\[Y \, (λx^ι. succ \, (x^ι)) ⟶^2 succ \, Y \, (λx^ι. succ \, (x^ι)) ⟶ ⋯\\ Ω_A ≝ Y \, (λx^A. x^A) ⟶ (λx^A. x^A) Ω_A ⟶ Ω_A ⟶ ⋯\]Autre exemple de fonction, définie sur les nombres pairs et divergeant sur les impairs:
\[Y \, (λf \, x. \texttt{if } x=0 \texttt{ then } 0 \texttt{ else if } x=1 \texttt{ then } Ω_i \text{ else } f \, (pred \, (pred x))\]Catégorie des Complete Partial Orders (CPOs)
Pas de sémantique dans $Set$:
- on a besoin d’une sémantique où toutes les fonctions ont des points fixes
- comment interpréter les fonctions qui divergent dans $Set$?
On va introduire un ordre sur les fonctions: $f ≤ g$ ssi sur toute entrée, quand $f$ renvoie une valeur, $g$ renvoie la même.
- $A$ is a CPO:
-
iff $A$ is a set with a partial order $≤$ s.t.
- $⊥_A ∈ A$ is the bottom element
- any monotonous non-decreasing chain $\lbrace x_i \rbrace ⊆ A$ has the supremum $∨_i \, x_i$
NB: on travaille avec des chaînes seulement et pas des ensembles dirigés, car pour les sémantiques probabilistes, seuls les sup de chaînes de fonctions mesurables sont assurés de rester mesurables.
- $f: A ⟶ A$ is Scott-continuous:
-
iff
-
$f$ is monotonous and non-decreasing:
\[\text{if } x ≤ y, \text{ then } f(x) ≤ f(y)\] -
$f$ preserves the chain suprema:
\[f(∨_i \, x_i) = ∨_i f(x_i)\]
-
Th (Tarski): Let $A$ be a CPO and $f: A ⟶ A$ a Scott-continuous function. Then
\[\bigvee_{n} f^n(⊥) \text{ is the smallest fixed point of } f\]
Catégorie des CPOs: $CPO$
-
Objects: CPOs
-
Morphisms: Scott-continuous functions
Proposition: $CPO$ is a CCC
Proof:
-
There are finite products (check that the projections are Scott-continuous)
-
Terminal object: $⊤$
-
Right adjoint of $A × _$: $A ⇒ _$
- the order in $A ⇒ B$ is the pointwise order
Interprétation
$⟦ι⟧_{CPO} ≝$
digraph {
rankdir=BT;
⊥ -> 1, 2, 3, ⋯;
}
NB: on l’appelle le “flat domain of $ι$”
La chaine des entiers ne convient pas, car on pourrait construire des fonctions non croissantes de $⟦ι⟧{CPO}$ and $⟦ι⟧{CPO}$
Lazy integers:
digraph {
rankdir=BT;
⊥ -> 0, "1*";
"1*" -> 1, "2*";
"2*" -> 2, "3*";
"3*" -> 3, ⋯;
}
mais n’est pas un CPO: la chaîne des entiers étoilés n’a pas de sup ⟶ ajouter $ω$, plus grand que tous les étoilés.
$⟦\omicron⟧_{CPO} ≝$
digraph {
rankdir=BT;
⊥ -> true, false;
}
\[⟦A ⇒ B⟧_{CPO} ≝ \lbrace f:A ⟶ B \mid f \text{ Scott-continue} \rbrace\]
\[⟦x_1: A_1, ⋯, x_n: A_n ⊢ M:B⟧: \underbrace{A_1 × ⋯ × A_n}_{\text{the product of CPOs, ordered componentwise}} ⟶ B\]
NB: au niveau du $λ$-calcul, l’interprétation n’a rien changé. On a juste l’information supplémentaire que les fonctions sont particulières : elles sont Scott-continues.
\[⟦Γ ⊢ succ(M): ι⟧ \, \vec{g} ≝ \begin{cases} n+1 &&\text{ si } ⟦Γ ⊢ M⟧ \, \vec{g} = n \\ ⊥ &&\text{ sinon} \end{cases}\] \[⟦Γ ⊢ \texttt{if } M \texttt{ then } P \texttt{ else } Q⟧ \, \vec{g} ≝ \begin{cases} ⟦Γ ⊢ P⟧ \, \vec{g} &&\text{ si } ⟦Γ ⊢ M⟧ \, \vec{g} = true \\ ⟦Γ ⊢ Q⟧ \, \vec{g} &&\text{ si } ⟦Γ ⊢ M⟧ \, \vec{g} = false \\ ⊥ &&\text{ sinon} \end{cases}\] \[⟦Γ ⊢ Y_A \, (M)⟧ \, \vec{g} = \bigvee_n (⟦Γ ⊢ M⟧ \, \vec{g})^n (⊥)\]NB:
- La $λ$-abstraction permet de construire des fonctions non linéaires (qui n’envoient donc pas $⊥$ sur $⊥$): $λx^ι. 1$
- les contextes d’évaluation envoient $⊥$ sur $⊥$ ⟶ $⟦λx^ι. E[x^ι]⟧ \, ⊥$ (correspondent aux fonctions linénaires dans la sémantique de la logique linéaire).
Leave a comment