2024-02-21 01:23:15 +03:00
|
|
|
Kind.comparer
|
2024-03-02 02:40:31 +03:00
|
|
|
: ∀(rec:
|
|
|
|
∀(a: Kind.Term) ∀(b: Kind.Term) ∀(dep: Nat) Bool
|
|
|
|
)
|
|
|
|
∀(a: Kind.Term)
|
|
|
|
∀(b: Kind.Term)
|
2024-02-21 01:23:15 +03:00
|
|
|
∀(dep: Nat)
|
|
|
|
Bool
|
|
|
|
= λrec λa λb λdep
|
2024-03-08 23:39:37 +03:00
|
|
|
use VAR = Kind.var
|
|
|
|
use SUC = Nat.succ
|
|
|
|
use a = (Kind.skip a)
|
|
|
|
use b = (Kind.skip b)
|
|
|
|
use R = ∀(b: Kind.Term) ∀(dep: Nat) Bool
|
|
|
|
use Y = λa.nam λa.ctx λb λdep Bool.true
|
|
|
|
use N = λa λb λdep
|
|
|
|
use R = ∀(dep: Nat) ∀(a: Kind.Term) Bool
|
|
|
|
use Y = λb.nam λb.ctx λdep λa Bool.true
|
|
|
|
use N = λb λdep λa
|
|
|
|
use P = λx ∀(b: Kind.Term) ∀(dep: Nat) Bool
|
|
|
|
use all = λa.nam λa.inp λa.bod λb λdep
|
|
|
|
use P = ∀(dep: Nat) Bool
|
|
|
|
use Y = λb.nam λb.inp λb.bod λdep
|
2024-03-02 02:40:31 +03:00
|
|
|
(Bool.and
|
|
|
|
(rec a.inp b.inp dep)
|
|
|
|
(rec
|
|
|
|
(a.bod (VAR a.nam dep))
|
|
|
|
(b.bod (VAR b.nam dep))
|
|
|
|
(SUC dep)
|
|
|
|
)
|
|
|
|
)
|
2024-03-08 23:39:37 +03:00
|
|
|
use N = λval λdep Bool.false
|
2024-02-21 01:23:15 +03:00
|
|
|
(Kind.if.all b P Y N dep)
|
2024-03-08 23:39:37 +03:00
|
|
|
use lam = λa.nam λa.bod λb λdep
|
|
|
|
use P = ∀(dep: Nat) Bool
|
|
|
|
use Y = λb.nam λb.bod λdep
|
2024-03-02 02:40:31 +03:00
|
|
|
(rec
|
|
|
|
(a.bod (VAR a.nam dep))
|
|
|
|
(b.bod (VAR b.nam dep))
|
|
|
|
(SUC dep)
|
|
|
|
)
|
2024-03-08 23:39:37 +03:00
|
|
|
use N = λval λdep Bool.false
|
2024-02-21 01:23:15 +03:00
|
|
|
(Kind.if.lam b P Y N dep)
|
2024-03-08 23:39:37 +03:00
|
|
|
use app = λa.fun λa.arg λb λdep
|
|
|
|
use P = ∀(dep: Nat) Bool
|
|
|
|
use Y = λb.fun λb.arg λdep
|
2024-03-02 02:40:31 +03:00
|
|
|
(Bool.and (rec a.fun b.fun dep) (rec a.arg b.arg dep))
|
2024-03-08 23:39:37 +03:00
|
|
|
use N = λval λdep Bool.false
|
2024-02-21 01:23:15 +03:00
|
|
|
(Kind.if.app b P Y N dep)
|
2024-03-08 23:39:37 +03:00
|
|
|
use ann = λa.val λa.typ λb λdep Bool.false
|
|
|
|
use slf = λa.nam λa.bod λb λdep
|
|
|
|
use P = ∀(dep: Nat) Bool
|
|
|
|
use Y = λb.nam λb.bod λdep
|
2024-03-02 02:40:31 +03:00
|
|
|
(rec
|
|
|
|
(a.bod (VAR a.nam dep))
|
|
|
|
(b.bod (VAR b.nam dep))
|
|
|
|
(SUC dep)
|
|
|
|
)
|
2024-03-08 23:39:37 +03:00
|
|
|
use N = λval λdep Bool.false
|
2024-02-21 01:23:15 +03:00
|
|
|
(Kind.if.slf b P Y N dep)
|
2024-03-08 23:39:37 +03:00
|
|
|
use ins = λa.val λb λdep Bool.false
|
|
|
|
use ref = λa.nam λa.val λb λdep
|
|
|
|
use P = ∀(dep: Nat) Bool
|
|
|
|
use Y = λb.nam λb.val λdep (String.equal a.nam b.nam)
|
|
|
|
use N = λval λdep Bool.false
|
2024-02-21 01:23:15 +03:00
|
|
|
(Kind.if.ref b P Y N dep)
|
2024-03-08 23:39:37 +03:00
|
|
|
use def = λa.nam λa.val λa.bod λb λdep Bool.false
|
|
|
|
use set = λb λdep
|
|
|
|
use P = ∀(dep: Nat) Bool
|
|
|
|
use Y = λdep Bool.true
|
|
|
|
use F = λval λdep Bool.false
|
2024-02-21 01:23:15 +03:00
|
|
|
(Kind.if.set b P Y F dep)
|
2024-03-08 23:39:37 +03:00
|
|
|
use u60 = λb λdep
|
|
|
|
use P = ∀(dep: Nat) Bool
|
|
|
|
use Y = λdep Bool.true
|
|
|
|
use N = λval λdep Bool.false
|
2024-02-21 01:23:15 +03:00
|
|
|
(Kind.if.u60 b P Y N dep)
|
2024-03-08 23:39:37 +03:00
|
|
|
use num = λa.val λb λdep
|
|
|
|
use P = ∀(dep: Nat) Bool
|
|
|
|
use Y = λb.val λdep (U60.equal a.val b.val)
|
|
|
|
use N = λval λdep Bool.false
|
2024-02-21 01:23:15 +03:00
|
|
|
(Kind.if.num b P Y N dep)
|
2024-03-08 23:39:37 +03:00
|
|
|
use op2 = λa.opr λa.fst λa.snd λb λdep
|
|
|
|
use P = ∀(dep: Nat) Bool
|
|
|
|
use Y = λb.opr λb.fst λb.snd λdep
|
2024-03-02 02:40:31 +03:00
|
|
|
(Bool.and (rec a.fst b.fst dep) (rec a.snd b.snd dep))
|
2024-03-08 23:39:37 +03:00
|
|
|
use N = λval λdep Bool.false
|
2024-02-21 01:23:15 +03:00
|
|
|
(Kind.if.op2 b P Y N dep)
|
2024-03-08 23:39:37 +03:00
|
|
|
use mat = λa.nam λa.x λa.z λa.s λa.p λb λdep
|
|
|
|
use P = ∀(dep: Nat) Bool
|
|
|
|
use Y = λb.nam λb.x λb.z λb.s λb.p λdep
|
2024-03-02 02:40:31 +03:00
|
|
|
(Bool.and
|
|
|
|
(rec a.x b.x dep)
|
|
|
|
(Bool.and
|
|
|
|
(rec a.z b.z dep)
|
|
|
|
(Bool.and
|
|
|
|
(rec
|
|
|
|
(a.s (VAR (String.concat a.nam "-1") dep))
|
|
|
|
(b.s (VAR (String.concat b.nam "-1") dep))
|
|
|
|
(SUC dep)
|
|
|
|
)
|
|
|
|
(rec
|
|
|
|
(a.p (VAR a.nam dep))
|
|
|
|
(b.p (VAR b.nam dep))
|
|
|
|
(SUC dep)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
2024-03-08 23:39:37 +03:00
|
|
|
use N = λval λdep Bool.false
|
2024-02-21 01:23:15 +03:00
|
|
|
(Kind.if.mat b P Y N dep)
|
2024-03-08 23:39:37 +03:00
|
|
|
use txt = λa.txt λb λdep
|
|
|
|
use P = ∀(dep: Nat) Bool
|
|
|
|
use Y = λb.txt λdep (String.equal a.txt b.txt)
|
|
|
|
use N = λval λdep Bool.false
|
2024-02-21 01:23:15 +03:00
|
|
|
(Kind.if.txt b P Y N dep)
|
2024-03-08 23:39:37 +03:00
|
|
|
use hol = λa.nam λa.ctx λb λdep Bool.false
|
|
|
|
use var = λa.nam λa.idx λb λdep
|
|
|
|
use P = ∀(dep: Nat) Bool
|
|
|
|
use Y = λb.nam λb.idx λdep (Nat.equal a.idx b.idx)
|
|
|
|
use N = λval λdep Bool.false
|
2024-02-21 01:23:15 +03:00
|
|
|
(Kind.if.var b P Y N dep)
|
2024-03-02 02:40:31 +03:00
|
|
|
(~a
|
|
|
|
P
|
|
|
|
all
|
|
|
|
lam
|
|
|
|
app
|
|
|
|
ann
|
|
|
|
slf
|
|
|
|
ins
|
|
|
|
ref
|
|
|
|
def
|
|
|
|
set
|
|
|
|
u60
|
|
|
|
num
|
|
|
|
op2
|
|
|
|
mat
|
|
|
|
txt
|
|
|
|
hol
|
|
|
|
var
|
|
|
|
b
|
|
|
|
dep
|
|
|
|
)
|
2024-02-21 01:23:15 +03:00
|
|
|
(Kind.if.hol b R Y N dep a)
|
2024-03-02 02:40:31 +03:00
|
|
|
(Kind.if.hol a R Y N b dep)
|