Retour sur Curry-Howard
On peut prendre System-F comme une logique:
•
Correspond (presque) `a la logique classique propositionnelle•
Qu’en est-il de la logique des pr ´edicats?Comment dire (et prouver):
∀x, y ∈ N, x N + y = y + x
?Stefan Monnier IFT-6172 1
Nombres naturels et addition
Nat : Type;
type Nat
| zero
| succ Nat;
_+_ : Nat → Nat → Nat;
x + y = case x
| zero ⇒ y
| succ n ⇒ succ (n + y);
Nombres naturels et addition de Church
Nat : Type;
Nat = (t : Type) → t → (t → t) → t;
zero = λ t (x:t) (f:t → t) → x;
succ n = λ t (x:t) (f:t → t) → f (n t x f);
_+_ : Nat → Nat → Nat;
x + y = x Nat y succ;
Stefan Monnier IFT-6172 3
L’ ´egalit ´e, comme un type?
Il faut d ´efinir une ´egalit ´e:
_=_ : Nat → Nat → Type;
Mais on sait que
Nat : Type
etType :
!Donc il faut dans
R
qqch du genre( Type , , ?)
En clair: des fonctions de valeurs `a types!
Aussi connu comme: des types d ´ependents
Le calcul des constructions
CoC = System-Fω + types d ´ependents:
({∗, }, {∗ : }, {(∗, ∗, ∗), ( , ∗, ∗), ( , , ), (∗, , )})
Encore strongly normalizing
⇒
logique coh ´erente!Correspond `a une sorte de logique des pr ´edicats d’ordre sup ´erieur Dor ´enavant,
(x : τ
1) → τ
2 n’est plus n ´ecessairementτ
1→ τ
2Cependant
t
est encore effac¸able dansλ(t : κ) → e
Stefan Monnier IFT-6172 5
Egalit ´e de Leibniz ´
x = y ⇔ ∀P.P (x) ⇒ P (y )
Pour le cas qui nous int ´eresse:
(x = y) = (P : Nat → Type) → P x → P y;
Cas de base: preuve de la r ´eflexivit ´e et commutativit ´e
refl : (x : Nat) → (x = x);
refl x = λ (P : Nat → Type) → λ (p : P x) → p;
comm : (x = y) → (y = x);
comm p = p ( λ (y’ : Nat) → (y’ = x)) (refl x);
Limites de l’encodage impr ´edicatif
Essayons de prouver:
0 6= 1
obvious? : (0 = 1) → ⊥ ;
obvious? = λ (p : (0 = 1)) → p ( λ (x : Nat)
→ x Type Unit ( λ _ → ⊥ )) unit;
Le premier argument de
x
doit ˆetre un type, pas un kind!Stefan Monnier IFT-6172 7
D’autres PTS
λ∗
est un PTS extr ˆeme; aussi d ´ecrit parType : Type λ ∗ ≡ ({∗}, {∗ : ∗}, {(∗, ∗, ∗)})
System-U−: System-Fω o `u STLC est remplac ´e par System-F!
({∗, , 4}, {∗ : , : 4},
{(∗, ∗, ∗), ( , ∗, ∗), ( , , ), (4, , )})
Ni l’un ni l’autre ne sont strongly normalizing On peut y trouver un terme de type
⊥
!Mais c’est toujours un terme qui ne termine pas!
Reality check
Pas strongly normalizing
⇒
typage non-d ´ecidable•
Pas grave en soiEffets de bord
⇒
casse tout (e.g readNat"N=" =
readNat"N="
) Preuves qui ne terminent pas⇒
pas effac¸able!Stefan Monnier IFT-6172 9
Impr ´edicativit ´e
Dans System-F la deuxi `eme r `egle est impr ´edicative:
Unit = (t : Type) → t → t;
unit = λ (t : Type) → λ (x : t) → x;
unitUnit = unit Unit;
Le quantificateur
∀
s’applique `a lui-m ˆeme!La repr ´esentation extensionnelle de id est tr `es infinie:
•
elle associe `a chaque valeur, cette m ˆeme valeur•
elle associe aussi id `a id⇒
C’est une fonction infinie qui se contient elle-m ˆeme!System-F ω pr ´edicatif
({∗, }, {∗ : },
{(∗, ∗, ∗), ( , ∗, ), ( , , )})
Une fonction comme id vit alors dans la sorte
:•
On ne peut plus passer son type `a unΛ
•
On ne peut plus la passer en argument `a une fonction•
Cependant, on peut l’appeler exactement comme avant•
idInt
est une fonction normale (dans la sorte∗
)E.g. on peut encore faire:
id (Int → Int) (id Int)
Stefan Monnier IFT-6172 11
PTS avec univers
Eviter l’impr ´edicativit ´e excessive de´
λ∗
par stratification:({ Type n | n ∈ N}, N
{ Type n
1: Type n
2| n
2= n
1+ 1},
{( Type n
1, Type n
2, Type n
3) | n
3=
max(n
1, n
2)})
Pas d’impr ´edicativit ´e du tout
•
Type d’une fonction toujours “plus haut” que ses arguments Syst `eme strongly normalizing et donc logique coh ´erenteVariantes: universe inclusion, universe polymorphism