updated LambdaProp to PCF

This commit is contained in:
wadler 2018-05-21 14:16:29 -03:00
parent ebc9832f29
commit f9e21d7ecf

View file

@ -312,7 +312,6 @@ subst {x = y} (-E {x = x} ⊢L ⊢M ⊢N) ⊢V with x ≟ y
subst {x = y} (Fix {x = x} ⊢M) ⊢V with x ≟ y subst {x = y} (Fix {x = x} ⊢M) ⊢V with x ≟ y
... | yes refl = Fix (rename-≡ ⊢M) ... | yes refl = Fix (rename-≡ ⊢M)
... | no x≢y = Fix (subst (rename-≢ x≢y ⊢M) ⊢V) ... | no x≢y = Fix (subst (rename-≢ x≢y ⊢M) ⊢V)
{-
\end{code} \end{code}
@ -324,20 +323,22 @@ is also a closed term with type `A`. In other words, small-step
reduction preserves types. reduction preserves types.
\begin{code} \begin{code}
preservation : ∀ {M N A} → ∅ ⊢ M ⦂ A → M ⟹ N → ∅ ⊢ N ⦂ A preserve : ∀ {M N A}
preservation (Ax ()) → ∅ ⊢ M ⦂ A
preservation (⇒-I ⊢N) () → M ⟹ N
preservation (⇒-E ⊢L ⊢M) (ξ·₁ L⟹L) with preservation ⊢L L⟹L ----------
... | ⊢L = ⇒-E ⊢L ⊢M → ∅ ⊢ N ⦂ A
preservation (⇒-E ⊢L ⊢M) (ξ·₂ valueL M⟹M) with preservation ⊢M M⟹M preserve (Ax ())
... | ⊢M = ⇒-E ⊢L ⊢M preserve (⇒-I ⊢N) ()
preservation (⇒-E (⇒-I ⊢N) ⊢V) (βλ· valueV) = subst ⊢N ⊢V preserve (⇒-E ⊢L ⊢M) (ξ-·₁ L⟹L) = ⇒-E (preserve ⊢L L⟹L) ⊢M
preservation `-I₁ () preserve (⇒-E ⊢L ⊢M) (ξ-·₂ VL M⟹M) = ⇒-E ⊢L (preserve ⊢M M⟹M)
preservation `-I₂ () preserve (⇒-E (⇒-I ⊢N) ⊢V) (β-ƛ· VV) = subst ⊢N ⊢V
preservation (`-E ⊢L ⊢M ⊢N) (ξif L⟹L) with preservation ⊢L L⟹L preserve -I₁ ()
... | ⊢L = `-E ⊢L ⊢M ⊢N preserve (-I₂ ⊢M) (ξ-suc M⟹M) = -I₂ (preserve ⊢M M⟹M)
preservation (`-E `-I₁ ⊢M ⊢N) βif-true = ⊢M preserve (-E ⊢L ⊢M ⊢N) (ξ-case L⟹L) = -E (preserve ⊢L L⟹L) ⊢M ⊢N
preservation (`-E `-I₂ ⊢M ⊢N) βif-false = ⊢N preserve (-E -I₁ ⊢M ⊢N) β-case-zero = ⊢M
preserve (-E (-I₂ ⊢V) ⊢M ⊢N) (β-case-suc VV) = subst ⊢N ⊢V
preserve (Fix ⊢M) (β-μ) = subst ⊢M (Fix ⊢M)
\end{code} \end{code}
@ -357,7 +358,7 @@ The preservation property is sometimes called _subject reduction_.
Its opposite is _subject expansion_, which holds if Its opposite is _subject expansion_, which holds if
`M ==> N` and `∅ ⊢ N ⦂ A`, then `∅ ⊢ M ⦂ A`. `M ==> N` and `∅ ⊢ N ⦂ A`, then `∅ ⊢ M ⦂ A`.
Find two counter-examples to subject expansion, one Find two counter-examples to subject expansion, one
with conditionals and one not involving conditionals. with case expressions and one not involving case expressions.
## Type Soundness ## Type Soundness
@ -374,18 +375,24 @@ Stuck : Term → Set
Stuck M = Normal M × ¬ Value M Stuck M = Normal M × ¬ Value M
postulate postulate
Soundness : ∀ {M N A} → ∅ ⊢ M ⦂ A → M ⟹* N → ¬ (Stuck N) Soundness : ∀ {M N A}
→ ∅ ⊢ M ⦂ A
→ M ⟹* N
-----------
→ ¬ (Stuck N)
\end{code} \end{code}
<div class="hidden"> <div class="hidden">
\begin{code} \begin{code}
Soundness : ∀ {M N A} → ∅ ⊢ M ⦂ A → M ⟹* N → ¬ (Stuck N) Soundness : ∀ {M N A}
Soundness ⊢M (M ∎) ⟨ ¬M⟹N , ¬ValueM ⟩ with progress ⊢M → ∅ ⊢ M ⦂ A
→ M ⟹* N
-----------
→ ¬ (Stuck N)
Soundness ⊢M (M ∎) ⟨ ¬M⟹N , ¬VM ⟩ with progress ⊢M
... | steps M⟹N = ¬M⟹N M⟹N ... | steps M⟹N = ¬M⟹N M⟹N
... | done ValueM = ¬ValueM ValueM ... | done VM = ¬VM VM
Soundness ⊢L (L ⟹⟨ L⟹M ⟩ M⟹*N) = Soundness ⊢M M⟹*N Soundness ⊢L (L ⟹⟨ L⟹M ⟩ M⟹*N) = Soundness (preserve ⊢L L⟹M) M⟹*N
where
⊢M = preservation ⊢L L⟹M
\end{code} \end{code}
</div> </div>
@ -527,7 +534,7 @@ Suppose we add the following new rule to the typing relation
of the STLC: of the STLC:
-------------------- (T_FunnyAbs) -------------------- (T_FunnyAbs)
∅ ⊢ λ[ x ⦂ ` ] N ⦂ ` ∅ ⊢ ƛ x ⇒ N ⦂ `
Which of the following properties of the STLC remain true in Which of the following properties of the STLC remain true in
the presence of this rule? For each one, write either the presence of this rule? For each one, write either
@ -541,6 +548,3 @@ false, give a counterexample.
- Preservation - Preservation
\begin{code}
-}
\end{code}