CIS6700-Spring2025/Homework 7.md

82 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

**Exercise 22.3.9**: For clarity, the original constraint typing rules from class are reproduced below.
```
┌──────────────────┐
│ Γ ⊢ t : T | V; C │
└──────────────────┘
x : T ∈ Γ
---------------- CT-Var
Γ ⊢ x : T | ∅, ∅
Γ, x : T₁ ⊢ t₂ : T₂ | V; C
-------------------------------- CT-Abs
Γ ⊢ λx : T₁. t₂ : T₁ → T₂ | V; C
Γ ⊢ t₁ : T₁ | V₁; C₁
Γ ⊢ t₂ : T₂ | V₂; C₂
V₁ ∩ V₂ = V₁ ∩ FV(T₂) = V₂ ∩ FV(T₁) = ∅
X ∉ V₁, V₂, FV(T₁, T₂, C₁, C₂, Γ, t₁, t₂)
------------------------------------------------------ CT-App
Γ ⊢ t₁ t₂ : X | V₁ V₂ {X}; C₁ C₂ {T₁ = T₂ → X}
```
The new constraint typing rules that thread through unused type variables are below.
```
┌─────────────────────┐
│ Γ; F ⊢ t : T | F; C │
└─────────────────────┘
x : T ∈ Γ
------------------- FCT-Var
Γ; F ⊢ x : T | F; ∅
Γ, x : T₁; F ⊢ t₂ : T₂ | F'; C
------------------------------------ FCT-Abs
Γ; F ⊢ λx : T₁. t₂ : T₁ → T₂ | F'; C
Γ; F₁ ⊢ t₁ : T₁ | F₂; C₁
Γ; F₂ ⊢ t₂ : T₂ | F₃; C₂
X ∈ F₃ F₄ = F₃ \ {X}
----------------------------------------------------- FCT-App
Γ; F₁ ⊢ t₁ t₂ : X | F₄; C₁ C₂ {T₁ = T₂ → X}
```
A key property of the new rules is that the output variables
are indeed fresh with respect to the inputs and the other outputs.
**Lemma**: If Γ; Fᵢ ⊢ t : T | Fₒ; C and Fᵢ ∩ (FV(Γ) FV(t)) = ∅ then Fₒ ⊆ Fᵢ and Fₒ ∩ (FV(T) FV(C)) = ∅.
**Proof**: By induction on the derivation of the new typing rules.
* Case FCT-Var (F₀ = Fᵢ = F): F ∩ FV(Γ) = ∅ and x : T ∈ Γ so F ∩ FV(T) = ∅.
* Case FCT-Abs: By supposition, F ∩ FV(T₁) = ∅.
Then by the induction hypothesis, F' ⊆ F and F' ∩ (FV(T₂) FV(C)) = ∅,
and we also have F ∩ FV(T₁) = ∅ by the supposition and by subset,
so we have F ∩ FV(T₁ → T₂) = ∅ as needed.
* Case FCT-App: By supposition, F₁ ∩ FV(t₁) = F₁ ∩ FV(t₂) = ∅.
By the induction hypothesis on both premises in sequence,
we have F₃ ⊆ F₂ ⊆ F₁ and F₂ ∩ (FV(T₁) FV(C₁)) = F₃ ∩ (FV(T₂) FV(C₂)) = ∅.
By definition, F₄ ⊆ F₃, and X ∉ F₄.
Then F₄ ∩ (FV(T₁) FV(T₂) FV(C₁) FV(C₂)) = ∅ by subset,
so F₄ ∩ (FV(C₁ C₂ {T₁ = T₂ → X})) - ∅ as well.
We can then show that the typing judgements imply one another.
**Lemma** (soundness of FCT wrt CT): Suppose Fᵢ ∩ (FV(Γ) FV(t)) = ∅.
If Γ; Fᵢ ⊢ t : T | Fₒ : C, then Γ ⊢ t : T | Fᵢ \ Fₒ; C.
**Proof**: By induction on the derivation of the new typing rules.
* Case FCT-App: The premises are Γ; F₁ ⊢ t₁ : T₁ | F₂; C₁ and Γ; F₂ ⊢ t₂ : T₂ | F₃; C₂,
along with X ∈ F₃ and F₄ = F₃ \ {X}.
The goal is to show that Γ ⊢ t : T | F₁ \ F₄; C₁ C₂ {T₁ = T₂ → X}.
Applying CT-App, we need the following premises:
1. Γ ⊢ t₁ : T₁ | V₁; C₁ for some V₁;
2. Γ ⊢ t₂ : T₂ | V₂; C₂ for some V₂;
3. V₁ ∩ V₂ = V₁ ∩ FV(T₂) = V₂ ∩ FV(T₁) = ∅; and
4. X ∉ V₁, V₂, FV(T₁, T₂, C₁, C₂, Γ, t₁, t₂).
By the induction hypothesis, we have the first goal where V₁ = F₁ \ F₂.
By the above lemma, F₂ ⊆ F₁, so its variables are not free in Γ or t₂.
Then we apply the induction hypothesis again to yield the second goal where V₂ = F₂ \ F₃.
By set subtraction, we know that V₁ ∩ V₂ = ∅.
**Lemma** (completeness of FCT wrt CT): V ∩ (FV(Γ) FV(t)) = ∅.
If Γ ⊢ t : T | V; C, then Γ; V ⊢ t : T | {}; C.