---
# System prepended metadata

title: 22章

---

# 22章

## 22.2.3 演習問題

下記の項に対し、空の文脈での解(solution)を3つ見つけよ。

λx:X. λy:Y. λz:Z. (x z) (y z)

### 回答

σΓ $\vdash$ σt : T を満たす (σ, T) を求める。

σ = [X $\mapsto$ Z → A → B, Y $\mapsto$ Z → A]
T = B

σ = [X $\mapsto$ Nat → A → B, Y $\mapsto$ Nat → A, Z $\mapsto$ Nat]
T = B

σ = [X $\mapsto$ Z → (Nat → Nat) → B, Y $\mapsto$ Z → Nat → Nat]
T = B

## 22.5.2 演習問題

次の項に対する principal type を求めよ。

λx:X. λy:Y. λz:Z. (x z) (y z)

### 回答

X → Y → Z → P
(Z → A) → (Z → B) → Z → P
(Z → B → C) → (Z → B) → Z → C

T = (Z → B → C) → (Z → B) → Z → C
σ = (X $\mapsto$ Z　→ B → C, Y $\mapsto$ Z → B)

σt = λx:Z→B→C. λy:Z→B. λz:Z. (x z) (y z)
$\emptyset \vdash$ σt : T なので (σ,T) は solution である.

(σ', T') が別の solution だったとする。すなわち $\emptyset \vdash$ σ't : T'
σ't = λx:σ'(X).λy:σ'(Y).λz:σ'(Z). (x z) (y z)
inversion lemma より T' = $σ'(X) → σ'(Y) → σ'(Z) → T_1$ とおける。
(x:σ'(X), y:σ'(Y), z:σ'(Z)) $\vdash$ (x z) (y z) : $T_1$ なので inversion lemma より
(x:σ'(X), y:σ'(Y), z:σ'(Z)) $\vdash$ (x z) : $T_2 → T_1$ かつ
(x:σ'(X), y:σ'(Y), z:σ'(Z)) $\vdash$ (y z) : $T_2$ とおける.
さらにそれぞれ inversion lemma を使うと
(x:σ'(X), y:σ'(Y), z:σ'(Z)) $\vdash$ x : $T_3 → T_2 → T_1$
(x:σ'(X), y:σ'(Y), z:σ'(Z)) $\vdash$ z : $T_3$
(x:σ'(X), y:σ'(Y), z:σ'(Z)) $\vdash$ y : $T_4 → T_2$
(x:σ'(X), y:σ'(Y), z:σ'(Z)) $\vdash$ y : $T_4$ とおける.
それぞれ inversion lemma を使うと
σ'(X) = $T_3 → T_2 → T_1$
σ'(Y) = $T_4 → T_2$
σ'(Z) = $T_3$ = $T_4$
よって、σ' = γ' $\circ$ (X $\mapsto T_3 → T_2 → T_1$, Y $\mapsto T_3 → T_2$, Z $\mapsto T_3$) とおける。
以上より
σ' = γ' $\circ$ (Z$\mapsto T_3$, B $\mapsto T_2$, C $\mapsto T_1$) $\circ$ σ となるので $σ \sqsubseteq σ'$.