123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- module Term (Gnd : Set)(U : Set)(El : U -> Set) where
- open import Basics
- open import Pr
- open import Nom
- import Kind
- open module KindGUEl = Kind Gnd U El
- import Loc
- open module LocK = Loc Kind
- import Cxt
- open module CxtK = Cxt Kind
- data Jud : Set where
- Term : Kind -> Jud
- Args : Kind -> Gnd -> Jud
- Head : Jud
- data _[_]-_ : Loc -> Jud -> Kind -> Set where
- [_] : {C : Kind}{L : Loc}{Z : Gnd} ->
- L [ Args C Z ]- C -> L [ Term C ]- Ty Z
- fn : {C : Kind}{L : Loc}(A : U){K : El A -> Kind} ->
- ((x : El A) -> L [ Term C ]- K x) -> L [ Term C ]- Pi A K
- \\ : {C : Kind}{L : Loc}{S T : Kind} ->
- (L * S) [ Term C ]- T -> L [ Term C ]- (S |> T)
- _^_ : {C : Kind}{L : Loc}{Z : Gnd}{A : U}{K : El A -> Kind} ->
- (x : El A) -> L [ Args C Z ]- K x -> L [ Args C Z ]- Pi A K
- _&_ : {C : Kind}{L : Loc}{S T : Kind}{Z : Gnd} ->
- L [ Term C ]- S -> L [ Args C Z ]- T -> L [ Args C Z ]- (S |> T)
- nil : {C : Kind}{L : Loc}{Z : Gnd} -> L [ Args C Z ]- Ty Z
- _$_ : {C : Kind}{L : Loc}{T : Kind}{Z : Gnd} ->
- L [ Head ]- T -> L [ Args C Z ]- T -> L [ Term C ]- Ty Z
- ` : Nom -> {S : Kind}{L : Loc} -> L [ Head ]- S
- # : {L : Loc}{S : Kind} -> L ! S -> L [ Head ]- S
- infixr 90 _^_ _&_
- infix 40 _[_]-_
- Good : Cxt -> {L : Loc}{j : Jud}{T : Kind} -> L [ j ]- T -> Pr
- Good G [ c ] = Good G c
- Good G (fn A f) = all (El A) \a -> Good G (f a)
- Good G (\\ b) = Good G b
- Good G (a ^ ss) = Good G ss
- Good G (s & ss) = Good G s /\ Good G ss
- Good G nil = tt
- Good G (x $ ss) = Good G x /\ Good G ss
- Good G (` x {S}) = GooN G S x
- Good G (# v) = tt
- data _[_/_]-_ (G : Cxt)(L : Loc)(j : Jud)(T : Kind) : Set where
- _-!_ : (t : L [ j ]- T) -> [| Good G t |] -> G [ L / j ]- T
- gtm : {G : Cxt}{L : Loc}{j : Jud}{T : Kind} -> G [ L / j ]- T -> L [ j ]- T
- gtm (t -! _) = t
- good : {G : Cxt}{L : Loc}{j : Jud}{T : Kind}
- (t : G [ L / j ]- T) -> [| Good G (gtm t) |]
- good (t -! g) = g
- _[!_!]-_ : Cxt -> Kind -> Kind -> Set
- G [! C !]- T = G [ EL / Term C ]- T
- G[_] : {G : Cxt}{C : Kind}{L : Loc}{Z : Gnd} ->
- G [ L / Args C Z ]- C ->
- ----------------------------
- G [ L / Term C ]- Ty Z
- G[ c -! cg ] = [ c ] -! cg
- Gfn : {G : Cxt}{C : Kind}{L : Loc}(A : U){K : El A -> Kind} ->
- ((x : El A) -> G [ L / Term C ]- K x) ->
- -------------------------------------------
- G [ L / Term C ]- Pi A K
- Gfn A f = fn A (gtm o f) -! (good o f)
- G\\ : {G : Cxt}{C : Kind}{L : Loc}{S T : Kind} ->
- G [ L * S / Term C ]- T ->
- ------------------------------
- G [ L / Term C ]- (S |> T)
- G\\ (b -! bg) = \\ b -! bg
- _G^_ : {G : Cxt}{C : Kind}{L : Loc}{Z : Gnd}{A : U}{K : El A -> Kind} ->
- (x : El A) ->
- G [ L / Args C Z ]- K x ->
- ------------------------------
- G [ L / Args C Z ]- Pi A K
- a G^ (s -! sg) = (a ^ s) -! sg
- _G&_ : {G : Cxt}{C : Kind}{L : Loc}{S T : Kind}{Z : Gnd} ->
- G [ L / Term C ]- S ->
- G [ L / Args C Z ]- T ->
- ----------------------------------
- G [ L / Args C Z ]- (S |> T)
- (r -! rg) G& (s -! sg) = (r & s) -! (rg , sg)
- Gnil : {G : Cxt}{C : Kind}{L : Loc}{Z : Gnd} ->
- -----------------------------
- G [ L / Args C Z ]- Ty Z
- Gnil = nil -! _
- _G$_ : {G : Cxt}{C : Kind}{L : Loc}{T : Kind}{Z : Gnd} ->
- G [ L / Head ]- T ->
- G [ L / Args C Z ]- T ->
- -----------------------------
- G [ L / Term C ]- Ty Z
- (h -! hg) G$ (s -! sg) = (h $ s) -! (hg , sg)
- G` : {G : Cxt}{S : Kind}{L : Loc} -> Nom :- GooN G S ->
- ------------------------------------------------------
- G [ L / Head ]- S
- G` [ x / xg ] = ` x -! xg
- G# : {G : Cxt}{L : Loc}{S : Kind} -> L ! S ->
- --------------------------
- G [ L / Head ]- S
- G# v = # v -! _
- infixr 90 _G^_ _G&_
|