open import Definition.Typed.Restrictions
open import Graded.Modality
module Definition.Typed
{ā} {M : Set ā}
{š : Modality M}
(R : Type-restrictions š)
where
open Type-restrictions R
open import Definition.Typed.Variant
open import Definition.Untyped M
import Definition.Untyped.Erased š as Erased
open import Definition.Untyped.Whnf M type-variant
open import Tools.Fin
open import Tools.Nat
open import Tools.Product
import Tools.PropositionalEquality as PE
open import Tools.Relation
import Tools.Vec as Vec
infix 24 ā_
private
variable
m n l lā lā α : Nat
ā āā² : DCon (Term 0) _
Ļ Ļā² : Unfolding _
Ļ : Opacity _
Ī : Con Term _
A Aā Aā Aā² B Bā Bā C E F Fā² G H : Term _
a f g nā² s sā² t tā tā tā² u uā uā uā² v vā vā vā² w wā wā wā² z zā² :
Term _
Ļ Ļā² : Subst _ _
x : Fin _
p pā² q qā² r : M
b : BinderMode
k : Strength
data _ā·_ā_ : (x : Fin n) (A : Term n) (Ī : Con Term n) ā Set ā where
here : x0 ā· wk1 A ā Ī ā A
there : x ā· A ā Ī ā (x +1) ā· wk1 A ā Ī ā B
opaque
unfolding _āįµ_
infixl 5 _āįµįµ_
_āįµįµ_ : Unfolding n ā Unfolding n ā Unfolding n
_āįµįµ_ with unfolding-mode
⦠| explicit = Ī» Ļ _ ā Ļ
⦠| transitive = _āįµ_
opaque
Trans : Unfolding n ā DCon (Term 0) n ā DCon (Term 0) n
Trans _ ε =
ε
Trans Ļ (ā ā⨠tra ā©[ t ā· A ]) =
Trans (Vec.tail Ļ) ā ā⨠tra ā©[ t ā· A ]
Trans (Ļ ā°) (ā āāØ Ļ ā©[ t ā· A ]) =
Trans Ļ ā āāØ Ļ ā©[ t ā· A ]
Trans (Ļ Ā¹) (ā ā⨠opa Ļā² ā©[ t ā· A ]) =
Trans (Ļ āįµįµ Ļā²) ā ā⨠tra ā©[ t ā· A ]
mutual
infix 4 »_
data Ā»_ : DCon (Term 0) m ā Set ā where
ε : » ε
āįµāØ_ā©[_ā·_] : Opacity-allowed
ā Trans Ļ ā Ā» ε ⢠t ā· A
ā ā Ā» ε ⢠A
ā Ā» ā ā⨠opa Ļ ā©[ t ā· A ]
āįµ[_] : ā Ā» ε ⢠t ā· A
ā Ā» ā ā⨠tra ā©[ t ā· A ]
infix 4 _Ā»ā¢_
data _Ā»ā¢_ (ā : DCon (Term 0) m) : Con Term n ā Set ā where
ε : Ā» ā ā ā »⢠ε
ā_ : ā Ā» Π⢠A ā ā »⢠Πā A
pattern εε = ε ε
infix 4 ā¢_
ā¢_ : Cons m n ā Set ā
⢠ā Ā» Ī = ā »⢠Ī
infix 4 _ā¢_
data _ā¢_ (Ī : Cons m n) : Term n ā Set ā where
Uā±¼ : ⢠Πā Π⢠U l
univ : Π⢠A ⷠU l
ā Π⢠A
Emptyā±¼ : ⢠Πā Π⢠Empty
Unitā±¼ : ⢠Πā Unit-allowed k ā Π⢠Unit k l
ΠΣⱼ : Ī Ā»ā A ⢠B
ā ΠΣ-allowed b p q
ā Π⢠ΠΣ⨠b ā© p , q ā· A ā¹ B
āā±¼ : ⢠Πā Π⢠ā
Idⱼ : Π⢠A
ā Π⢠t ā· A
ā Π⢠u ā· A
ā Π⢠Id A t u
infix 4 _ā¢_ā·_
data _ā¢_ā·_ (Ī : Cons m n) : Term n ā Term n ā Set ā where
conv : Π⢠t ⷠA
ā Π⢠A ā” B
ā Π⢠t ā· B
var : ⢠Ī
ā x ā· A ā Ī .vars
ā Π⢠var x ā· A
defn : ⢠Ī
ā α ā¦ā· Aā² ā Ī .defs
ā A PE.ā” wk wkā Aā²
ā Π⢠defn α ā· A
Uā±¼ : ⢠Πā Π⢠U l ā· U (1+ l)
Emptyā±¼ : ⢠Πā Π⢠Empty ā· U 0
emptyrecā±¼ : Π⢠A ā Π⢠t ā· Empty ā Π⢠emptyrec p A t ā· A
Unitā±¼ : ⢠Πā Unit-allowed k ā Π⢠Unit k l ā· U l
starā±¼ : ⢠Πā Unit-allowed k ā Π⢠star k l ā· Unit k l
unitrecā±¼ : Ī Ā»ā UnitŹ· l ⢠A
ā Π⢠t ā· UnitŹ· l
ā Π⢠u ā· A [ starŹ· l ]ā
ā UnitŹ·-allowed
ā Π⢠unitrec l p q A t u ā· A [ t ]ā
ΠΣⱼ : Π⢠F ā· U lā
ā Ī Ā»ā F ⢠G ā· U lā
ā ΠΣ-allowed b p q
ā Π⢠ΠΣ⨠b ā© p , q ā· F ā¹ G ā· U (lā āįµ lā)
lamā±¼ : Ī Ā»ā F ⢠G
ā Ī Ā»ā F ⢠t ā· G
ā Ī -allowed p q
ā Π⢠lam p t ā· Ī p , q ā· F ā¹ G
_āā±¼_ : Π⢠t ā· Ī p , q ā· F ā¹ G
ā Π⢠u ā· F
ā Π⢠t ā⨠p ā© u ā· G [ u ]ā
prodā±¼ : Ī Ā»ā F ⢠G
ā Π⢠t ā· F
ā Π⢠u ā· G [ t ]ā
ā Ī£-allowed k p q
ā Π⢠prod k p t u ⷠΣ⨠k ā© p , q ā· F ā¹ G
fstā±¼ : Ī Ā»ā F ⢠G
ā Π⢠t ⷠΣˢ p , q ā· F ā¹ G
ā Π⢠fst p t ā· F
sndā±¼ : Ī Ā»ā F ⢠G
ā Π⢠t ⷠΣˢ p , q ā· F ā¹ G
ā Π⢠snd p t ā· G [ fst p t ]ā
prodrecā±¼ : Ī Ā»ā (Σʷ p , qā² ā· F ā¹ G) ⢠A
ā Π⢠t ⷠΣʷ p , qā² ā· F ā¹ G
ā Ī Ā»ā F Ā»ā G ⢠u ā· A [ prodŹ· p (var x1) (var x0) ]ā²
ā Σʷ-allowed p qā²
ā Π⢠prodrec r p q A t u ā· A [ t ]ā
āā±¼ : ⢠Πā Π⢠ā ā· U 0
zeroā±¼ : ⢠Ī
ā Π⢠zero ā· ā
sucā±¼ : ā {n}
ā Π⢠n ā· ā
ā Π⢠suc n ā· ā
natrecā±¼ : ā {n}
ā Π⢠z ā· A [ zero ]ā
ā Ī Ā»ā ā Ā»ā A ⢠s ā· A [ suc (var x1) ]ā²
ā Π⢠n ā· ā
ā Π⢠natrec p q r A z s n ā· A [ n ]ā
Idⱼ : Π⢠A ⷠU l
ā Π⢠t ā· A
ā Π⢠u ā· A
ā Π⢠Id A t u ā· U l
rflⱼ : Π⢠t ⷠA
ā Π⢠rfl ā· Id A t t
Jⱼ : Π⢠t ⷠA
ā Ī Ā»ā A Ā»ā Id (wk1 A) (wk1 t) (var x0) ⢠B
ā Π⢠u ā· B [ t , rfl ]āā
ā Π⢠v ā· A
ā Π⢠w ā· Id A t v
ā Π⢠J p q A t B u v w ā· B [ v , w ]āā
Kā±¼ : Ī Ā»ā Id A t t ⢠B
ā Π⢠u ā· B [ rfl ]ā
ā Π⢠v ā· Id A t t
ā K-allowed
ā Π⢠K p A t B u v ā· B [ v ]ā
[]-congⱼ : Π⢠A
ā Π⢠t ā· A
ā Π⢠u ā· A
ā Π⢠v ā· Id A t u
ā []-cong-allowed k
ā let open Erased k in
Π⢠[]-cong k A t u v ā·
Id (Erased A) ([ t ]) ([ u ])
infix 4 _ā¢_ā”_
data _ā¢_ā”_ (Ī : Cons m n) : Term n ā Term n ā Set ā where
refl : Π⢠A
ā Π⢠A ā” A
sym : Π⢠A ┠B
ā Π⢠B ā” A
trans : Π⢠A ┠B
ā Π⢠B ā” C
ā Π⢠A ā” C
univ : Π⢠A ┠B ⷠU l
ā Π⢠A ā” B
ΠΣ-cong
: Π⢠F ┠H
ā Ī Ā»ā F ⢠G ā” E
ā ΠΣ-allowed b p q
ā Π⢠ΠΣ⨠b ā© p , q ā· F ā¹ G ┠ΠΣ⨠b ā© p , q ā· H ā¹ E
Id-cong
: Π⢠Aā ā” Aā
ā Π⢠tā ā” tā ā· Aā
ā Π⢠uā ā” uā ā· Aā
ā Π⢠Id Aā tā uā ā” Id Aā tā uā
infix 4 _ā¢_ā”_ā·_
data _ā¢_ā”_ā·_ (Ī : Cons m n) : Term n ā Term n ā Term n ā Set ā where
conv : Π⢠t ┠u ⷠA
ā Π⢠A ā” B
ā Π⢠t ā” u ā· B
refl : Π⢠t ⷠA
ā Π⢠t ā” t ā· A
sym : Π⢠A
ā Π⢠t ā” u ā· A
ā Π⢠u ā” t ā· A
trans : Π⢠t ┠u ⷠA
ā Π⢠u ā” v ā· A
ā Π⢠t ā” v ā· A
Ī“-red : ⢠Ī
ā α ⦠tā² ā· Aā² ā Ī .defs
ā A PE.ā” wk wkā Aā²
ā t PE.ā” wk wkā tā²
ā Π⢠defn α ā” t ā· A
emptyrec-cong : Π⢠A ┠B
ā Π⢠t ā” u ā· Empty
ā Π⢠emptyrec p A t ā” emptyrec p B u ā· A
η-unit : Π⢠t ⷠUnit k l
ā Π⢠tā² ā· Unit k l
ā Unit-with-Ī· k
ā Π⢠t ā” tā² ā· Unit k l
unitrec-cong : Ī Ā»ā UnitŹ· l ⢠A ā” Aā²
ā Π⢠t ā” tā² ā· UnitŹ· l
ā Π⢠u ā” uā² ā· A [ starŹ· l ]ā
ā UnitŹ·-allowed
ā ¬ UnitŹ·-Ī·
ā Π⢠unitrec l p q A t u ā” unitrec l p q Aā² tā² uā² ā·
A [ t ]ā
unitrec-β : Ī Ā»ā UnitŹ· l ⢠A
ā Π⢠u ā· A [ starŹ· l ]ā
ā UnitŹ·-allowed
ā ¬ UnitŹ·-Ī·
ā Π⢠unitrec l p q A (starŹ· l) u ā” u ā· A [ starŹ· l ]ā
unitrec-β-Ī· : Ī Ā»ā UnitŹ· l ⢠A
ā Π⢠t ā· UnitŹ· l
ā Π⢠u ā· A [ starŹ· l ]ā
ā UnitŹ·-allowed
ā UnitŹ·-Ī·
ā Π⢠unitrec l p q A t u ā” u ā· A [ t ]ā
ΠΣ-cong : Π⢠F ā” H ā· U lā
ā Ī Ā»ā F ⢠G ā” E ā· U lā
ā ΠΣ-allowed b p q
ā Π⢠ΠΣ⨠b ā© p , q ā· F ā¹ G ┠ΠΣ⨠b ā© p , q ā· H ā¹ E ā·
U (lā āįµ lā)
app-cong : ā {b}
ā Π⢠f ā” g ā· Ī p , q ā· F ā¹ G
ā Π⢠a ā” b ā· F
ā Π⢠f ā⨠p ā© a ā” g ā⨠p ā© b ā· G [ a ]ā
β-red : Ī Ā»ā F ⢠G
ā Ī Ā»ā F ⢠t ā· G
ā Π⢠a ā· F
ā p PE.ā” pā²
ā
Ī -allowed p q
ā Π⢠lam p t ā⨠pā² ā© a ā” t [ a ]ā ā· G [ a ]ā
Ī·-eq : Ī Ā»ā F ⢠G
ā Π⢠f ā· Ī p , q ā· F ā¹ G
ā Π⢠g ā· Ī p , q ā· F ā¹ G
ā Ī Ā»ā F ⢠wk1 f ā⨠p ā© var x0 ā” wk1 g ā⨠p ā© var x0 ā· G
ā Ī -allowed p q
ā Π⢠f ā” g ā· Ī p , q ā· F ā¹ G
prod-cong : Ī Ā»ā F ⢠G
ā Π⢠t ā” tā² ā· F
ā Π⢠u ā” uā² ā· G [ t ]ā
ā Ī£-allowed k p q
ā Π⢠prod k p t u ā” prod k p tā² uⲠⷠΣ⨠k ā© p , q ā· F ā¹ G
fst-cong : Ī Ā»ā F ⢠G
ā Π⢠t ā” tⲠⷠΣˢ p , q ā· F ā¹ G
ā Π⢠fst p t ā” fst p tā² ā· F
Ī£-βā : Ī Ā»ā F ⢠G
ā Π⢠t ā· F
ā Π⢠u ā· G [ t ]ā
ā p PE.ā” pā²
ā
Σˢ-allowed p q
ā Π⢠fst p (prodĖ¢ pā² t u) ā” t ā· F
snd-cong : Ī Ā»ā F ⢠G
ā Π⢠t ā” u ⷠΣˢ p , q ā· F ā¹ G
ā Π⢠snd p t ā” snd p u ā· G [ fst p t ]ā
Ī£-βā : Ī Ā»ā F ⢠G
ā Π⢠t ā· F
ā Π⢠u ā· G [ t ]ā
ā p PE.ā” pā²
ā
Σˢ-allowed p q
ā Π⢠snd p (prodĖ¢ pā² t u) ā” u ā· G [ fst p (prodĖ¢ pā² t u) ]ā
Ī£-Ī· : Ī Ā»ā F ⢠G
ā Π⢠t ⷠΣˢ p , q ā· F ā¹ G
ā Π⢠u ⷠΣˢ p , q ā· F ā¹ G
ā Π⢠fst p t ā” fst p u ā· F
ā Π⢠snd p t ā” snd p u ā· G [ fst p t ]ā
ā Σˢ-allowed p q
ā Π⢠t ā” u ⷠΣˢ p , q ā· F ā¹ G
prodrec-cong : Ī Ā»ā Σʷ p , qā² ā· F ā¹ G ⢠A ā” Aā²
ā Π⢠t ā” tⲠⷠΣʷ p , qā² ā· F ā¹ G
ā Ī Ā»ā F Ā»ā G ⢠u ā” uā² ā·
A [ prodŹ· p (var x1) (var x0) ]ā²
ā Σʷ-allowed p qā²
ā Π⢠prodrec r p q A t u ā” prodrec r p q Aā² tā² uā² ā· A [ t ]ā
prodrec-β : Ī Ā»ā Σʷ p , qā² ā· F ā¹ G ⢠A
ā Π⢠t ā· F
ā Π⢠tā² ā· G [ t ]ā
ā Ī Ā»ā F Ā»ā G ⢠u ā· A [ prodŹ· p (var x1) (var x0) ]ā²
ā p PE.ā” pā²
ā Σʷ-allowed p qā²
ā Π⢠prodrec r p q A (prodŹ· pā² t tā²) u ā”
u [ t , tā² ]āā ā· A [ prodŹ· pā² t tā² ]ā
suc-cong : ā {n}
ā Π⢠t ā” n ā· ā
ā Π⢠suc t ā” suc n ā· ā
natrec-cong : ā {n}
ā Ī Ā»ā ā ⢠A ā” Aā²
ā Π⢠z ā” zā² ā· A [ zero ]ā
ā Ī Ā»ā ā Ā»ā A ⢠s ā” sā² ā· A [ suc (var x1) ]ā²
ā Π⢠n ā” nā² ā· ā
ā Π⢠natrec p q r A z s n ā”
natrec p q r Aā² zā² sā² nā² ā· A [ n ]ā
natrec-zero : Π⢠z ā· A [ zero ]ā
ā Ī Ā»ā ā Ā»ā A ⢠s ā· A [ suc (var x1) ]ā²
ā Π⢠natrec p q r A z s zero ā” z ā· A [ zero ]ā
natrec-suc : ā {n}
ā Π⢠z ā· A [ zero ]ā
ā Ī Ā»ā ā Ā»ā A ⢠s ā· A [ suc (var x1) ]ā²
ā Π⢠n ā· ā
ā Π⢠natrec p q r A z s (suc n) ā”
s [ n , natrec p q r A z s n ]āā ā· A [ suc n ]ā
Id-cong : Π⢠Aā ā” Aā ā· U l
ā Π⢠tā ā” tā ā· Aā
ā Π⢠uā ā” uā ā· Aā
ā Π⢠Id Aā tā uā ā” Id Aā tā uā ā· U l
J-cong : Π⢠Aā ā” Aā
ā Π⢠tā ā· Aā
ā Π⢠tā ā” tā ā· Aā
ā Ī Ā»ā Aā Ā»ā Id (wk1 Aā) (wk1 tā) (var x0) ⢠Bā ā” Bā
ā Π⢠uā ā” uā ā· Bā [ tā , rfl ]āā
ā Π⢠vā ā” vā ā· Aā
ā Π⢠wā ā” wā ā· Id Aā tā vā
ā Π⢠J p q Aā tā Bā uā vā wā ā”
J p q Aā tā Bā uā vā wā ā· Bā [ vā , wā ]āā
J-β : Π⢠t ⷠA
ā Ī Ā»ā A Ā»ā Id (wk1 A) (wk1 t) (var x0) ⢠B
ā Π⢠u ā· B [ t , rfl ]āā
ā t PE.ā” tā²
ā Π⢠J p q A t B u tā² rfl ā” u ā· B [ t , rfl ]āā
K-cong : Π⢠Aā ā” Aā
ā Π⢠tā ā” tā ā· Aā
ā Ī Ā»ā Id Aā tā tā ⢠Bā ā” Bā
ā Π⢠uā ā” uā ā· Bā [ rfl ]ā
ā Π⢠vā ā” vā ā· Id Aā tā tā
ā K-allowed
ā Π⢠K p Aā tā Bā uā vā ā” K p Aā tā Bā uā vā ā·
Bā [ vā ]ā
K-β : Ī Ā»ā Id A t t ⢠B
ā Π⢠u ā· B [ rfl ]ā
ā K-allowed
ā Π⢠K p A t B u rfl ā” u ā· B [ rfl ]ā
[]-cong-cong : Π⢠Aā ā” Aā
ā Π⢠tā ā” tā ā· Aā
ā Π⢠uā ā” uā ā· Aā
ā Π⢠vā ā” vā ā· Id Aā tā uā
ā []-cong-allowed k
ā let open Erased k in
Π⢠[]-cong k Aā tā uā vā ā” []-cong k Aā tā uā vā ā·
Id (Erased Aā) ([ tā ]) ([ uā ])
[]-cong-β : Π⢠t ⷠA
ā t PE.ā” tā²
ā []-cong-allowed k
ā let open Erased k in
Π⢠[]-cong k A t tā² rfl ā” rfl ā·
Id (Erased A) ([ t ]) ([ tā² ])
equality-reflection
: Equality-reflection
ā Π⢠Id A t u
ā Π⢠v ā· Id A t u
ā Π⢠t ā” u ā· A
infix 4 _ā¢_ā_ā·_
data _ā¢_ā_ā·_ (Ī : Cons m n) : Term n ā Term n ā Term n ā Set ā where
conv : Π⢠t ā u ā· A
ā Π⢠A ā” B
ā Π⢠t ā u ā· B
Ī“-red : ⢠Ī
ā α ⦠tā² ā· Aā² ā Ī .defs
ā A PE.ā” wk wkā Aā²
ā t PE.ā” wk wkā tā²
ā Π⢠defn α ā t ā· A
emptyrec-subst : ā {n}
ā Π⢠A
ā Π⢠n ā nā² ā· Empty
ā Π⢠emptyrec p A n ā emptyrec p A nā² ā· A
unitrec-subst : Ī Ā»ā UnitŹ· l ⢠A
ā Π⢠u ā· A [ starŹ· l ]ā
ā Π⢠t ā tā² ā· UnitŹ· l
ā UnitŹ·-allowed
ā ¬ UnitŹ·-Ī·
ā Π⢠unitrec l p q A t u ā unitrec l p q A tā² u ā·
A [ t ]ā
unitrec-β : Ī Ā»ā UnitŹ· l ⢠A
ā Π⢠u ā· A [ starŹ· l ]ā
ā UnitŹ·-allowed
ā ¬ UnitŹ·-Ī·
ā Π⢠unitrec l p q A (starŹ· l) u ā u ā· A [ starŹ· l ]ā
unitrec-β-Ī· : Ī Ā»ā UnitŹ· l ⢠A
ā Π⢠t ā· UnitŹ· l
ā Π⢠u ā· A [ starŹ· l ]ā
ā UnitŹ·-allowed
ā UnitŹ·-Ī·
ā Π⢠unitrec l p q A t u ā u ā· A [ t ]ā
app-subst : Π⢠t ā u ā· Ī p , q ā· F ā¹ G
ā Π⢠a ā· F
ā Π⢠t ā⨠p ā© a ā u ā⨠p ā© a ā· G [ a ]ā
β-red : Ī Ā»ā F ⢠G
ā Ī Ā»ā F ⢠t ā· G
ā Π⢠a ā· F
ā p PE.ā” pā²
ā
Ī -allowed p q
ā Π⢠lam p t ā⨠pā² ā© a ā t [ a ]ā ā· G [ a ]ā
fst-subst : Ī Ā»ā F ⢠G
ā Π⢠t ā u ⷠΣˢ p , q ā· F ā¹ G
ā Π⢠fst p t ā fst p u ā· F
Ī£-βā : Ī Ā»ā F ⢠G
ā Π⢠t ā· F
ā Π⢠u ā· G [ t ]ā
ā p PE.ā” pā²
ā
Σˢ-allowed p q
ā Π⢠fst p (prodĖ¢ pā² t u) ā t ā· F
snd-subst : Ī Ā»ā F ⢠G
ā Π⢠t ā u ⷠΣˢ p , q ā· F ā¹ G
ā Π⢠snd p t ā snd p u ā· G [ fst p t ]ā
Ī£-βā : Ī Ā»ā F ⢠G
ā Π⢠t ā· F
ā Π⢠u ā· G [ t ]ā
ā p PE.ā” pā²
ā
Σˢ-allowed p q
ā Π⢠snd p (prodĖ¢ pā² t u) ā u ā· G [ fst p (prodĖ¢ pā² t u) ]ā
prodrec-subst : Ī Ā»ā Σʷ p , qā² ā· F ā¹ G ⢠A
ā Ī Ā»ā F Ā»ā G ⢠u ā· A [ prodŹ· p (var x1) (var x0) ]ā²
ā Π⢠t ā tⲠⷠΣʷ p , qā² ā· F ā¹ G
ā Σʷ-allowed p qā²
ā Π⢠prodrec r p q A t u ā prodrec r p q A tā² u ā· A [ t ]ā
prodrec-β : Ī Ā»ā Σʷ p , qā² ā· F ā¹ G ⢠A
ā Π⢠t ā· F
ā Π⢠tā² ā· G [ t ]ā
ā Ī Ā»ā F Ā»ā G ⢠u ā· A [ prodŹ· p (var x1) (var x0) ]ā²
ā p PE.ā” pā²
ā Σʷ-allowed p qā²
ā Π⢠prodrec r p q A (prodŹ· pā² t tā²) u ā
u [ t , tā² ]āā ā· A [ prodŹ· pā² t tā² ]ā
natrec-subst : ā {n}
ā Π⢠z ā· A [ zero ]ā
ā Ī Ā»ā ā Ā»ā A ⢠s ā· A [ suc (var x1) ]ā²
ā Π⢠n ā nā² ā· ā
ā Π⢠natrec p q r A z s n ā natrec p q r A z s nā² ā·
A [ n ]ā
natrec-zero : Π⢠z ā· A [ zero ]ā
ā Ī Ā»ā ā Ā»ā A ⢠s ā· A [ suc (var x1) ]ā²
ā Π⢠natrec p q r A z s zero ā z ā· A [ zero ]ā
natrec-suc : ā {n}
ā Π⢠z ā· A [ zero ]ā
ā Ī Ā»ā ā Ā»ā A ⢠s ā· A [ suc (var x1) ]ā²
ā Π⢠n ā· ā
ā Π⢠natrec p q r A z s (suc n) ā
s [ n , natrec p q r A z s n ]āā ā· A [ suc n ]ā
J-subst : Π⢠t ⷠA
ā Ī Ā»ā A Ā»ā Id (wk1 A) (wk1 t) (var x0) ⢠B
ā Π⢠u ā· B [ t , rfl ]āā
ā Π⢠v ā· A
ā Π⢠wā ā wā ā· Id A t v
ā Π⢠J p q A t B u v wā ā J p q A t B u v wā ā·
B [ v , wā ]āā
J-β : Π⢠t ⷠA
ā Π⢠tā² ā· A
ā Π⢠t ā” tā² ā· A
ā Ī Ā»ā A Ā»ā Id (wk1 A) (wk1 t) (var x0) ⢠B
ā Π⢠B [ t , rfl ]āā ā” B [ tā² , rfl ]āā
ā Π⢠u ā· B [ t , rfl ]āā
ā Π⢠J p q A t B u tā² rfl ā u ā· B [ t , rfl ]āā
K-subst : Ī Ā»ā Id A t t ⢠B
ā Π⢠u ā· B [ rfl ]ā
ā Π⢠vā ā vā ā· Id A t t
ā K-allowed
ā Π⢠K p A t B u vā ā K p A t B u vā ā· B [ vā ]ā
K-β : Ī Ā»ā Id A t t ⢠B
ā Π⢠u ā· B [ rfl ]ā
ā K-allowed
ā Π⢠K p A t B u rfl ā u ā· B [ rfl ]ā
[]-cong-subst : Π⢠A
ā Π⢠t ā· A
ā Π⢠u ā· A
ā Π⢠vā ā vā ā· Id A t u
ā []-cong-allowed k
ā let open Erased k in
Π⢠[]-cong k A t u vā ā []-cong k A t u vā ā·
Id (Erased A) ([ t ]) ([ u ])
[]-cong-β : Π⢠A
ā Π⢠t ā· A
ā Π⢠tā² ā· A
ā Π⢠t ā” tā² ā· A
ā []-cong-allowed k
ā let open Erased k in
Π⢠[]-cong k A t tā² rfl ā rfl ā·
Id (Erased A) ([ t ]) ([ tā² ])
infix 4 _ā¢_ā_
data _ā¢_ā_ (Ī : Cons m n) : Term n ā Term n ā Set ā where
univ : Π⢠A ā B ā· U l
ā Π⢠A ā B
infix 4 _ā¢_ā*_ā·_
data _ā¢_ā*_ā·_ (Ī : Cons m n) : Term n ā Term n ā Term n ā Set ā where
id : Π⢠t ⷠA
ā Π⢠t ā* t ā· A
_āØ_ : Π⢠t ā tā² ā· A
ā Π⢠tā² ā* u ā· A
ā Π⢠t ā* u ā· A
infix 4 _ā¢_ā*_
data _ā¢_ā*_ (Ī : Cons m n) : Term n ā Term n ā Set ā where
id : Π⢠A
ā Π⢠A ā* A
_āØ_ : Π⢠A ā Aā²
ā Π⢠Aā² ā* B
ā Π⢠A ā* B
infix 4 _ā¢_ā_
_ā¢_ā_ : Cons m n ā Term n ā Term n ā Set ā
Π⢠A ā B = Π⢠A ā* B Ć Whnf (Ī .defs) B
infix 4 _ā¢_ā_ā·_
_ā¢_ā_ā·_ : Cons m n ā Term n ā Term n ā Term n ā Set ā
Π⢠t ā u ā· A = Π⢠t ā* u ā· A Ć Whnf (Ī .defs) u
Consistent : Cons m n ā Set ā
Consistent Ī = ā t ā ¬ Π⢠t ā· Empty