blob: 74ef7af6717fec889d8c922015a54a41b9bfba05 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
module Core.Term
import Core.Thinning
import public Data.Fin
-- Definition ------------------------------------------------------------------
public export
data Term : Nat -> Type where
Var : Fin n -> Term n
Set : Term n
Pi : Term n -> Term (S n) -> Term n
Abs : Term (S n) -> Term n
App : Term n -> Term n -> Term n
%name Term t, u, v
-- Weakening -------------------------------------------------------------------
public export
wkn : Term m -> m `Thins` n -> Term n
wkn (Var i) thin = Var (wkn i thin)
wkn Set thin = Set
wkn (Pi t u) thin = Pi (wkn t thin) (wkn u $ keep thin)
wkn (Abs t) thin = Abs (wkn t $ keep thin)
wkn (App t u) thin = App (wkn t thin) (wkn u thin)
export
wknHomo :
(t : Term k) ->
(thin1 : k `Thins` m) ->
(thin2 : m `Thins` n) ->
wkn (wkn t thin1) thin2 = wkn t (thin2 . thin1)
wknHomo (Var i) thin1 thin2 = cong Var (wknHomo i thin1 thin2)
wknHomo Set thin1 thin2 = Refl
wknHomo (Pi t u) thin1 thin2 =
cong2 Pi
(wknHomo t thin1 thin2)
(trans
(wknHomo u (keep thin1) (keep thin2))
(cong (wkn u) $ compKeep thin2 thin1))
wknHomo (Abs t) thin1 thin2 =
cong Abs
(trans
(wknHomo t (keep thin1) (keep thin2))
(cong (wkn t) $ compKeep thin2 thin1))
wknHomo (App t u) thin1 thin2 = cong2 App (wknHomo t thin1 thin2) (wknHomo u thin1 thin2)
|