# : #1
|
A:s
|
, x : A x : A
|
f : (x::A) -> B
|
a : A
|
f a : B[x:=a]
|
|
, x : A b : B
|
((x::A) -> B) : t
|
(\(x::A) -> b) : ((x::A) -> B)
|
|
A:s
|
, x : A B : t
|
((x::A) -> B) : t
|
|
a:A
|
B:s
|
A =ß B |
a : B
|
||
b : B
|
B : s
|
, x : B b : B
|
|
Aij : #
|
|
k > 0, nk 0
|
|
data
C1 A11 ... A1n1
| ... |
Ck Ak1 ... Aknk
: #
|
data
C1 A11 ... A1n1
| ... |
Ck Ak1 ... Aknk
T : #
|
Ci @ T :
Ai1 -> ... -> Aiki -> T
|
|
|
A1 : s1
|
... |
An : sn
|
... |
ej : Aj
|
sig { l1 :: A1 1; ...
lk :: Ak k; ...
ln :: An n }
: #u
|
||||
i is either empty
or "= ei".
|
|
|
|
| (\(x::A) -> B) C =ß B[x := C] |
| { l1 :: A1 = e1; ... ln :: An = en } . lk =ß ek[l1 := e.l1, ... ln := e.ln] |
e : { l1 :: A1 1; ...
lk :: Ak = ek; ...
ln :: An n }
|
| e . lk =ß ek[l1 := e.l1, ... lb := e.ln] |
i is either empty
or "= ei".