module Semantics.CwF where
open import Prelude
open import Setoid
record Hom (C D : β£ π β£) : Set where
constructor mkHom
infix 8 β£_β£
field
β£_β£ : β₯ β° β₯ C β β₯ β° β₯ D
cng :
(c c' : β₯ β° β₯ C)
(_ : C , c βαΆ C , c')
β
D , β£_β£ c βαΆ D , β£_β£ c'
open Hom public
ββ΄π : Setd[ π β π ]
β₯ ββ΄π β₯ (C , D) = Hom C D
ββ΄π β (C , D) , f β (C' , D') , f' =
(c : β₯ β° β₯ C)
(c' : β₯ β° β₯ C')
(_ : C , c βαΆ C' , c')
β
D , β£ f β£ c βαΆ D' , β£ f' β£ c'
hrfl ββ΄π (C , D) f _ _ e = cng f _ _ e
hsym ββ΄π (e , e') f c c' e'' =
hsymαΆ e' (f c' c (hsymαΆ (symαΆ e) e''))
htrs ββ΄π (eβ , eβ') (eβ , eβ') fβ fβ c c' e =
htrsαΆ eβ' eβ'
(fβ c (coeαΆ eβ c) (cohαΆ eβ c))
(fβ (coeαΆ eβ c) c'
((htrsαΆ (symαΆ eβ) (trsαΆ eβ eβ) (hsymαΆ eβ (cohαΆ eβ c)) e)))
β£ coe ββ΄π (eβ , eβ) f β£ c = coeαΆ eβ (β£ f β£ (coeαΆ (symαΆ eβ) c))
cng (coe ββ΄π (eβ , eβ) f) c c' e = htrsαΆ (symαΆ eβ) eβ
(hsymαΆ eβ (cohαΆ eβ (β£ f β£(coeαΆ (symαΆ eβ) c))))
(htrsαΆ (rflαΆ _) eβ
(cng f _ _ (htrsαΆ eβ (symαΆ eβ)
(hsymαΆ (symαΆ eβ) (cohαΆ (symαΆ eβ) c))
(htrsαΆ (rflαΆ _) (symαΆ eβ) e (cohαΆ (symαΆ eβ) c'))))
(cohαΆ eβ (β£ f β£(coeαΆ (symαΆ eβ) c'))))
coh ββ΄π (eβ , eβ) f c c' e = htrsαΆ (rflαΆ _) eβ
(cng f _ _ (htrsαΆ eβ (symαΆ eβ) e (cohαΆ (symαΆ eβ) c')))
(cohαΆ eβ (β£ f β£(coeαΆ (symαΆ eβ) c')))
instance
HomIdentity : β{C} β Identity (Hom C C)
β£ id β¦ HomIdentity β¦ β£ x = x
cng (id β¦ HomIdentity β¦) _ _ = id
instance
HomComp : β{C D E} β
Composition (Hom D E) (Hom C D) (Hom C E)
β£ _β_ β¦ HomComp β¦ g f β£ x = β£ g β£ (β£ f β£ x)
cng (_β_ β¦ HomComp β¦ g f) _ _ = cng g _ _ β cng f _ _
compCng :
{C C' D D' E E' : β£ π β£}
{f : Hom C D}
{f' : Hom C' D'}
{g : Hom D E}
{g' : Hom D' E'}
(_ : ββ΄π β (C , D) , f β (C' , D') , f')
(_ : ββ΄π β (D , E) , g β (D' , E') , g')
β
ββ΄π β (C , E) , (g β f) β (C' , E') , (g' β f')
compCng {f = f}{f'} u v c c' w = v (β£ f β£ c) (β£ f' β£ c') (u c c' w)
unit : (C : β£ π β£) β Hom C Unit
β£ unit C β£ _ = tt
cng (unit C) _ _ _ = tt
record Sect
(n : β)
(C : β£ π β£)
(X : β₯ β° β₯ C β U n)
(q : β c c' β C , c βαΆ C , c' β π° n β X c ~ X c')
:
Set
where
constructor mkSect
infix 8 β₯_β₯
field
β₯_β₯ : (c : ElαΆ C) β El n (X c)
hcng :
(c c' : ElαΆ C)
(_ : C , c βαΆ C , c')
β
β°π n β X c , β₯_β₯ c β X c' , β₯_β₯ c'
open Sect public
Fam : β β β£ π β£ β Set
Fam n C =
Sect (1+ n) C (Ξ» _ β Univ) (Ξ» _ _ _ β rfl (π° (1+ n)) Univ)
β±πΆπ : β β Setd[ π ]
β₯ β±πΆπ n β₯ = Fam n
β±πΆπ n β C , T β C' , T' =
β c c' β (C , c βαΆ C' , c') β π° n β β₯ T β₯ c ~ β₯ T' β₯ c'
hrfl (β±πΆπ n) C T = hcng T
hsym (β±πΆπ n) e f c c' e' =
sym (π° n) (f c' c (hsymαΆ (symαΆ e) e'))
htrs (β±πΆπ n) eβ eβ fβ fβ c c'' e = trs (π° n)
(fβ c (coeαΆ eβ c) (cohαΆ eβ c))
(fβ (coeαΆ eβ c) c'' (htrsαΆ (symαΆ eβ) (trsαΆ eβ eβ)
(hsymαΆ eβ (cohαΆ eβ c)) e))
β₯ coe (β±πΆπ n) e T β₯ c = β₯ T β₯ (coeαΆ (symαΆ e) c)
hcng (coe (β±πΆπ n) e T) c c' e' =
hcng T _ _ (htrsαΆ e (symαΆ e)
(hsymαΆ (symαΆ e) (cohαΆ (symαΆ e) c))
(htrsαΆ (rflαΆ _) (symαΆ e) e' (cohαΆ (symαΆ e) c')))
coh (β±πΆπ n) e T c c' e' =
hcng T _ _ (htrsαΆ e (symαΆ e) e' (cohαΆ (symαΆ e) c'))
Elem : (n : β)(C : β£ π β£) β Fam n C β Set
Elem n C T = Sect n C (β₯_β₯ T) (hcng T)
β°πβ―π : (n : β) β Setd[ π β β±πΆπ n ]
β₯ β°πβ―π n β₯ (C , T) = Elem n C T
β°πβ―π n β (C , T) , t β (C' , T') , t' =
(c : β₯ β° β₯ C)
(c' : β₯ β° β₯ C')
(_ : C , c βαΆ C' , c')
β
β°π n β β₯ T β₯ c , β₯ t β₯ c β β₯ T' β₯ c' , β₯ t' β₯ c'
hrfl (β°πβ―π n) _ T _ _ e = hcng T _ _ e
hsym (β°πβ―π n) (e , f) g c c' e' = hsym (β°π n)
(f c' c (hsymαΆ (symαΆ e) e'))
(g c' c (hsymαΆ (symαΆ e) e'))
htrs (β°πβ―π n) (eβ , fβ) (eβ , fβ) gβ gβ c c'' e =
let
c' = coeαΆ eβ c
e' = cohαΆ eβ c
eβ' = symαΆ eβ
in htrs (β°π n)
(fβ c c' e')
(fβ c' c'' (htrsαΆ eβ' (trsαΆ eβ eβ) (hsymαΆ eβ e') e))
(gβ c c' e')
(gβ c' c'' (htrsαΆ eβ' (trsαΆ eβ eβ) (hsymαΆ eβ e') e))
β₯ coe (β°πβ―π n) (e , f) t β₯ c' =
let
c = coeαΆ (symαΆ e) c'
e' = cohαΆ (symαΆ e) c'
in
coe (β°π n) (f c c' (hsymαΆ (symαΆ e) e')) (β₯ t β₯ c)
hcng (coe (β°πβ―π n) {x' = _ , T'} (e , f) t) cβ cβ e' =
let
cβ' = coeαΆ (symαΆ e) cβ
eβ' = cohαΆ (symαΆ e) cβ
cβ' = coeαΆ (symαΆ e) cβ
eβ' = cohαΆ (symαΆ e) cβ
eβ'' = f cβ' cβ (hsymαΆ (symαΆ e) eβ')
eβ'' = f cβ' cβ (hsymαΆ (symαΆ e) eβ')
in htrs (β°π n)
(sym (π° n) eβ'')
(f cβ' cβ (htrsαΆ e (rflαΆ _) (hsymαΆ (symαΆ e) eβ') e'))
(hsym (β°π n) eβ'' (coh (β°π n) eβ'' (β₯ t β₯ cβ')))
(htrs (β°π n)
(trs (π° n) eβ'' (trs (π° n) (hcng T' _ _ e') (sym (π° n) eβ'')))
eβ''
(hcng t _ _ (htrsαΆ e (symαΆ e) (hsymαΆ (symαΆ e) eβ')
(htrsαΆ (rflαΆ _) (symαΆ e) e' eβ')))
(coh (β°π n) eβ'' (β₯ t β₯ cβ')))
coh (β°πβ―π n) {_ , T'} (e , f) t c c' e' =
let
cβ = coeαΆ (symαΆ e) c'
eβ' = cohαΆ (symαΆ e) c'
in htrs (β°π n)
(hcng T' _ _ (htrsαΆ e (symαΆ e) e' eβ'))
(f cβ c' (hsymαΆ (symαΆ e) eβ'))
(hcng t _ _ (htrsαΆ e (symαΆ e) e' eβ'))
(coh (β°π n) (f cβ c' (hsymαΆ (symαΆ e) eβ')) (β₯ t β₯ cβ))
infixr 6 _*αΆ_
_*αΆ_ :
{n : β}
{C D : β£ π β£}
(f : Hom D C)
(T : Fam n C)
β
Fam n D
β₯ f *αΆ T β₯ d = β₯ T β₯ (β£ f β£ d)
hcng (f *αΆ T) d d' e = hcng T (β£ f β£ d) (β£ f β£ d') (cng f d d' e)
instance
Apply*αΆ : β{n C D} β Apply (Hom D C) (Fam n C) (Fam n D)
_*_ β¦ Apply*αΆ β¦ = _*αΆ_
infixr 6 _*β_
_*β_ :
{n : β}
{C D : β£ π β£}
{T : Fam n C}
(f : Hom D C)
(t : Elem n C T)
β
Elem n D (f * T)
β₯ f *β t β₯ d = β₯ t β₯ (β£ f β£ d)
hcng (f *β t) _ _ e = hcng t _ _ (cng f _ _ e)
cng* :
{n : β}
{C C' D D' : β£ π β£}
{T : Fam n C}
{T' : Fam n C'}
(f : Hom D C)
(f' : Hom D' C')
(_ : ββ΄π β (D , C) , f β (D' , C') , f')
(_ : β±πΆπ n β C , T β C' , T')
β
β±πΆπ n β D , f * T β D' , f' * T'
cng* f f' e e' c c' u = e' (β£ f β£ c) (β£ f' β£ c') (e c c' u)
cng*β :
{n : β}
{C C' D D' : β£ π β£}
{T : Fam n C}
{T' : Fam n C'}
{t : Elem n C T}
{t' : Elem n C' T'}
(f : Hom D C)
(f' : Hom D' C')
(_ : ββ΄π β (D , C) , f β (D' , C') , f')
(_ : β°πβ―π n β (C , T) , t β (C' , T') , t')
β
β°πβ―π n β (D , f * T) , f *β t β (D' , f' * T') , f' *β t'
cng*β f f' e e' c c' u = e' (β£ f β£ c) (β£ f' β£ c') (e c c' u)
π°ππΎπ :
(n : β)
{C : β£ π β£}
β
Fam (1+ n) C
β₯ π°ππΎπ _ β₯ _ = Univ
hcng (π°ππΎπ n) _ _ _ = rfl (π° (1+ n)) Univ
fam-as-elt :
{n : β}
{C : β£ π β£}
β
Fam n C β‘ Elem (1+ n) C (π°ππΎπ n)
fam-as-elt = refl
infixl 8 _β[_]_
_β[_]_ :
(C : β£ π β£)
(n : β)
(X : Fam n C)
β
β£ π β£
C β[ n ] (mkSect X q) = Sigma C n X q
π
:
{n : β}
{C : β£ π β£}
(T : Fam n C)
β
Hom (C β[ n ] T) C
β£ π
_ β£ (c , _) = c
cng (π
_) _ _ (e , _) = e
π :
{n : β}
{C : β£ π β£}
(T : Fam n C)
β
Elem n (C β[ n ] T) (π
T * T)
β₯ π _ β₯ (c , t) = t
hcng (π _) _ _ (_ , e , e')
with refl β ! β¦ !β‘ β¦ e refl = e'
πΈβ΄ππ :
{n : β}
{C D : β£ π β£}
{T : Fam n C}
(f : Hom D C)
(t : Elem n D (f * T))
β
Hom D (C β[ n ] T)
β£ πΈβ΄ππ f t β£ d = (β£ f β£ d , β₯ t β₯ d)
cng (πΈβ΄ππ f t) _ _ e =
(cng f _ _ e , refl , hcng t _ _ e)
infixl 8 βͺ_β«
βͺ_β« :
{n : β}
{C : β£ π β£}
{T : Fam n C}
(t : Elem n C T)
β
Hom C (C β[ n ] T)
βͺ t β« = πΈβ΄ππ id t
infixl 8 _ββ²[_]_
_ββ²[_]_ :
{C D : β£ π β£}
(f : Hom D C)
(n : β)
(T : Fam n C)
β
Hom (D β[ n ] (f * T)) (C β[ n ] T)
f ββ²[ n ] T = πΈβ΄ππ (f β π
(f * T)) (π (f * T))
congβ[] :
{C C' : β£ π β£}
(n : β)
{T : Fam n C}
{T' : Fam n C'}
(_ : π β C ~ C')
(_ : β±πΆπ n β C , T β C' , T')
β
π β C β[ n ] T ~ C' β[ n ] T'
congβ[] n e e' = (e , refl , Ξ» c c' u β e' c c' u)
imgβ[] :
{C : β£ π β£}
{n : β}
{T : Fam n C}
(C'' : β£ π β£)
(_ : π β C β[ n ] T ~ C'')
β
β[ C' β β£ π β£ ] β[ T' β Fam n C' ]
(C ~αΆ C')
β§
(β±πΆπ n β C , T β C' , T')
imgβ[] (Sigma C n X q) (e , refl , e') = (C , mkSect X q , e , e')
imgUnit :
(C : β£ π β£)
(_ : π β Unit ~ C)
β
Unit β‘ C
imgUnit Unit tt = refl
π«πΎ :
{C : β£ π β£}
(m n : β)
(S : Fam m C)
(_ : Fam n (C β[ m ] S))
β
Fam (max m n) C
β₯ π«πΎ m n S T β₯ c = PI.ty (pi m n)
(β₯ S β₯ c)
(Ξ» c' β β₯ T β₯ (c , c'))
(Ξ» _ _ e β hcng T _ _ (hrflαΆ _ c , refl , e))
hcng (π«πΎ m n S T) x x' e = PI.tyCong (pi m n) _ _ _ _ _ _
(hcng S _ _ e)
(Ξ» _ _ e' β hcng T _ _ (e , refl , e'))
congπ«πΎ :
{C C' : β£ π β£}
(m n : β)
{S : Fam m C}
{S' : Fam m C'}
{T : Fam n (C β[ m ] S)}
{T' : Fam n (C' β[ m ] S')}
(_ : β±πΆπ m β C , S β C' , S')
(_ : β±πΆπ n β C β[ m ] S , T β C' β[ m ] S' , T')
β
β±πΆπ (max m n) β C , π«πΎ m n S T β C' , π«πΎ m n S' T'
congπ«πΎ m n e e' c c' u = PI.tyCong (pi m n) _ _ _ _ _ _
(e c c' u)
(Ξ» y y' v β e' (c , y) (c' , y') (u , refl , v))
ntrlπ«πΎ :
{D C : β£ π β£}
(m n : β)
(S : Fam m C)
(T : Fam n (C β[ m ] S))
(f : Hom D C)
β
β±πΆπ (max m n) β² D β f * (π«πΎ m n S T) ~
π«πΎ m n (f * S) ((f ββ²[ m ] S) * T)
ntrlπ«πΎ m n S T f _ _ e = PI.tyCong (pi m n) _ _ _ _ _ _
(hcng S _ _ (cng f _ _ e))
Ξ» y y' e' β
hcng T _ _ (cng f _ _ e , refl , e')
ππΆπ :
{C : β£ π β£}
(m n : β)
(S : Fam m C)
{T : Fam n (C β[ m ] S)}
(t : Elem n (C β[ m ] S) T)
β
Elem (max m n) C (π«πΎ m n S T)
β₯ ππΆπ m n _ t β₯ c = PI.lam (pi m n) _ _ _
(Ξ» c' β β₯ t β₯ (c , c'))
(Ξ» _ _ e β hcng t _ _ (hrflαΆ _ c , refl , e))
hcng (ππΆπ m n _ t) c c' e =
PI.lamCong (pi m n) _ _ _ _ _ _ _ _ _ _
Ξ» _ _ e' β hcng t _ _ (e , refl , e')
congππΆπ :
{C C' : β£ π β£}
(m n : β)
{S : Fam m C}
{S' : Fam m C'}
{T : Fam n (C β[ m ] S)}
{T' : Fam n (C' β[ m ] S')}
{t : Elem n (C β[ m ] S) T}
{t' : Elem n (C' β[ m ] S') T'}
(_ : β°πβ―π n β (C β[ m ] S , T) , t β (C' β[ m ] S' , T') , t')
β
β°πβ―π (max m n) β
(C , π«πΎ m n S T) , ππΆπ m n S t β
(C' , π«πΎ m n S' T') , ππΆπ m n S' t'
congππΆπ m n e c c' u =
PI.lamCong (pi m n) _ _ _ _ _ _ _ _ _ _
Ξ» y y' v β e (c , y) (c' , y') (u , refl , v)
ntrlππΆπ :
{D C : β£ π β£}
(m n : β)
{S : Fam m C}
{T : Fam n (C β[ m ] S)}
(t : Elem n (C β[ m ] S) T)
(f : Hom D C)
β
β°πβ―π (max m n) β
(D , f * (π«πΎ m n S T)) ,
f *β ππΆπ m n S t
β
(D , π«πΎ m n (f * S) (f ββ²[ m ] S * T)) ,
ππΆπ m n (f * S) (f ββ²[ m ] S *β t)
ntrlππΆπ m n t f c c' e =
PI.lamCong (pi m n) _ _ _ _ _ _ _ _ _ _
Ξ» y y' e' β hcng t _ _ (cng f _ _ e , refl , e')
πΆπ
π
:
{C : β£ π β£}
(m n : β)
(S : Fam m C)
(T : Fam n (C β[ m ] S))
(_ : Elem (max m n) C (π«πΎ m n S T))
(s : Elem m C S)
β
Elem n C (βͺ s β« * T)
β₯ πΆπ
π
m n _ _ t s β₯ c =
PI.app (pi m n) _ _ _ (β₯ t β₯ c) (β₯ s β₯ c)
hcng (πΆπ
π
m n _ _ t s) x x' e =
PI.appCong (pi m n) _ _ _ _ _ _ _ _ _ _
(hcng t x x' e)
(hcng s x x' e)
ntrlπΆπ
π
:
{D C : β£ π β£}
(m n : β)
(S : Fam m C)
(T : Fam n (C β[ m ] S))
(t : Elem (max m n) C (π«πΎ m n S T))
(s : Elem m C S)
(f : Hom D C)
β
β°πβ―π n β
(D , f * βͺ s β« * T) , f *β πΆπ
π
m n S T t s
β
(D , βͺ f *β s β« * (f ββ²[ m ] S) * T) ,
πΆπ
π
m n (f * S) (f ββ²[ m ] S * T)
(coe (β°πβ―π (max m n))
(rflαΆ D , ntrlπ«πΎ m n S T f) (f *β t))
(f *β s)
ntrlπΆπ
π
m n S T t s f c c' e =
PI.appCong (pi m n) _ _ _ _ _ _ _ _ _ _
(coh (β°πβ―π (max m n))
{x' = _ , π«πΎ m n (f * S) (f ββ²[ m ] S * T)}
(rflαΆ _ , ntrlπ«πΎ m n S T f)
(f *β t) c c' e)
(hcng s (β£ f β£ c) (β£ f β£ c') (cng f c c' e))
π«πΎπ·β―ππΆ :
{C : β£ π β£}
(m n : β)
(S : Fam m C)
(T : Fam n (C β[ m ] S))
(t : Elem n (C β[ m ] S) T)
(s : Elem m C S)
β
β°πβ―π n β² (C , βͺ s β« * T) β
πΆπ
π
m n S T (ππΆπ m n S t) s ~ βͺ s β« *β t
π«πΎπ·β―ππΆ{C} m n S T t s c _ e = htrs (β°π n)
(rfl (π° n) (β₯ βͺ s β« * T β₯ c))
(hcng T _ _ (cng βͺ s β« _ _ e))
(PI.beta (pi m n)
(β₯ S β₯ c)
(Ξ» x β β₯ T β₯ (c , x))
(Ξ» _ _ e' β hcng T _ _ (hrflαΆ C c , refl , e'))
(Ξ» x β β₯ t β₯ (c , x))
(Ξ» _ _ e' β hcng t _ _ (hrflαΆ C c , refl , e'))
(β₯ s β₯ c))
(hcng t _ _ (cng βͺ s β« _ _ e))
module π«πΎβ°ππΆ
(C : β£ π β£)
(m n : β)
(S : Fam m C)
(T : Fam n (C β[ m ] S))
(t : Elem (max m n) C (π«πΎ m n S T))
where
S' : Fam m (C β[ m ] S)
S' = π
S * S
T' : Fam n (C β[ m ] S β[ m ] S')
T' = (π
S ββ²[ m ] S) * T
e : β±πΆπ n β² (C β[ m ] S) β βͺ π S β« * T' ~ T
e = hcng T
t' : Elem (max m n) (C β[ m ] S) (π«πΎ m n S' T')
t' = coe (β°πβ―π (max m n))
((rflαΆ (C β[ m ] S) , ntrlπ«πΎ m n S T (π
S)))
(π
S *β t)
e' : β°πβ―π (max m n) β
(C β[ m ] S , π«πΎ m n S' T') , t' β
(C β[ m ] S , π
S * π«πΎ m n S T) , π
S *β t
e' = cohβ»ΒΉ (β°πβ―π (max m n))
{C β[ m ] S , π
S * π«πΎ m n S T}
{C β[ m ] S , π«πΎ m n S' T'}
((rflαΆ (C β[ m ] S) , ntrlπ«πΎ m n S T (π
S)))
(π
S *β t)
abstract
etaPf : β°πβ―π (max m n) β
(C , π«πΎ m n S (βͺ π S β« * T')) , ππΆπ m n S (πΆπ
π
m n S' T' t' (π S))
β (C , π«πΎ m n S T) , t
etaPf c c' e = htrs (β°π (max m n))
(PI.tyCong (pi m n) _ _ _ _ _ _ (rfl (π° m) (β₯ S β₯ c))
(Ξ» x x' u β hcng T (c , x) (c , x')
(hrflαΆ C c , refl , u)))
(hcng (π«πΎ m n S T) c c' e)
q
(hcng t c c' e)
where
q : β°π (max m n) β
(PI.ty (pi m n)
(β₯ S β₯ c)
(Ξ» x β β₯ T β₯ (c , x))
(Ξ» x x' u β
hcng (βͺ π S β« * T') (c , x) (c , x')
(hrflαΆ C c , refl , u)
))
,
PI.lam (pi m n) _ _ _
(Ξ» c' β PI.app (pi m n) _ _ _ (β₯ t' β₯ (c , c')) c')
(Ξ» x x' u β PI.appCong (pi m n) _ _ _ _ _ _ _ _ _ _
(hcng t' (c , x) (c , x') (hrflαΆ _ c , refl , u))
(hcng (π S) (c , x) (c , x') (hrflαΆ _ c , refl , u)))
β
(PI.ty (pi m n) (β₯ S β₯ c) (Ξ» x β β₯ T β₯ (c , x))
(Ξ» x x' u β hcng T (c , x) (c , x')
(hrflαΆ C c , refl , u)))
,
β₯ t β₯ c
q = htrs (β°π (max m n))
(PI.tyCong (pi m n) _ _ _ _ _ _ (rfl (π° m) (β₯ S β₯ c))
(Ξ» x x' u β hcng T (c , x) (c , x')
(hrflαΆ _ c , refl , u)))
(rfl (π° (max m n)) (β₯ π«πΎ m n S T β₯ c))
(PI.lamCong (pi m n) _ _ _ _ _ _ _ _ _ _
Ξ» x x' u β PI.appCong (pi m n) _ _ _ _ _ _ _ _ _ _
(e' (c , x) (c , x)
(hrflαΆ C c , refl , hrfl (β°π m) (β₯ S β₯ c) x)) u)
(PI.eta (pi m n) _ _ _ (β₯ t β₯ c))
β°π :
{C : β£ π β£}
(n : β)
(T : Fam n C)
(t t' : Elem n C T)
β
Fam n C
β₯ β°π n T t t' β₯ c =
EQ.ty (eq n) (β₯ T β₯ c) (β₯ t β₯ c) (β₯ t' β₯ c)
hcng (β°π n T t t') _ _ e = EQ.tyCong (eq n)
(hcng T _ _ e)
(hcng t _ _ e)
(hcng t' _ _ e)
ntrlβ°π :
{D C : β£ π β£}
(n : β)
(T : Fam n C)
(t t' : Elem n C T)
(f : Hom D C)
β
β±πΆπ n β² D β f * (β°π n T t t') ~ β°π n (f * T) (f *β t) (f *β t')
ntrlβ°π n T t t' f _ _ e = EQ.tyCong (eq n)
(hcng T _ _ (cng f _ _ e))
(hcng t _ _ (cng f _ _ e))
(hcng t' _ _ (cng f _ _ e))
ππ»π :
{C : β£ π β£}
(n : β)
(T : Fam n C)
(t : Elem n C T)
β
Elem n C (β°π n T t t)
β₯ ππ»π n _ t β₯ c = EQ.rfl (eq n) (β₯ t β₯ c)
hcng (ππ»π n T t) _ _ e =
EQ.rflCong (eq n) (hcng T _ _ e) (hcng t _ _ e)
ntrlππ»π :
{D C : β£ π β£}
(n : β)
(T : Fam n C)
(t : Elem n C T)
(f : Hom D C)
β
β°πβ―π n β
(D , f * (β°π n T t t)) , f *β (ππ»π n T t)
β
(D , β°π n (f * T) (f *β t) (f *β t)) , ππ»π n (f * T) (f *β t)
ntrlππ»π n T t f c c' e = EQ.rflCong (eq n)
(hcng T (β£ f β£ c) (β£ f β£ c') (cng f c c' e))
(hcng t (β£ f β£ c) (β£ f β£ c') (cng f c c' e))
πβ―π»πβ―πΈπ :
{C : β£ π β£}
(n : β)
(T : Fam n C)
(t t' : Elem n C T)
(_ : Elem n C (β°π n T t t'))
β
β°πβ―π n β² (C , T) β t ~ t'
πβ―π»πβ―πΈπ n T t t' e c c' u = htrs (β°π n)
(rfl (π° n) (β₯ T β₯ c))
(hcng T c c' u)
(EQ.reflect (eq n) (β₯ e β₯ c))
(hcng t' c c' u)
ππΎπ
:
{C : β£ π β£}
(n : β)
(T : Fam n C)
(t t' : Elem n C T)
(e e' : Elem n C (β°π n T t t'))
β
β°πβ―π n β² (C , β°π n T t t') β e ~ e'
ππΎπ
{C} n T t t' e e' c c' u = htrs (β°π n)
(rfl (π° n) (β₯ β°π n T t t' β₯ c))
(hcng (β°π n T t t') c c' u)
(EQ.uip (eq n) (β₯ e β₯ c) (β₯ e' β₯ c))
(hcng e' c c' u)
β°ππ
:
{C : β£ π β£}
β
Fam 0 C
β₯ β°ππ
β₯ _ = Emp
hcng β°ππ
_ _ _ = tt
β―ππ
:
{C : β£ π β£}
(n : β)
(S : Fam n C)
(e : Elem 0 C β°ππ
)
β
Elem n C S
β₯ β―ππ
_ _ e β₯ c = Γelim (β₯ e β₯ c)
hcng (β―ππ
_ _ e) c _ _ = Γelim (β₯ e β₯ c)
π©πΆπ :
{C : β£ π β£}
β
Fam 0 C
β₯ π©πΆπ β₯ _ = Nat
hcng π©πΆπ _ _ _ = tt
πβ―πβ΄ :
{C : β£ π β£}
β
Elem 0 C π©πΆπ
β₯ πβ―πβ΄ β₯ _ = 0
hcng πβ―πβ΄ _ _ _ = refl
πππΈπΈ :
{C : β£ π β£}
(t : Elem 0 C π©πΆπ)
β
Elem 0 C π©πΆπ
β₯ πππΈπΈ t β₯ c = 1+ (β₯ t β₯ c)
hcng (πππΈπΈ t) _ _ e = cong 1+ (hcng t _ _ e)
ntrlπππΈπΈ :
{D C : β£ π β£}
(t : Elem 0 C π©πΆπ)
(f : Hom D C)
β
β°πβ―π 0 β (D , π©πΆπ) , f *β πππΈπΈ t β
(D , π©πΆπ) , πππΈπΈ (f *β t)
ntrlπππΈπΈ t f c c' e =
cong 1+ (hcng t (β£ f β£ c) (β£ f β£ c') (cng f c c' e))
ππβ―πΈ :
{C : β£ π β£}
(n : β)
(S : Fam n (C β[ 0 ] π©πΆπ))
(sβ : Elem n C (βͺ πβ―πβ΄ β« * S))
(sβ : Elem n (C β[ 0 ] π©πΆπ β[ n ] S)
(π
S * πΈβ΄ππ (π
π©πΆπ) (πππΈπΈ (π π©πΆπ)) * S))
(s : Elem 0 C π©πΆπ)
β
Elem n C (βͺ s β« * S)
β₯ ππβ―πΈ n S sβ sβ s β₯ c = nrec n
(Ξ» m β β₯ S β₯ (c , m))
(β₯ sβ β₯ c)
(Ξ» m y β β₯ sβ β₯ ((c , m) , y))
(Ξ» n _ _ e β hcng sβ _ _
((hrflαΆ _ c , refl , refl) , refl , e))
(β₯ s β₯ c)
hcng (ππβ―πΈ n S sβ sβ s) c c' e = nrecCong{n}
{Ξ» m β β₯ S β₯ (c , m)}
{Ξ» m β β₯ S β₯ (c' , m)}
{β₯ sβ β₯ c}
{β₯ sβ β₯ c'}
{Ξ» m y β β₯ sβ β₯ ((c , m) , y)}
{Ξ» m y β β₯ sβ β₯ ((c' , m) , y)}
{Ξ» n _ _ e β hcng sβ _ _
((hrflαΆ _ c , refl , refl) , refl , e)}
{Ξ» n _ _ e β hcng sβ _ _
((hrflαΆ _ c' , refl , refl) , refl , e)}
(β₯ s β₯ c)
(β₯ s β₯ c')
(Ξ» _ β hcng S _ _ (e , refl , refl))
(hcng sβ _ _ e)
(Ξ» _ _ _ e' β hcng sβ _ _
((e , refl , refl) , refl , e'))
(hcng s _ _ e)
ntrlππβ―πΈ :
{D C : β£ π β£}
(n : β)
(S : Fam n (C β[ 0 ] π©πΆπ))
(sβ : Elem n C (βͺ πβ―πβ΄ β« * S))
(sβ : Elem n (C β[ 0 ] π©πΆπ β[ n ] S)
(π
S * (πΈβ΄ππ (π
π©πΆπ) (πππΈπΈ (π π©πΆπ))) * S))
(s : Elem 0 C π©πΆπ)
(f : Hom D C)
β
β°πβ―π n β
(D , f * βͺ s β« * S) , f *β (ππβ―πΈ n S sβ sβ s)
β
(D , βͺ f *β s β« * (f ββ²[ 0 ] π©πΆπ) * S) ,
ππβ―πΈ n
(f ββ²[ 0 ] π©πΆπ * S)
(f *β sβ)
(f ββ²[ 0 ] π©πΆπ ββ²[ n ] S *β sβ)
(f *β s)
ntrlππβ―πΈ n S sβ sβ s f c c' e = nrecCong{n}
{Ξ» m β β₯ S β₯ (β£ f β£ c , m)}
{Ξ» m β β₯ S β₯ (β£ f β£ c' , m)}
{β₯ sβ β₯ (β£ f β£ c)}
{β₯ sβ β₯ (β£ f β£ c')}
{Ξ» m x' β β₯ sβ β₯ ((β£ f β£ c , m) , x')}
{Ξ» m x' β β₯ sβ β₯ ((β£ f β£ c' , m) , x')}
{Ξ» _ _ _ e' β hcng sβ _ _
((hrflαΆ _ (β£ f β£ c) , refl , refl) , refl , e')}
{Ξ» _ _ _ e' β hcng sβ _ _
((hrflαΆ _ (β£ f β£ c') , refl , refl) , refl , e')}
(β₯ s β₯ (β£ f β£ c))
(β₯ s β₯ (β£ f β£ c'))
(Ξ» _ β hcng S _ _ (cng f c c' e , refl , refl))
(hcng sβ (β£ f β£ c) (β£ f β£ c') (cng f c c' e))
(Ξ» _ _ _ e' β hcng sβ _ _
((cng f c c' e , refl , refl) , refl , e'))
(hcng s (β£ f β£ c) (β£ f β£ c') (cng f c c' e))