ρ ρ
s ::= sd sd ::= K x sk xotse se sk ::= K (sk x) se ::= x K se se se x = se xotse se xotse se x sp se se l lo sp ::= x l K sp x(x ) l ::= char number lo ::= se (+ = = < > ) se se se ot ::= τ ɛ τ ::= α T τ ot T
( a.a a) b b a.a a
( a.r a r) r b r
ρ ρ ρ
a.a X
α α
a a a X X X a a a a
S γ
i.(d i spine d i ) C(d 1, d 2,...,d n ) spine (...(C, d 1), d 2),...), d n) l spine l
ˆ
e ::= x K e ee λx.e xote e xote e x p e e l lo p ::= Kx 1 x n l ::= char number lo ::= e (+ = = < > ) e ot ::= τ ɛ se pc e
pc i. x, se, sp 2 sp n.(alt i xsp 2 sp n se alt i = sp 2 sp n [x/x 1 ]se x / FV(sp 2,...,sp n )) x 2 x n alt 1 alt m sf pc e x 1 x 2 x n alt 1 alt m sf pc e
ag K i sp i sp i x sp j
i, j. sp j, sp j, sf j. (ag (K sp 1 ) sp 1 sf 1 (K sp p ) sp p sf p x xx 2 x n sp 1 sp 1 sf 1 pc f sp p sp p sf p sde f alt K x f ) sde f pc de f x 1 x 2 x n ag 1 ag m sde f pc x 1 alt 1 alt m de f alt lsp 2 sp n se alt sp 2 sp n se x 2 x n alt sf pc e sf pc f x 1 x 2 x n alt sf pc (l = x 1 ) e f = l = x 1
p c p xsp 2 sp n c x sp 2 sp n (K sp) sp 2 sp n c (K sp ) sp 2 sp n
ag (sp 1 se 1 ) (sp m se m ) sp 1 c c sp m sp m c sp m+1 f x 1 x n alt f x 1 x n ag f pc e x 1 x n ag alt f pc e [] se 1 pc e 1 [] ([] se 1 ) ([] se m ) f pc e 1 sf pc f [] alt sf pc f sf pc f se [] sf pc f sf pc f se ([] se 1 ) ([] se m ) sf pc f
b b a.t(a) T(A) T(B)
a = (x 1 = e 1 )...(x n = e n ) f TS(SC(DG(x 1 = e 1,...,x n = e n ))) {g 1,...,g m } split(a) g 1... g m f DG SC TS e dep e split e {g 1...g n } g i g i {g 1...g i 1 } g g SC
V
τ id τ V α [τ/α] τ V α V τ [τ/α] α / V TV(τ) τ U v V Uτ U Uv V (τ τ ) UU (v v ) V < >
TA e : τ V A e V T τ e A x, x : τ x x τ σ K = γ.( α. β.τ) τ K [α/τ] α τ Gen(A, τ) τ A τ e α e f f K e α Uτ α α / FV(UTA)
σ ::= α.σ τ, ρ ::= α τ τ ρ e, f ::= x ef λx ot.e Ke x = e f xot= e f y (K x) e (x : α.τ) A β A x : [α/β]τ V T(A x, x : α) e : τ V TA λx ot.e : Tα τ V α TA e : τ V T TA f : τ V T τ U (τ α) V α UT TA ef: Uα V TA e : τ V σ = Gen(TA, τ) T (TA x, x : σ) f : ρ V T TA ( x = e f ) : ρ V T(A x, x : α) e : τ V Tα U τ V σ = Gen(UTA, Uτ) T (UTA x, x : σ) f : ρ V T UTA ( xot= e f ) : ρ V σ K = γ.( α. β.τ) τ α, β, γ TA e : ρ V ρ U τ (V {α}) α / TV(UTA, Uτ ) UTA (K e) : Uτ V σ K = γ.( α. β.τ) τ α, β, γ T(A x, x : τ) e : τ e (V {β}) β / TV(TA, τ e, Tα) T TA y : τ y V T (Tτ τ e ) U τ y δ δ UT TA ( y (K x) e) : Uδ V TA e : τ V τ U T UTA e : τ V τ U U T UTA e + e : V TA e : τ V τ U T UTA e : τ V τ U U T UTA e = e : V
x e β e TA τ e Tα λ
λ λ λ λ kn
kp ::= kd ke kd ::= kn x = ke ke ::= x K ke ke ke kn x ke i x K ke ke l lo x ke x K ke ke ke l lo kn x ke i λ ke i i
kn x kd e l kp kd e kp kd 0 e l kd ke v fv(ke) kn kd 0 λx.e l kd (kn vx= ke) kn v kd 0 (x 2 = e 2 ) (x n = e n ) [x 1 /kn]e l kd ke kd e 1 l kd ke kn kd 0 (x 1 = e 1 ) (x n = e n ) e l kd (kn = ke ) ke
kd 0 (x 2 =[x 1 /kn]e 2 ) (x n =[x 1 /kn]e n ) [x 1 /kn]e l kd ke kd [x 1 /kn]e 1 l kd ke kn kd 0 (x 1 = e 1 ) (x n = e n ) e l kd (kn = ke ) ke λ λ λ i.(alt i K i x i e i alt i K i kn i ( j.e s j ) kn i kd i 1 e i l kd i ke i ) kd n e s l kd s ke s kd s e d l kd d ke d kd 0 e s alt 1 alt n e d l kd d (kn 1 x 1 = ke 1 ) (kn n x n = ke n ) ke s alt 1 alt n ke d
: :
TA e : τ V A e V T τ e T τ f T f τ f (α α) (β β) (β β) A : (α α) (β β) (β β) V T f A f : τ f V T f ((α α) (β β) (β β)) U f τ f α 1 α 1 U f T f A f : α 1 V T g (α 1 ) U g τ g α 2 α 2 U g T g U f T f A (( f ) g) : U g T g U f T f α 2 T g (U f T f A) g : τ g V mod V α 1 (β β) (β β) α 1 τ f τ f α α U f α 1 (β β) (β β) α 2
A : (α α) (β β) (β β) V T f A f : τ f V T f ((α α)) U f τ f U f T f A f : U f (β β) (β β) V T g U f T f (α α) U g τ g U g T g U f T f A (( f ) g : U g T g U f T f (β β) T g (U f T f A) g : τ g V mod V T f A f : τ f V T f ((β β)) U f τ f T g U f T f A g : τ g T g U f (α α) U g τ g U g T g U f T f A (( f ) g : U g T g U f T f (β β) mod V T f A f : τ f V T f ((β γ)) U f τ f T g U f T f A g : τ g V T g U f (α γ) U g τ g U g T g U f T f A (( f ) g : U g T g U f T f (β γ) mod V τ g α α α γ τ f τ g α T f A f : τ f V T g U f T f A g : τ g V (α γ) =τ g τ g =[α/α ]τ g α T f (τ g) U f τ f U g T g U f T f A (( f ) g : U g T g U f T f (τ g ) mod V
α α β β τ f
T f A f : τ f V T g (T f A) g : τ g V (α γ) =τ g τ g =[α/α ]τ g α T f (τ g) U f τ f U f τ f = τ f 1 τ f 2 FTV(τ f 1 )= τ f 1 A (( f ) g : T g U f T f (τ g ) mod V τ f
σ ot = ɛ σ
(λ(x : α. β.τ).e) f ( unk = λ(k x).x λ f.[ f /(unk f )]e) (Kf) K :.( α. β.τ) τ K K λ(x : α. β.τ).e unk = λ(k x).x λ f.[ f /(unk f )]e K :.( α. β.τ) τ K ef e (Kf) e : τ k ρ K :.( α. β.τ) τ K unk = λ(k x).x λ f.[ f /(unk f )]e K :.( α. β.τ) τ K e (K f) e : τ k ρ K :.( α. β.τ) τ K λ(x : α. β.τ).e unk K
(x : τ) x : τ (V {β}) β / TV(A, τ, α) A λ(k x).x : τ K τ V σ = Gen(τ K τ) (unx : σ) λ f.[ f /(unk f )]e : V A unk = λ(k x).x λ f.[ f /(unk f )]e : V x τ β β (τ K τ) α Gen(τ K τ) α.(τ K τ) σ = α.(τ K τ) (x : τ) x : τ V β = A λ(k x).x : τ K τ V T e (unk : α.τ K τ, f : α 2 )A [ f /(unk f )]e : T e (A, unk : α.τ K τ) λ f.[ f /(unk f )]e : T e A unk = λ(k x).x λ f.[ f /(unk f )]e : V [ f /(unk f )]e f unk f unk α.τ K τ f α 2 τ K τ unk f f e f τ K e Ke (unk : α.τ K τ, f : α.τ)a e : τ V (unk : α.τ K τ, f : α 2 )A [ f /(unk f )]e : τ V σ = α.(τ K τ)
T(A, f : α.τ) e : τ e V TA λ( f : α.τ)e : α.τ τ e V T e (A, unk : α.(τ K τ), f : α.τ) e : τ e V T e (A, unk : α.(τ K τ), f : α 2 ) (x : τ) x : τ V β = A λ(k x).x : τ K τ V [ f /(unk f )]e : τ e V T e (A, unk : α.(τ K τ)) λ f.[ f /(unk f )]e : τ K τ e V T e A unk = λ(k x).x λ f.[ f /(unk f )]e : τ K τ e V unk = λ(k x).x λ f.[ f /(unk f )]e K :, ( α, β.τ) τ K f : τ K T(A, unk : α.(τ K τ), f : α.τ) e : τ e V β = TA unk = λ(k x).x λ f.[ f /(unk f )]e : τ K τ e V unk τ K α. β.τ β e (K f) e : τ k ρ K :.( α. β.τ) τ K
T f (T e A) f : τ f V T e A e : ( α.τ) ρ V U f τ f τ V {α} α / TV(U f T f T e A) UU f T f T e A ef: U f T f T e ρ V T f (T e A) f : τ f V T e A e : τ K ρ V U f T f (τ K ρ) U (τ K δ) U f τ f τ V {α} α / TV(U f T f T e A) U f T f T e A (K f) : U f τ k V δ UU f T f T e A e (K f) : Uδ V e (K f) T e A e : τ K ρ V T f (T e A) f : τ f V U f τ f τ V {α} α / TV(U f T f T e A) U f T f (τ K ρ) U (τ K δ) δ UU f T f T e A e (K f) : Uδ V τ K τ K τ K ef T e A e : ( α.τ) ρ V T f (T e A) f : τ f V U f τ f τ V {α} α / TV(U f T f T e A) U f T f ρ U δ δ UU f T f T e A ef: Uδ V U f T f ρ δ β
a e : τ ρ TV(τ) = a b xe λd. (d = τ) ad bd e : τ
p ::= x(y) d d dte
lo ::= e e eee pc
i.(alt i x i (y i ) sp i se i alt i sp i [x i /x 1, y i /x 1 ]se i ) z alt d pc e d pc d z 1 z alt d pc z 1 e d p c p xp 2 p n c x p 2 p n (K p) p 2 p n c (K p ) p 2 p n x(y) p 2 p n c x (y ) p 2 p n x i y i [x i /x 1, y i /x 1 ]se i xkar = x 1 xkdr = x 1 [x i /xkar, y i /xkdr]se i
α α α break τ τ τ ρ τ ρ break τ : τ ( ρ.(ρ τ, ρ) τ) make τ : ( ρ.(ρ τ, ρ) τ) τ make τ (break τ e)=e τ break τ τ make τ make/break break τ (make τ e)=e
make τ make τ make τ (ρ, f : ρ τ, g : ρ) fg make τ make τ break τ inl inr break τ x = x (inl(ρ, x, x)) (inr(x)) ρ τ break τ
TA c : τ c V T T(A, c : (β τ c, β) t : τ t (V β) T T TA e : τ e V τ t U τe V β β / TV(UTA, Uτ t ) UT T TA c t e : Uτ e V τ id τ V α [τ/α] τ V α V τ [τ/α] α / V TV(τ) τ U v V Uτ U Uv V (τ τ ) UU (v v ) V V c c β τ c β β
(x : (β τ, β)) A A x : β τ V (x : (β τ, β)) A A x: β V β
x 1 ot 1 = e 1 e ot x 1 x 1 σ
x : α. β.τ = e f x e f α. β.τ K unk τ = α. β.τ e τ Ke x unk x K σ K = γ.( α. β.τ) τ K α β γ unk unk = λ(k f). f x = K ([x/unk x ]e) [x/unk x ] f K unk (A) T unk A λ(k f). f : τ unk V σ unk = Gen(T unk A, τ unk ) (B) T i T unk A unk, unk : σ unk x = K ([x/unk x ]e) [x/unk x ] f : τ i V T i T unk A unk = λ(k f). f x = K ([x/unk x ]e) [x/unk x ] f : τ i V
T, U τ, ρ T unk τ unk (A) σ K = γ 1.( α 1. β 1.τ 1 ) τ K 1 A f, f : τ 1 f : τ 1 V {β 1 } β 1 / TV(A, τ 1, α ) (A) A λ(k f). f : τ K 1 τ 1 V β 1 / TV(A, τ 1, α ) β 1 β β = T unk = τ unk = τ1 K τ 1 (A) β = σ unk = Gen(A, τ K 1 τ 1 ) (B) T i A unk, unk : σ unk x = K ([x/unk x ]e) [x/unk x ] f : τ i V T i A unk = λ(k f). f x = K ([x/unk x ]e) [x/unk x ] f : τ i V Gen(A, τ K 1 τ 1) γ 1.τ K 1 ( α 1.τ 1 ) σ unk β = (B) T i A unk, unk : γ 1.τ1 K ( α 1.τ 1 ) x = K ([x/unk x ]e) [x/unk x ] f : τ i V T i A unk = λ(k f). f x = K ([x/unk x ]e) [x/unk x ] f : τ i V T i τ i (B) (C) T x A unk,x, unk :: γ 1.τ K 1 (D) T f U x T x A unk,x, unk : γ 1.τ K 1 ( α 1.τ 1 ), x : α 2 K [x/unk x ]e : τ x V T x α 2 U x τ x σ x = Gen(T x A, U x τ x ) (B) T UTA unk, unk : γ 1.( α 1.τ 1 ) τ K 1 ( α 1.τ 1 ), x : σ [x/unk x ] f : τ f V x = K ([x/unk x ]e) [x/unk x ] f : τ i V T x τ x
(C) σ K = γ 2.( α 3.τ 3 ) τ K 3 (E) T e A unk,x, unk : γ 1.( α 1.τ 1 ) τ K 1, x : α 2 [x/unk x ]e : τ e V U τ e e τ2 V {α 3 } α 3 / TV(U e T e A unk, unk : γ 1.( α 1.τ 1 ) τ1 K ) (C) T x A unk,x, unk :: γ 1.τ K 1 ( α 1.τ 1 ), x : α 2 K [x/unk x ]e : τ x V (E) T e A unk,x, unk : γ 1.τ1 K ( α 1.τ 1 ), x : α 4, γ 4.τ 4 e : τ e V (E) [α 2 /τ 4 ]T e A unk, unk : γ 1.τ1 K ( α 1.τ 1 ) [x/unk x ]e : τ e V (E) K unk (E) (E) σ K = γ 2.( α 3.τ 3 ) τ K 3 [α 2 /τ 4 ]T e A unk,x, unk : γ 1.τ K 1 ( α 1.τ 1 ), x : α 4, γ 4.τ 4 e : τ e V U τ e e τ2 V {α 3 } α 3 / TV(U e T e A unk, unk : γ 1.( α 1.τ 1 ) τ1 K ) (C) T x A unk,x, unk : γ 1.τ K 1 ( α 1.τ 1 ), x : α 2 K [x/unk x ]e : τ K 3 V unk e α 3 γ 1.τ K 1 ( α 1.τ 1 ) T x σ K = γ 2.( α 3.τ 3 ) τ K 3 [α 2 /τ 4 ]T e A x, x : α 4, γ 4.τ 4 e : τ e V U τ e e τ2 V {α 3 } α 3 / TV(U e T e A) (C) [α 2 /τ K 4 ]T e U e A unk,x, unk : γ 1.τ K 1 ( α 1.τ 1 ), x : α 2 K [x/unk x ]e : τ K 3 V (C) σ K = γ 2.( α 3.τ 3 ) τ K 3 [α 2 /τ4 K U ]T e A x, x : α 4, γ 4.τ 4 e : τ e V τ e e τ2 V {α 3 } α 3 / TV(U e T e A) [α 2 /τ K 4 ]T e α 2 U x τ 3 σ x = Gen([α 2 /τ 4 ]T e A, U x τ K 3 ) (D) T f U x [α 2 /τ 4 ]T e A unk,x, unk : γ 1.τ K 1 (B) T UTA unk, unk : γ 1.τ K 1 ( α 1.τ 1 ) ( α 1.τ 1 ), x : σ [x/unk x ] f : τ f V x = K ([x/unk x ]e) [x/unk x ] f : τ i V
[α 2 /τ 4 ]T e α 2 τ 3 τ K 3 σ x γ 3.τ 3 σ K = γ 2.( α 3.τ 3 ) τ K 3 [α 2 /τ K 4 ]T e A x, x : α 4, γ 4.τ 4 e : τ e V U τ e e τ2 V {α 3 } α 3 / TV(U e T e A) (D) T f [α 2 /τ K 4 ]T e A unk,x, unk : γ 1.τ K 1 ( α 1.τ 1 ), x : γ 1.τ K 3 [x/unk x ] f : τ f V (B) T UTA unk, unk : γ 1.τ K 1 ( α 1.τ 1 ) x = K ([x/unk x ]e) [x/unk x ] f : τ i V (D) T f τ f T f [α 2 /τ K 4 ]T e A unk,x, unk : γ 1.τ K 1 ( α 1.τ 1 ), x : α 5, γ 5.τ 5 f : τ f V (D) T f [α 2 /τ K 4 ]T e A unk,x, unk : γ 1.τ K 1 ( α 1.τ 1 ), x : γ 1.τ K 3 [x/unk x ] f : τ f V T UT τ i σ K = γ 2.( α 3.τ 3 ) τ K 3 [α 2 /τ 4 ]T e A x, x : α 4, γ 4.τ 4 e : τ e V U τ e e τ2 V {α 3 } α 3 / TV(U e T e A) T f [α 2 /τ K 4 ]T e A unk,x, unk : γ 1.( α 1.τ 1 ) τ K 1, x : α 5, γ 5.τ 5 f : τ f V (B) T f [α 2 /τ 4 ]T e A unk, unk : γ 1.τ K 1 ( α 1.τ 1 ) x = K ([x/unk x ]e) [x/unk x ] f : τ f V T i τ i T f [α 2 /τ K 4 ]T e τ f K unk K unk T e A x, x : α 4, γ 4.τ 4 e : τ e V σ K = γ 1.( α 1.τ 1 ) τ K 1 U τ e e τ1 V {α 3 } α 3 / TV(U e T e A) σ K = γ 2.( α 2.τ 2 ) τ K 2 T f [α 2 /τ K 2 ]T e A x, x : α 5, γ 5.τ 1 f : τ f V β = T f [α 2 /τ 4 ]T e A unk, unk : γ 1.τ K 1 ( α 1.τ 1 ) x = K ([x/unk x ]e) [x/unk x ] f : τ f V
U T e A x, x : α.τ e : τ e V τ e e τ1 V {α 3 } α 3 / TV(U e T e A) T f [α 2 /τ 2 ]T e A x, x : ατ f : τ f V β = T f [α 2 /τ 4 ]T e A x : α. β.τ = e f : τ f V d d dte
> 0
make τ
A e f : α β Bool A e : α String ρ τ ρ : α β Bool : α String
α α Bool α β Bool
ρ τ ρ τ ρ ρ ρ ρ ρ ρ
α α
y = m x + b y = m x + b
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
x = 5 x =
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
kd kp opti kp
kp opti kp kd [kn/kn ]kp kn opti kp (kn x = kn x) kd kp opti kp kn / ACT(kp) kd kp opti kp kd 1 kd kp opti kp kp kn kp kn ACT(kp) (u o)/u u o
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++ + + ++ + + + ++ + + +++ + + +
α ρ τ [α/ρ]τ τ TV(τ) A x, x : τ A x τ
σ ::= α.σ τ τ, ρ ::= α T τ 1...τ n τ ρ e, f, g ::= v ef x = e f x = e f e (K(x 1,...,x n )) f e (x, y) f g e f v ::= λx.e K(v 1,...,v n ) v v sv sv ::= x sv v
e v v sv e A e : τ e e e e A e : τ e v v x = x fg xfg x = x [x /x] f [x /x]g
e (x, y) f g x f e y f e x = e ( x (x, y ) f g) x [x /x, y /x] fg σ τ σ τ σ τ α 1 α n.τ ρ FV(τ) = τ = ρ τ Gen Gen(τ, A) = α 1...α n.τ {α 1...α n } = TV(τ) \ TV(A)
e f e e ef e f e e ve ve (λx.e) v [x/v]e e e x = e f x = e f e e x = e f x = e f x = v f [x/v] f f f x = v f x = v f x FV(v f ) x / FV(v f ) x = v v f x = v [x/v]v f x = v v f v f e e ( e (K(x 1,...,x n )) f ) e (K(x 1,...,x n )) f ( (K(v 1,...,v n )) (K(x 1,...,x n )) e) [x 1 /v 1 ] [x n /v n ]e e e e f e f e e v e v e A v : τ ρ A v : τ TV(τ) = (v v ) v vv A v : τ ρ A v : τ τ = τ (v v ) v v v e j e j K(v 1,...,v j 1, e j, e j+1,...,e m ) K(v 1,...,v j 1, e j, e j+1,...,e m ) K(v 1,...,v m ) e K(v 1,...,v m, e) e e e (x, y) f g e (x, y) f g (K(v 1,...,v m )) (x, y) e f [x/k(v 1,...,v m 1 ), y/v m ]e v = K(v 1,...,v m ) v (x, y) e f f
A e : τ x : σ A A x : τ σ τ A e : ρ τ A ef: τ A f : ρ A x, x : Gen(τ, A) e : τ A e : τ A x, x : Gen(τ, A) f : τ A ( x = e f ) : τ A ( x = e f ) : τ A x, x : Gen(τ, A) f : τ A x, x : ρ e : τ A (λx.e) : ρ τ A e : τ e A x,y, x : α τ e, y : α f : τ A g : τ α / TV(A, τ, τ e ) A ( e (x, y) f g) : τ A g : τ g τ g A f : τ f τ f Gen(τ f τ f ) τ g τ g TV(τ g, τ g)= A g f : τ f τ f (( α 1. β 1.τ 1),...,( α n. β n.τ n)) τ K τ K K i.(a e i : [β i /ρ i ]τ i ) A (K(e 1,...,e n )): τ K i(α i / TV(A)) i 1...m.(A e i : [β i /ρ i ]τ i ) m < n i(α i / TV(A)) A (K(e 1,...,e m )): [β m+1 /ρ m+1 ]τ m+1 ( ([β n /ρ n ]τ n τ K ) ) A x1 x n, x 1 : [α 1 /ρ 1 ]τ 1,...,x n : [α n /ρ n ]τ n e : τ e i.(β i / TV(A, τ e, ρ i )) A f : τ K A ( f (K(x 1,...,x n )) e) : τ e A e : τ e e e A e : τ e e A e : τ A e : τ e e e A e : τ
x A ef: τ A e : ρ τ A f : ρ e e e e e e ef e f e v e f f f f f f f v e f v e f e f f v f v e v e λx.g (λx.g) v f [x/v f ]g v e K(v 1,...,v n ) K(v 1,...,v n ) v f K(v 1,...,v n, v f ) v e (v v ) v f v (v v ) vv f (v v ) v v f v e v e v f A ( x = e f ) : τ A e : τ e e e e v x = v f [x/v] f e e e x = e f x = e f A ( x = e f ) : τ A x, x : Gen(τ, A) e : τ A x, x : Gen(τ, A) f : τ e e e f f f e v e f f x = e f x = e f f x FV( f ) x = v e f x = v e [x/v] f f x / FV( f ) x = v e f f e e e x = e f x = e f
λx.e A ( e (x, y) f g) : τ A e : τ e e e e e K(v 1,...,v n ) e e e e (x, y) f g e (x, y) f g e e K(e 1,...,e n ) K(v 1,...,v n ) (x, y) f g [x/k(v 1,...,v n 1 ), y/v n ] f e e v e v e (x, y) f g g A e f : τ f τ f A e : τ e τ e A f : τ f τ f e e e e e e e f e f e v e f f f f f f v e f v e f f v f v e v f A K(e 1,...,e n ) : τ e i K(e 1,...,e n ) A K(e 1,...,e n ) : τ e i e j A e j : [β j /ρ j ]τ j e j e j K(e 1,...,e j,...,e n ) K(e 1,...,e j,...,e n) A ( f (K(x 1,...,e n ))
e) : τ A f : τ K K : (( α 1. β 1.τ 1),...,( α n. β n.τ n)) τ K f f f f f f f (K(x 1,...,x n )) e f (K(x 1,...,x n )) e f f K(v 1,...,v n) v 1,...,v n ( K(v 1,...,v n) (K(x 1,...,x n )) e) [x 1 /v 1 ] [x n/v n]e A e : τ e e A e : τ e e ef: τ ef e f A e : ρ τ A f : ρ e : ρ τ e f : τ (λx.e) v [x/v]e A (λx.e) v : τ A (λx.e) : ρ τ A v : ρ A x, x : ρ e : τ A [x/v]e : τ
x = v f [x/v] f A ( x = v e) : τ A v : τ A x, x : Gen(τ, A) f : τ Gen(τ, A) α 1...α n.τ {α 1...α n } = TV(τ) \ TV(A) [x/v] f : τ x = v f x = v [x/v] f A x = v f : τ A x, x : Gen(τ, A) v : τ A x, x : Gen(τ, A) f : τ A x, x : Gen(τ, A), y : Gen(τ, A) [x/y] f : τ A x, x : Gen(τ, A) [y/v][x/y] f : τ y v [y/v][x/y] =[x/v] A x, x : Gen(τ, A) [x/v] f : τ A x = v [v/x] f : τ x = v f f A x = v f : τ A x, x : Gen(τ, A) f : τ x / FV( f ) A f : τ A ( (K(v 1,...,v n )) (K(x 1,...,x n ) e) : τ e
A x1,...,x n, x 1 : [α 1 /ρ 1 ]τ 1,...,x n : [α n /ρ n ]τ n e : τ e A K(v 1,...,v n ) : τ K i(β / TV(A, τ e, ρ i )) i.(a e i : [β i /ρ i ]τ i ) i.(α i / TV(A)) i(β i / TV(A, τ e, ρ i )) A x1,...,x n, x 1 : [α 1 /ρ 1 ][β 1 /ρ 1]τ 1,...,x n : [α n /ρ n ][β n /ρ n]τ n e : τ e α α τ K i.(a e i : [α i /ρ i ][β i /ρ i ]τ i ) A [x 1 /v 1 ] [x n /v n ]e : τ e (K(v 1,...,v m )) (x, y) f g [x/k(v 1,...,v m 1 ), y/v m ] f A (K(v 1,...,v m )) (x, y) f g : τ A x,y, x : α τ, y : α v : τ A K(v 1,...,v m ) : τ α i 1...m.(A v i : [β i /ρ i ]τ i ) A K(v1,..., v m 1 ) : [β m /ρ m ]τ m τ A v m : [β m /ρ m ]τ m
A [x/k(v 1,...,v m 1 ), y/v m )] f : τ v (x, y) f g g A v (x, y) f g : τ A g : τ A (v v ) v : τ A (v v ) : ρ τ A v : ρ TV(ρ) = A v : τ α τ α Gen(ρ τ) τ α τ α TV(τ α )= ρ τ Gen(ρ τ) =ρ τ ρ τ τ α τ α ρ τ α τ τ α τ = τ α τ = τ α A vv : τ (v v ) v v v A (v v ) v : τ A (v v ) : ρ τ A v : ρ
A (v v ) : ρ τ A v : ρ τ A v v : τ A K(v 1,...,v m ) e : τ A K(v 1,...,v m ) : ρ τ A e : ρ A K(v 1,...,v m ) : [β m+1 /ρ m+1 ]τ m+1 ([β m+2/ρ m+2 ]τ m+2 τ K ) τ =([β m+2 /ρ m+2 ]τ m+2 τ K) ρ =[β m+1 /ρ m+1 ]τ m+1 A K(v1,..., v m, e) : τ A x, x : α 1...α n.τ e : τ x / Dom(A) A v : τ {α 1...α n } TV(A) = A [x/v]e : τ A x, x : α 1...α n.τ e : τ A x, x : σ e : τ x / FV(e) A e : τ A x, x : σ e : τ A e : τ x : σ A y / FV(e, A) A, y : σ [x/y]e : τ A e : τ A x,y, x : α τ, y : α e : τ α / TV(A, τ, τ, ρ ) A v : ρ τ A v : ρ A [x/v, y/v ]e : τ ρ A x,y, x : α τ, y : α v : τ
A v : τ K K : (( α 1. β 1.τ 1 ) ( α n. β n.τ n)) τ K v K(v 1,...,v n ) v 1,...,v n τ K K A e : τ K.(α / TV(τ K )) α / TV(A) A e : [α/ρ]τ A e : τ A x : τ x : σ A σ τ σ A α / A α / TV(σ) α τ α TV(τ) σ τ σ α τ ρ [α/ρ]τ σ [α/ρ]τ A x : [α/ρ]τ α / TV(τ) [α/ρ]τ = τ σ [α/ρ]τ A x : [α/ρ]τ A ef: τ A e : τ τ A f : τ A e : [α/ρ]τ [α/ρ]τ A f : [α/ρ]τ A ef: [α/ρ]τ
A (λx.e) : τ τ A x, x : τ e : τ α / TV(τ ) α / A x, x : τ A x, x : τ [α/ρ]τ α / TV(τ ) [α/ρ]τ = τ A x, x : [α/ρ]τ [α/ρ]τ A (λx.e) : [α/ρ](τ τ) α TV(τ ) A x, x : [α/ρ]τ [α/ρ]τ A (λx.e) : [α/ρ](τ τ) A ( e (x, y) f g) : τ A e : τ e A x, x : β τ e, y : β f : τ A x g : τ A x, x : β τ e, y : β f : τ α TV(β) A x, x : β [α/ρ]τ e, y : β f : [α/ρ]τ A g : [α/ρ]τ A ( e =(x, y) f g) : [α/ρ]τ A g f : τ f τ f α / TV(A) K.(α / TV(τ K ))
A g : τ g τ g A f : τ f τ f Gen(τ f τ f ) τ g τ g TV(τ g )= A f : [α/ρ](τ f τ f ) A f : ([α/ρ]τ f [α/ρ]τ f ) A g : [α/ρ](τ g τ g) A g : ([α/ρ]τ g [α/ρ]τ g) TV([α/ρ]τ g )= α TV(τ f, τ f ) τ f, τ f α TV(τ f, τ f ) α / TV(τ f, τ f ) Gen(τ f τ f ) τ g τ g TV(τ g, τ g) = α / TV(τ f, τ f ) Gen([α/ρ]τ f [α/ρ]τ f ) [α/ρ]τ g [α/ρ]τ g A f g : [α/ρ]τ f [α/ρ]τ f A f g : [α/ρ](τ f τ f ) A (K(e 1,...,e n )): τ K α / TV(τ K ) α / TV(τ K ) [α/ρ]τ K = τ K A (K(e 1,...,e n )): [α/ρ]τ K
A x, x : τ e : τ α / TV(A) α TV(τ ) A x, x : [α/ρ]τ e : [α/ρ]τ A x, x : τ e : τ A e : τ α / TV(A) β / TV(A, τ) A e : [α/β]τ
`
í
ß λ
ˆ
nd