Comment: Rules of MLTT without type formers
The rules from Figure in Bezem, Coquand, Huber
"A model of type theory in cubical sets".
But here the intepretation uses an arbitrary base category C..
(First those without type formers: 20 lemmas)

    Γ ⊢
-------------                         this is pscm-id_wf
  1: Γ ⟶ Γ

σ: Δ ⟶ Γ    δ: Θ -> Δ
------------------------              this is pscm-comp_wf
     σ δ : Θ ⟶ Γ

Γ ⊢ A   σ : Δ ⟶ Γ
----------------------                this is pscm-ap-type_wf
     Δ ⊢ A σ

Γ ⊢ t: A   σ: Δ ⟶ Γ
-----------------------               this is pscm-ap-term_wf
     Δ ⊢ t σA σ


-------------                         this is trivial-psc_wf
   () ⊢

Γ ⊢    Γ ⊢ A
-----------------                     this is psc-adjoin_wf
     Γ.A ⊢ 

     Γ ⊢ A
------------------                    this is psc-fst_wf
   p:  Γ.A ⟶ Γ

   Γ ⊢ A
-----------------                     this is psc-snd_wf
   Γ.A ⊢ q: Ap 

σ:Δ ⟶ Γ  Γ ⊢ A   Δ ⊢ u:A s
------------------------------        this is pscm-adjoin_wf
   ,u) ⊢ Δ ⟶ Γ.A

1 σ = σ = σ                         this is pscm-id-comp
(σ δ) ν = σ (δ ν)                     this is pscm-comp-assoc
[u] (1,u)                           this is pscm-id-adjoin
A                               this is pscm-ap-id-type
(A σ) δ (σ δ)                     this is pscm-ap-comp-type
1                               this is pscm-ap-id-term
(u σ) δ (σ δ)                     this is pscm-ap-comp-term 
u) δ (σ δu δ)                 this is pscm-adjoin-ap
u) = σ                          this is psc-fst-pscm-adjoin
u) u                          this is psc-snd-pscm-adjoin
(p,q) 1                             this is pscm-adjoin-fst-snd



Comment: Rules of MLTT type formers
The rules about type formers Π and ⌜Σ⌝ from Figure in Bezem, Coquand, Huber
"A model of type theory in cubical sets".
(Interpreted using an arbitrary base category C: 19 lemmas)

  Γ.A ⊢ B
-------------                         this is presheaf-pi_wf
 Γ ⊢ Π 

  Γ.A ⊢ B   Γ.A ⊢ b:B
------------------------              this is presheaf-lambda_wf
   Γ ⊢ λ: Π B  

  Γ.A ⊢ B
-------------                         this is presheaf-sigma_wf
 Γ ⊢ Σ B


 Γ.A ⊢ B  Γ ⊢ u:A  Γ ⊢ v:B[u]
------------------------------        this is presheaf-pair_wf
     Γ ⊢ (u,v): Σ B

  Γ ⊢ w: Σ B
----------------                      this is presheaf-fst_wf
  Γ ⊢ w.1: A

  Γ ⊢ w: Σ B
-----------------                     this is presheaf-snd_wf
  Γ ⊢ w.2: B[w.1]   

 Γ ⊢ w:Π B   Γ ⊢ u:A
------------------------              this is presheaf-app_wf
 Γ ⊢ app(w,u): B[u]  


(Π B)σ = Π (Aσ(B(σp,q))           this is pscm-presheaf-pi
b)σ = λ(b(σp,q))                    this is pscm-ap-presheaf-lambda  
app(w,u)δ app(wδ)               this is pscm-ap-presheaf-app
app(λb, u) b[u]                     this is presheaf-beta
= λ(app(wp,q))                      this is presheaf-eta
(Σ B)σ =  (Aσ(B(σp,q))            this is pscm-presheaf-sigma
(w.1)σ (wσ).1                       this is pscm-ap-presheaf-fst
(w.2)σ (wσ).2                       this is pscm-ap-presheaf-snd
(u,v)σ (uσ)                     this is pscm-presheaf-pair
(u,v).1 u                           this is presheaf-fst-pair
(u,v).2 v                           this is presheaf-snd-pair
(w.1,w.2) w                         this is presheaf-pair-eta


Definition: ps_context
__⊢ ==  Functor(op-cat(C);TypeCat')

Lemma: ps_context_wf
[C:SmallCategory]. (ps_context{j:l}(C) ∈ 𝕌{[i j'']})

Definition: small_ps_context
small_ps_context{i:l}(C) ==  Functor(op-cat(C);TypeCat)

Lemma: small_ps_context_wf
[C:SmallCategory]. (small_ps_context{j:l}(C) ∈ 𝕌{[i j']})

Lemma: small_ps_context_subtype
[C:SmallCategory]. (small_ps_context{j:l}(C) ⊆ps_context{j:l}(C))

Lemma: ps_context_cumulativity
[C:SmallCategory]. (ps_context{j:l}(C) ⊆ps_context{j':l}(C))

Lemma: ps_context_cumulativity2
[C:SmallCategory]. (ps_context{j:l}(C) ⊆ps_context{[i j]:l}(C))

Lemma: ps_contexts_equal
[C:SmallCategory]. ∀[X,Y:ps_context{j:l}(C)].
  Y ∈ ps_context{j:l}(C) 
  supposing Y ∈ (F:cat-ob(C) ⟶ 𝕌{j'} × (x:cat-ob(C) ⟶ y:cat-ob(C) ⟶ (cat-arrow(C) x) ⟶ (F x) ⟶ (F y)))

Definition: ext-eq-psc
X ≡ ==  ext-equal-presheaves(C;X;Y)

Lemma: ext-eq-psc_wf
[C:SmallCategory]. ∀[X,Y:ps_context{j:l}(C)].  (X ≡ Y ∈ ℙ{[i j']})

Definition: I_set
A(I) ==  I

Lemma: I_set_wf
[C:SmallCategory]. ∀[A:ps_context{j:l}(C)]. ∀[I:cat-ob(C)].  (A(I) ∈ 𝕌{j'})

Lemma: I_set_pair_redex_lemma
I,G,F:Top.  (<F, G>(I) I)

Definition: psc-restriction
f(s) ==  (snd(X)) s

Lemma: psc-restriction_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[I,J:cat-ob(C)]. ∀[f:cat-arrow(C) I]. ∀[s:X(I)].  (f(s) ∈ X(J))

Lemma: psc_restriction_pair_lemma
s,f,J,I,G,F:Top.  (f(s) s)

Lemma: ps_context-ext
[C:SmallCategory]
  {FM:F:cat-ob(C) ⟶ 𝕌{j'} × (I:cat-ob(C) ⟶ J:cat-ob(C) ⟶ (cat-arrow(C) I) ⟶ (F I) ⟶ (F J))| 
   let F,M FM 
   in (∀I:cat-ob(C). ∀s:FM(I).  (cat-id(C) I(s) s ∈ FM(I)))
      ∧ (∀I,J,K:cat-ob(C). ∀f:cat-arrow(C) I. ∀g:cat-arrow(C) J. ∀s:FM(I).
           (cat-comp(C) f(s) g(f(s)) ∈ FM(K)))}  ≡ ps_context{j:l}(C)

Definition: psc-predicate
psc-predicate(C; X; I,rho.P[I; rho]) ==  stable-element-predicate(C;X;I,rho.P[I; rho])

Lemma: psc-predicate_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[P:I:cat-ob(C) ⟶ X(I) ⟶ ℙ{[i j']}].
  (psc-predicate(C; X; I,rho.P[I;rho]) ∈ ℙ{[i j']})

Definition: sub-presheaf-set
I,rho.P[I; rho] ==  X|I,rho.P[I; rho]

Lemma: sub-presheaf-set_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[P:I:cat-ob(C) ⟶ X(I) ⟶ ℙ{j'}].
  I,rho.P[I;rho] ∈ ps_context{j:l}(C) supposing psc-predicate(C; X; I,rho.P[I;rho])

Lemma: sub-presheaf-set_functionality
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[P,Q:I:cat-ob(C) ⟶ X(I) ⟶ ℙ].
  I,rho.P[I;rho] ≡ I,rho.Q[I;rho] 
  supposing (∀I:cat-ob(C). ∀rho:X(I).  (P[I;rho] ⇐⇒ Q[I;rho])) ∧ psc-predicate(C; X; I,rho.P[I;rho])

Lemma: sub-presheaf-set-true
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)].  I,rho.True ≡ X

Lemma: sub-presheaf-set-and
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[P,Q:I:cat-ob(C) ⟶ X(I) ⟶ ℙ].
  I,rho.P[I;rho] I,rho.Q[I;rho] ≡ I,rho.P[I;rho] ∧ Q[I;rho] 
  supposing psc-predicate(C; X; I,rho.P[I;rho]) ∧ psc-predicate(C; X; I,rho.Q[I;rho])

Definition: sets
sets(C; X) ==  el(X)

Lemma: sets_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)].  (sets(C; X) ∈ small-category{[i j']:l})

Lemma: sets-ob
[C:SmallCategory]. ∀[X:Top].  (cat-ob(sets(C; X)) I:cat-ob(C) × X(I))

Lemma: sets-id
[C:SmallCategory]. ∀[X:Top].  (cat-id(sets(C; X)) ~ λA.(cat-id(C) (fst(A))))

Lemma: sets-arrow
[C:SmallCategory]. ∀[X:Top].
  (cat-arrow(sets(C; X)) ~ λAa,Bb. let A,a Aa in let B,b Bb in {f:cat-arrow(C) B| f(b) a ∈ (X A)} )

Lemma: sets-comp
[C:SmallCategory]. ∀[X:Top].  (cat-comp(sets(C; X)) ~ λAa,Bb,Dd,f,g. (cat-comp(C) (fst(Aa)) (fst(Bb)) (fst(Dd)) g))

Definition: Yoneda
Yoneda(I) ==  <λJ.(cat-arrow(C) I), λJ,K,f,g. (cat-comp(C) g)>

Lemma: Yoneda-is-rep-pre-sheaf
[C,I:Top].  (Yoneda(I) rep-pre-sheaf(C;I))

Lemma: Yoneda_wf
[C:SmallCategory]. ∀[I:cat-ob(C)].  (Yoneda(I) ∈ __⊢)

Lemma: Yoneda-restriction
[C,I,f,s,A,B:Top].  (f(s) cat-comp(C) s)

Definition: representable-psc
representable-psc(C) ==  {G:ps_context{1:l}(C)| ∃I:cat-ob(C). (G Yoneda(I) ∈ ps_context{1:l}(C))} 

Lemma: representable-psc_wf
[C:small-category{1:l}]. (representable-psc(C) ∈ 𝕌{3})

Definition: trivial-psc
() ==  <λJ.Unit, λJ,K,f,x. ⋅>

Lemma: trivial-psc_wf
[C:SmallCategory]. (() ∈ ps_context{j:l}(C))

Definition: discrete-set
discrete-set(A) ==  <λJ.A, λJ,K,f,x. x>

Lemma: discrete-set_wf
[C:SmallCategory]. ∀[A:𝕌{j}].  (discrete-set(A) ∈ ps_context{j:l}(C))

Definition: presheaf-false
False ==  discrete-set(Void)

Lemma: presheaf-false_wf
[C:SmallCategory]. (False ∈ ps_context{j:l}(C))

Definition: psc_map
A ⟶ ==  nat-trans(op-cat(C);TypeCat';A;B)

Lemma: psc_map_wf
[C:SmallCategory]. ∀[A,B:ps_context{j:l}(C)].  (psc_map{j:l}(C; A; B) ∈ 𝕌{[i j'']})

Lemma: psc_map_cumulativity
[C:SmallCategory]. ∀[G,H:ps_context{j:l}(C)].  (psc_map{j:l}(C; H; G) ⊆psc_map{j':l}(C; H; G))

Definition: ps-context-map
<rho> ==  λA,f. (Gamma rho)

Lemma: ps-context-map_wf
C:SmallCategory. ∀I:cat-ob(C). ∀Gamma:ps_context{j:l}(C). ∀rho:Gamma(I).  (<rho> ∈ psc_map{j:l}(C; Yoneda(I); Gamma))

Lemma: pscm-equal
[C:SmallCategory]. ∀[A,B:ps_context{j:l}(C)]. ∀[f:psc_map{j:l}(C; A; B)]. ∀[g:I:cat-ob(C) ⟶ A(I) ⟶ B(I)].
  g ∈ psc_map{j:l}(C; A; B) supposing g ∈ (I:cat-ob(C) ⟶ A(I) ⟶ B(I))

Lemma: pscm-equal2
[C:SmallCategory]. ∀[A,B:ps_context{j:l}(C)]. ∀[f,g:psc_map{j:l}(C; A; B)].
  g ∈ psc_map{j:l}(C; A; B) supposing ∀K:cat-ob(C). ∀x:A(K).  ((f x) (g x) ∈ B(K))

Lemma: psc-map-subtype
[C:SmallCategory]. ∀[A,B:ps_context{j:l}(C)].  (psc_map{j:l}(C; A; B) ⊆(I:cat-ob(C) ⟶ A(I) ⟶ B(I)))

Definition: pscm-ap
(s)x ==  x

Lemma: pscm-ap_wf
[C:SmallCategory]. ∀[X,Y:ps_context{j:l}(C)]. ∀[s:psc_map{j:l}(C; X; Y)]. ∀[I:cat-ob(C)]. ∀[x:X(I)].  ((s)x ∈ Y(I))

Lemma: pscm-ap-context-map
[I,J,a,rho,G:Top].  ((<rho>)a a(rho))

Definition: pscm-comp
==  λx.((G x) (F x))

Lemma: pscm-comp-sq
[C:SmallCategory]. ∀[A,B,E,F,G:Top].  (G G)

Lemma: pscm-comp_wf
[C:SmallCategory]. ∀[A,B,E:ps_context{j:l}(C)]. ∀[F:psc_map{j:l}(C; A; B)]. ∀[G:psc_map{j:l}(C; B; E)].
  (G F ∈ psc_map{j:l}(C; A; E))

Lemma: pscm-comp-assoc
[C:SmallCategory]. ∀[A,B,E,D:ps_context{j:l}(C)]. ∀[F:psc_map{j:l}(C; A; B)]. ∀[G:psc_map{j:l}(C; B; E)].
[H:psc_map{j:l}(C; E; D)].
  (H F ∈ psc_map{j:l}(C; A; D))

Definition: pscm-id
1(X) ==  λA,x. x

Lemma: pscm-id-sq
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)].  (1(X) identity-trans(op-cat(C);type-cat{j':l};X))

Lemma: pscm-id_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)].  (1(X) ∈ psc_map{j:l}(C; X; X))

Lemma: pscm-id-comp
[C:SmallCategory]. ∀[A,B:ps_context{j:l}(C)]. ∀[sigma:psc_map{j:l}(C; A; B)].
  ((sigma 1(A) sigma ∈ psc_map{j:l}(C; A; B)) ∧ (1(B) sigma sigma ∈ psc_map{j:l}(C; A; B)))

Lemma: pscm-id-comp-sq
[A,B,C,D,x,y,X,Y,Z:Top].  (1(D) y)

Lemma: pscm-ap-pscm-comp
Gamma,Delta,Z,s1,s2,I,alpha:Top.  ((s2 s1)alpha (s2)(s1)alpha)

Lemma: ps-context-map-1
[C:SmallCategory]. ∀[I:cat-ob(C)].  (<cat-id(C) I> 1(Yoneda(I)) ∈ Yoneda(I) ⟶ Yoneda(I))

Lemma: ps-ps-context-map-comp
[C:SmallCategory]. ∀[I,J,K:cat-ob(C)]. ∀[f:cat-arrow(C) I]. ∀[g:cat-arrow(C) J].
  (<cat-comp(C) f> = <f> o <g> ∈ Yoneda(K) ⟶ Yoneda(I))

Lemma: psc-restriction-id
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[I:cat-ob(C)]. ∀[s:X(I)].  (cat-id(C) I(s) s ∈ X(I))

Lemma: psc-restriction-when-id
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[I:cat-ob(C)]. ∀[s:X(I)]. ∀[f:cat-arrow(C) I].
  f(s) s ∈ X(I) supposing (cat-id(C) I) ∈ (cat-arrow(C) I)

Lemma: psc-restriction-comp
C:SmallCategory. ∀X:ps_context{j:l}(C). ∀I,J,K:cat-ob(C). ∀f:cat-arrow(C) I. ∀g:cat-arrow(C) J. ∀a:X(I).
  (g(f(a)) cat-comp(C) f(a) ∈ X(K))

Lemma: psc-restriction-comp2
C:SmallCategory. ∀X:ps_context{j:l}(C). ∀I,J1,J2,K:cat-ob(C). ∀f:cat-arrow(C) J1 I. ∀g:cat-arrow(C) J1. ∀a:X(I).
  g(f(a)) cat-comp(C) J1 f(a) ∈ X(K) supposing J1 J2 ∈ cat-ob(C)

Lemma: psc-map-is
[C:SmallCategory]. ∀[A,B:ps_context{j:l}(C)].
  (psc_map{j:l}(C; A; B) {trans:I:cat-ob(C) ⟶ A(I) ⟶ B(I)| 
                            ∀I,J:cat-ob(C). ∀g:cat-arrow(C) I.
                              ((λs.g(trans s)) s.(trans g(s))) ∈ (A(I) ⟶ B(J)))} )

Lemma: pscm-ap-restriction
C:SmallCategory. ∀X,Y:ps_context{j:l}(C). ∀s:psc_map{j:l}(C; X; Y). ∀I,J:cat-ob(C). ∀f:cat-arrow(C) I. ∀a:X(I).
  (f((s)a) (s)f(a) ∈ Y(J))

Definition: sub_ps_context
Y ⊆ ==  1(Y) ∈ Y ⟶ X

Lemma: sub_ps_context_wf
[C:SmallCategory]. ∀[Y,X:ps_context{j:l}(C)].  (sub_ps_context{j:l}(C; Y; X) ∈ 𝕌{[i j'']})

Lemma: sub_ps_context_transitivity
[C:SmallCategory]. ∀[X,Y,Z:ps_context{j:l}(C)].
  sub_ps_context{j:l}(C; Z; X) supposing sub_ps_context{j:l}(C; Z; Y) ∧ sub_ps_context{j:l}(C; Y; X)

Lemma: sub_ps_context_weakening
[C:SmallCategory]. ∀[X,Z:ps_context{j:l}(C)].  sub_ps_context{j:l}(C; Z; X) supposing X ∈ ps_context{j:l}(C)

Lemma: sub_ps_context_self
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)].  sub_ps_context{j:l}(C; X; X)

Lemma: implies-sub_ps_context
[C:SmallCategory]. ∀[Y,X:ps_context{j:l}(C)].
  (sub_ps_context{j:l}(C; Y; X)) supposing 
     ((∀A,B:cat-ob(C). ∀g:cat-arrow(C) A. ∀rho:Y(A).  (g(rho) g(rho) ∈ X(B))) and 
     (∀I:cat-ob(C). (Y(I) ⊆X(I))))

Lemma: subset-I_set
[C:SmallCategory]. ∀[X,Y:ps_context{j:l}(C)].  ∀I:cat-ob(C). (Y(I) ⊆X(I)) supposing sub_ps_context{j:l}(C; Y; X)

Lemma: ps-subset-restriction
[C:SmallCategory]. ∀[X,Y:ps_context{j:l}(C)].
  ∀[I,J:cat-ob(C)]. ∀[f:cat-arrow(C) I]. ∀[a:Y(I)].  (f(a) f(a) ∈ X(J)) supposing sub_ps_context{j:l}(C; Y; X)

Lemma: psc_map_subtype
[C:SmallCategory]. ∀[X,Y,Z:ps_context{j:l}(C)].
  psc_map{j:l}(C; Z; X) ⊆psc_map{j:l}(C; Z; Y) supposing sub_ps_context{j:l}(C; X; Y)

Lemma: psc_map_subtype2
[C:SmallCategory]. ∀[X,Y,Z:ps_context{j:l}(C)].
  psc_map{j:l}(C; X; Z) ⊆psc_map{j:l}(C; Y; Z) supposing sub_ps_context{j:l}(C; Y; X)

Lemma: psc_map_subtype3
[C:SmallCategory]. ∀[X,Y,Z,U:ps_context{j:l}(C)].
  (psc_map{j:l}(C; X; Z) ⊆psc_map{j:l}(C; Y; U)) supposing 
     (sub_ps_context{j:l}(C; Y; X) and 
     sub_ps_context{j:l}(C; Z; U))

Lemma: psc_map_cumulativity2
[C:SmallCategory]. ∀[X,Y,Z,U:ps_context{j:l}(C)].
  (psc_map{j:l}(C; X; Z) ⊆psc_map{j:l}(C; Y; U)) supposing 
     (sub_ps_context{j:l}(C; Y; X) and 
     sub_ps_context{j:l}(C; Z; U))

Definition: presheaf_type
presheaf_type{i:l}(C; X) ==  presheaf{i':l}(sets(C; X))

Lemma: presheaf_type_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)].  (presheaf_type{i:l}(C; X) ∈ 𝕌{[i'' j']})

Definition: presheaf-type
{X ⊢ _} ==
  {AF:A:I:cat-ob(C) ⟶ X(I) ⟶ Type × (I:cat-ob(C)
                                      ⟶ J:cat-ob(C)
                                      ⟶ f:(cat-arrow(C) I)
                                      ⟶ a:X(I)
                                      ⟶ (A a)
                                      ⟶ (A f(a)))| 
   let A,F AF 
   in (∀I:cat-ob(C). ∀a:X(I). ∀u:A a.  ((F (cat-id(C) I) u) u ∈ (A a)))
      ∧ (∀I,J,K:cat-ob(C). ∀f:cat-arrow(C) I. ∀g:cat-arrow(C) J. ∀a:X(I). ∀u:A a.
           ((F (cat-comp(C) f) u) (F f(a) (F u)) ∈ (A cat-comp(C) f(a))))} 

Lemma: presheaf-type_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)].  (X ⊢  ∈ 𝕌{[j' i']})

Lemma: presheaf-type-equal
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:A:I:cat-ob(C) ⟶ X(I) ⟶ Type × (I:cat-ob(C)
                                                                                               ⟶ J:cat-ob(C)
                                                                                               ⟶ f:(cat-arrow(C) I)
                                                                                               ⟶ a:X(I)
                                                                                               ⟶ (A a)
                                                                                               ⟶ (A f(a)))].
  B ∈ {X ⊢ _} 
  supposing A
  B
  ∈ (A:I:cat-ob(C) ⟶ X(I) ⟶ Type × (I:cat-ob(C)
                                     ⟶ J:cat-ob(C)
                                     ⟶ f:(cat-arrow(C) I)
                                     ⟶ a:X(I)
                                     ⟶ (A a)
                                     ⟶ (A f(a))))

Lemma: presheaf-type-equal2
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A,B:{X ⊢ _}].
  B ∈ {X ⊢ _} 
  supposing A
  B
  ∈ (A:I:cat-ob(C) ⟶ X(I) ⟶ Type × (I:cat-ob(C)
                                     ⟶ J:cat-ob(C)
                                     ⟶ f:(cat-arrow(C) I)
                                     ⟶ a:X(I)
                                     ⟶ (A a)
                                     ⟶ (A f(a))))

Definition: presheaf-type-iso
presheaf-type-iso(X) ==  λF.<λI,rho. (F <I, rho>), λI,J,f,a. (F <I, a> <J, f(a)> f)>

Lemma: presheaf-type-iso_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)].  (presheaf-type-iso(X) ∈ presheaf_type{i:l}(C; X) ⟶ {X ⊢_})

Definition: presheaf-type-rev-iso
presheaf-type-rev-iso(X) ==
  λF.Presheaf(Set(p) =(fst(F)) (fst(p)) (snd(p));
              Morphism(p,q,f,a) (snd(F)) (fst(p)) (fst(q)) (snd(p)) a)

Lemma: presheaf-type-rev-iso_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)].  (presheaf-type-rev-iso(X) ∈ {X ⊢ _} ⟶ presheaf_type{i:l}(C; X))

Lemma: presheaf-type-iso-inverse
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)].
  ((presheaf-type-rev-iso(X) presheaf-type-iso(X)) x.x) ∈ (presheaf_type{i:l}(C; X) ⟶ presheaf_type{i:l}(C; X)))

Lemma: presheaf-type-iso-inverse2
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)].
  ((presheaf-type-iso(X) presheaf-type-rev-iso(X)) x.x) ∈ ({X ⊢ _} ⟶ {X ⊢ _}))

Lemma: presheaf-type-cumulativity
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)].  ({X ⊢ _} ⊆{X ⊢_})

Lemma: presheaf-type-cumulativity2
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)].  ({X ⊢ _} ⊆presheaf-type{[j i]:l}(C; X))

Definition: presheaf-type-at
A(a) ==  (fst(A)) a

Lemma: presheaf-type-at_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[I:cat-ob(C)]. ∀[a:X(I)].  (A(a) ∈ Type)

Lemma: presheaf_type_at_pair_lemma
a,I,B,A:Top.  (<A, B>(a) a)

Definition: presheaf-type-ap-morph
(u f) ==  (snd(A)) u

Lemma: presheaf-type-ap-morph_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[I,J:cat-ob(C)]. ∀[f:cat-arrow(C) I]. ∀[a:X(I)].
[u:A(a)].
  ((u f) ∈ A(f(a)))

Lemma: presheaf_type_ap_morph_pair_lemma
u,a,f,J,I,G,F:Top.  ((u f) u)

Lemma: presheaf-type-ap-morph-comp
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[I,J,K:cat-ob(C)]. ∀[f:cat-arrow(C) I].
[g:cat-arrow(C) J]. ∀[a:X(I)]. ∀[u:A(a)].
  (((u f) f(a) g) (u cat-comp(C) f) ∈ A(cat-comp(C) f(a)))

Lemma: presheaf-type-ap-morph-comp-eq
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[I,J,K:cat-ob(C)]. ∀[f:cat-arrow(C) I].
[g:cat-arrow(C) J]. ∀[a:X(I)]. ∀[b:X(J)]. ∀[u:A(a)].
  ((u f) g) (u cat-comp(C) f) ∈ A(cat-comp(C) f(a)) supposing f(a) ∈ X(J)

Lemma: presheaf-type-ap-morph-id
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[I:cat-ob(C)]. ∀[f:cat-arrow(C) I]. ∀[a:X(I)]. ∀[u:A(a)].
  (u f) u ∈ A(a) supposing (cat-id(C) I) ∈ (cat-arrow(C) I)

Lemma: presheaf-type-equal3
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A,B:{X ⊢ _}].
  (A B ∈ {X ⊢ _}) supposing 
     ((∀I:cat-ob(C)
         ∀[rho:X(I)]. ∀[J:cat-ob(C)]. ∀[f:cat-arrow(C) I]. ∀[u:A(rho)].  ((u rho f) (u rho f) ∈ A(f(rho)))) and 
     (∀I:cat-ob(C). ∀[rho:X(I)]. (A(rho) B(rho) ∈ Type)))

Definition: pscm-ap-type
(AF)s ==  let A,F AF in <λI,a. (A (s)a), λI,J,f,a,u. (F (s)a u)>

Lemma: pscm-ap-type_wf
[C:SmallCategory]. ∀[Gamma,Delta:ps_context{j:l}(C)]. ∀[A:{Gamma ⊢ _}]. ∀[s:psc_map{j:l}(C; Delta; Gamma)].
  ((A)s ∈ Delta ⊢ )

Definition: pscm-type-ap
pscm-type-ap(A;s) ==  (A)s

Lemma: pscm-type-ap_wf
[C:SmallCategory]. ∀[Gamma,Delta:ps_context{j:l}(C)]. ∀[s:psc_map{j:l}(C; Delta; Gamma)]. ∀[A:{Gamma ⊢ _}].
  (pscm-type-ap(A;s) ∈ Delta ⊢ )

Lemma: ps-context-map-ap-type
[C:SmallCategory]. ∀[I:cat-ob(C)]. ∀[Gamma:ps_context{j:l}(C)]. ∀[rho:Gamma(I)]. ∀[A:{Gamma ⊢ _}].
  ((A)<rho> ∈ Yoneda(I) ⊢ )

Lemma: pscm-ap-type-at
[B,s,x,K:Top].  ((B)s(x) B((s)x))

Lemma: pscm-ap-id-type
[C:SmallCategory]. ∀[Gamma:ps_context{j:l}(C)]. ∀[A:{Gamma ⊢ _}].  ((A)1(Gamma) A ∈ {Gamma ⊢ _})

Lemma: pscm-ap-type-is-id
[C:SmallCategory]. ∀[Gamma:ps_context{j:l}(C)]. ∀[A:{Gamma ⊢ _}]. ∀[s:psc_map{j:l}(C; Gamma; Gamma)].
  (A)s A ∈ {Gamma ⊢ _} supposing 1(Gamma) ∈ psc_map{j:l}(C; Gamma; Gamma)

Lemma: pscm-comp-type
[Gamma,Delta,Z,s1,s2,A:Top].  ((A)s2 s1 ((A)s2)s1)

Lemma: pscm-type-comp
[Gamma,A,Delta,Z,s1,s2:Top].  (((A)s2)s1 (A)s2 s1)

Lemma: pscm-ap-comp-type
[C:SmallCategory]. ∀[Gamma,Delta,Z:ps_context{j:l}(C)]. ∀[s1:psc_map{j:l}(C; Z; Delta)]. ∀[s2:psc_map{j:l}(C;
                                                                                                            Delta;
                                                                                                            Gamma)].
[A:{Gamma ⊢ _}].
  ((A)s2 s1 ((A)s2)s1 ∈ {Z ⊢ _})

Lemma: pscm-ap-comp-type-sq
[Gamma,Delta,Z,s1,s2,A:Top].  ((A)s2 s1 ((A)s2)s1)

Lemma: pscm-ap-comp-type-sq2
[C:SmallCategory]. ∀[Gamma:ps_context{j:l}(C)]. ∀[A:{Gamma ⊢ _}]. ∀[s1,s2:Top].  (((A)s2)s1 (A)s2 s1)

Lemma: pscm-presheaf-type-ap-morph
[A,I,J,f,a,u,s:Top].  ((u f) (u (s)a f))

Definition: presheaf-term
{X ⊢ _:A} ==
  {u:I:cat-ob(C) ⟶ a:X(I) ⟶ A(a)| 
   ∀I,J:cat-ob(C). ∀f:cat-arrow(C) I. ∀a:X(I).  ((u f) (u f(a)) ∈ A(f(a)))} 

Lemma: presheaf-term_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}].  ({X ⊢ _:A} ∈ 𝕌{[i j']})

Lemma: presheaf-term_wf2
[C:SmallCategory]. ∀[X:ps_context{[i j]:l}(C)]. ∀[A:{X ⊢ _}].  ({X ⊢ _:A} ∈ 𝕌{[i' j']})

Definition: presheaf-term-at
u(a) ==  a

Lemma: presheaf-term-at_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[u:{X ⊢ _:A}]. ∀[I:cat-ob(C)]. ∀[a:X(I)].  (u(a) ∈ A(a))

Lemma: presheaf-term-at-morph
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[u:{X ⊢ _:A}]. ∀[I:cat-ob(C)]. ∀[a:X(I)]. ∀[J:cat-ob(C)].
[f:cat-arrow(C) I].
  ((u(a) f) u(f(a)) ∈ A(f(a)))

Lemma: presheaf-term-equal
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[u:{X ⊢ _:A}]. ∀[z:I:cat-ob(C) ⟶ a:X(I) ⟶ A(a)].
  z ∈ {X ⊢ _:A} supposing z ∈ (I:cat-ob(C) ⟶ a:X(I) ⟶ A(a))

Lemma: presheaf-term-equal2
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[u,z:{X ⊢ _:A}].
  z ∈ {X ⊢ _:A} supposing ∀I:cat-ob(C). ∀a:X(I).  ((u a) (z a) ∈ A(a))

Definition: ps-canonical-section
ps-canonical-section(Gamma;A;I;rho;a) ==  λK,f. (a rho f)

Lemma: ps-canonical-section_wf
[C:SmallCategory]. ∀[Gamma:ps_context{j:l}(C)]. ∀[A:{Gamma ⊢ _}]. ∀[I:cat-ob(C)]. ∀[rho:Gamma(I)]. ∀[a:A(rho)].
  (ps-canonical-section(Gamma;A;I;rho;a) ∈ {Yoneda(I) ⊢ _:(A)<rho>})

Lemma: ps-canonical-section-at
[Gamma,A,I,rho,a,J,x:Top].  (ps-canonical-section(Gamma;A;I;rho;a)(x) (a rho x))

Definition: pscm-ap-term
(t)s ==  λI,a. (t (s)a)

Lemma: pscm-ap-term_wf
[C:SmallCategory]. ∀[Delta,Gamma:ps_context{j:l}(C)]. ∀[A:{Gamma ⊢ _}]. ∀[s:psc_map{j:l}(C; Delta; Gamma)].
[t:{Gamma ⊢ _:A}].
  ((t)s ∈ {Delta ⊢ _:(A)s})

Lemma: pscm-ap-term-at
[J,s,rho,t:Top].  ((t)s(rho) t((s)rho))

Lemma: pscm-ap-id-term
[C:SmallCategory]. ∀[Gamma:ps_context{j:l}(C)]. ∀[A:{Gamma ⊢ _}]. ∀[t:{Gamma ⊢ _:A}].
  ((t)1(Gamma) t ∈ {Gamma ⊢ _:A})

Lemma: pscm-comp-term
[Gamma,Delta,Z,s1,s2,t:Top].  ((t)s2 s1 ((t)s2)s1)

Lemma: pscm-ap-comp-term-sq
[Gamma,Delta,Z,s1,s2,t:Top].  ((t)s2 s1 ((t)s2)s1)

Lemma: pscm-ap-comp-term-sq2
[s1,s2,t:Top].  (((t)s2)s1 (t)s2 s1)

Lemma: pscm-ap-comp-term
[C:SmallCategory]. ∀[Gamma,Delta,Z:ps_context{j:l}(C)]. ∀[s1:psc_map{j:l}(C; Z; Delta)]. ∀[s2:psc_map{j:l}(C;
                                                                                                            Delta;
                                                                                                            Gamma)].
[A:{Gamma ⊢ _}]. ∀[t:{Gamma ⊢ _:A}].
  ((t)s2 s1 ((t)s2)s1 ∈ {Z ⊢ _:(A)s2 s1})

Lemma: ps-context-map-comp2
[C:SmallCategory]. ∀[G:ps_context{j:l}(C)]. ∀[I,J:cat-ob(C)]. ∀[f:cat-arrow(C) I]. ∀[a:G(I)].
  (<a> o <f> = <f(a)> ∈ psc_map{[i j]:l}(C; Yoneda(J); G))

Lemma: pscm-comp-context-map
[C:SmallCategory]. ∀[Gamma,Delta:ps_context{j:l}(C)]. ∀[sigma:psc_map{j:l}(C; Delta; Gamma)]. ∀[I:cat-ob(C)].
[rho:Delta(I)].
  (sigma o <rho> = <(sigma)rho> ∈ psc_map{[i j]:l}(C; Yoneda(I); Gamma))

Definition: psc-adjoin
X.A ==  <λI.(alpha:X(I) × A(alpha)), λI,J,f,p. <f(fst(p)), (snd(p) fst(p) f)>>

Lemma: psc-adjoin-wf
[C:SmallCategory]. ∀[Gamma:ps_context{j:l}(C)]. ∀[A:{Gamma ⊢_}].  (Gamma.A ∈ ps_context{[i j]:l}(C))

Lemma: psc-adjoin_wf
[C:SmallCategory]. ∀[Gamma:ps_context{j:l}(C)]. ∀[A:{Gamma ⊢ _}].  (Gamma.A ∈ ps_context{[i j]:l}(C))

Lemma: psc-adjoin-I_set
[Gamma,A,I:Top].  (Gamma.A(I) alpha:Gamma(I) × A(alpha))

Definition: psc-adjoin-set
(v;u) ==  <v, u>

Lemma: psc-adjoin-set_wf
C:SmallCategory. ∀X:ps_context{j:l}(C). ∀A:{X ⊢ _}. ∀J:cat-ob(C). ∀v:X(J). ∀u:A(v).  ((v;u) ∈ X.A(J))

Lemma: psc-adjoin-set-restriction
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[J,K,g,v,u:Top].  (g((v;u)) (g(v);(u g)))

Definition: psc-fst
==  λI,p. (fst(p))

Lemma: psc-fst_wf
[C:SmallCategory]. ∀[Gamma:ps_context{j:l}(C)]. ∀[A:{Gamma ⊢ _}].  (p ∈ psc_map{[i j]:l}(C; Gamma.A; Gamma))

Definition: psc-snd
==  λI,p. (snd(p))

Lemma: psc-snd_wf
[C:SmallCategory]. ∀[Gamma:ps_context{j:l}(C)]. ∀[A:{Gamma ⊢ _}].  (q ∈ {Gamma.A ⊢ _:(A)p})

Lemma: cc_fst_adjoin_set_lemma
y,x,J:Top.  ((p)(x;y) x)

Lemma: cc_snd_adjoin_set_lemma
y,x,J:Top.  ((q)(x;y) y)

Lemma: csm_comp_fst_adjoin_set_lemma
y,x,K,s,X,B,A:Top.  ((s p)(x;y) (s)x)

Lemma: csm_comp_snd_adjoin-set_lemma
y,x,K,s,X,B,A:Top.  ((s q)(x;y) (s)y)

Definition: psc-fstfst
pp ==  λI,rho. (fst(fst(rho)))

Lemma: psc-fstfst_wf
[C:SmallCategory]. ∀[Gamma:ps_context{j:l}(C)]. ∀[A:{Gamma ⊢ _}]. ∀[B:{Gamma.A ⊢ _}].
  (pp ∈ psc_map{[i j]:l}(C; Gamma.A.B; Gamma))

Definition: typed-psc-fst
tp{i:l} ==  p

Lemma: typed-psc-fst_wf
[C:SmallCategory]. ∀[G:ps_context{j:l}(C)]. ∀[A:{G ⊢ _}].  (tp{i:l} ∈ psc_map{[i j]:l}(C; G.A; G))

Definition: typed-psc-snd
tq ==  q

Lemma: typed-psc-snd_wf
C:SmallCategory. ∀G:ps_context{j:l}(C). ∀A:{G ⊢ _}.  (tq ∈ {G.A ⊢ _:(A)tp{i:l}})

Definition: psc-m2
q2 ==  (q)p

Lemma: psc-m2_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}].  (q2 ∈ {X.A.B ⊢ _:((A)p)p})

Definition: psc-m3
q3 ==  (q2)p

Lemma: psc-m3_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[E:{X.A.B ⊢ _}].
  (q3 ∈ {X.A.B.E ⊢ _:(((A)p)p)p})

Definition: psc-m4
q4 ==  (q3)p

Lemma: psc-m4_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[E:{X.A.B ⊢ _}]. ∀[D:{X.A.B.E ⊢ _}].
  (q4 ∈ {X.A.B.E.D ⊢ _:((((A)p)p)p)p})

Lemma: pscm-ap-term-p
[C:SmallCategory]. ∀[Gamma:ps_context{j:l}(C)]. ∀[A,T:{Gamma ⊢ _}]. ∀[t:{Gamma ⊢ _:A}].  ((t)p ∈ {Gamma.T ⊢ _:(A)p})

Lemma: pscm-type-at
s,A,I,alpha:Top.  ((A)s(alpha) A((s)alpha))

Definition: pscm-adjoin
(s;u) ==  λI,a. <(s)a, a>

Lemma: pscm-adjoin-wf
[C:SmallCategory]. ∀[Gamma,Delta:ps_context{j:l}(C)]. ∀[A:{Gamma ⊢_}]. ∀[sigma:psc_map{j:l}(C; Delta; Gamma)].
[u:{Delta ⊢ _:(A)sigma}].
  ((sigma;u) ∈ psc_map{[i j]:l}(C; Delta; Gamma.A))

Lemma: pscm-adjoin_wf
[C:SmallCategory]. ∀[Gamma,Delta:ps_context{j:l}(C)]. ∀[A:{Gamma ⊢ _}]. ∀[sigma:psc_map{j:l}(C; Delta; Gamma)].
[u:{Delta ⊢ _:(A)sigma}].
  ((sigma;u) ∈ psc_map{[i j]:l}(C; Delta; Gamma.A))

Lemma: pscm-adjoin-comp
[Gamma,Delta,X,A,sigma,u,g:Top].  ((sigma;u) (sigma g;(u)g))

Lemma: pscm-adjoin-ap
[sigma,u,I,del:Top].  (((sigma;u))del ((sigma)del;(u)del))

Definition: pscm-id-adjoin
[u] ==  (1(X);u)

Lemma: pscm-id-adjoin-wf
[C:SmallCategory]. ∀[Gamma:ps_context{j:l}(C)]. ∀[A:{Gamma ⊢_}]. ∀[u:{Gamma ⊢ _:A}].
  ([u] ∈ psc_map{[i j]:l}(C; Gamma; Gamma.A))

Lemma: pscm-id-adjoin_wf
[C:SmallCategory]. ∀[Gamma:ps_context{j:l}(C)]. ∀[A:{Gamma ⊢ _}]. ∀[u:{Gamma ⊢ _:A}].
  ([u] ∈ psc_map{[i j]:l}(C; Gamma; Gamma.A))

Lemma: pscm-id-adjoin-ap
X,u,I,a:Top.  (([u])a (a;u a))

Lemma: psc-fst-pscm-adjoin-sq
[Gamma,Delta,X,sigma,u:Top].  (p (sigma;u) sigma 1(Delta))

Lemma: psc-fst-pscm-adjoin
[C:SmallCategory]. ∀[Gamma,Delta:ps_context{j:l}(C)]. ∀[A:{Gamma ⊢ _}]. ∀[sigma:psc_map{j:l}(C; Delta; Gamma)].
[u:{Delta ⊢ _:(A)sigma}].
  (p (sigma;u) sigma ∈ psc_map{j:l}(C; Delta; Gamma))

Lemma: ps-cc_snd_csm_id_adjoin_lemma
u,G:Top.  ((q)[u] (u)1(G))

Lemma: ps-typed_cc_snd_id_adjoin_lemma
A,G,u,X:Top.  ((tq)[u] (u)1(X))

Lemma: ps-csm_id_adjoin_fst_type_lemma
A,t,X:Top.  (((A)p)[t] (A)1(X))

Lemma: ps-csm_id_adjoin_fst_term_lemma
a,t,X:Top.  (((a)p)[t] (a)1(X))

Lemma: ps-csm_id_ap_term_lemma
t,X,s:Top.  (((t)1(X))s (t)s)

Lemma: psc-snd-pscm-adjoin-sq
[G,sigma,u:Top].  ((q)(sigma;u) (u)1(G))

Lemma: psc-snd-pscm-adjoin
[C:SmallCategory]. ∀[Gamma,Delta:ps_context{j:l}(C)]. ∀[A:{Gamma ⊢ _}]. ∀[sigma:psc_map{j:l}(C; Delta; Gamma)].
[u:{Delta ⊢ _:(A)sigma}].
  ((q)(sigma;u) u ∈ {Delta ⊢ _:(A)sigma})

Lemma: pscm-adjoin-fst-snd
[C:SmallCategory]. ∀[Gamma:ps_context{j:l}(C)]. ∀[A:{Gamma ⊢ _}].
  ((p;q) 1(Gamma.A) ∈ psc_map{[i j]:l}(C; Gamma.A; Gamma.A))

Lemma: pscm-ap-type-fst-adjoin
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[B:{X ⊢ _}]. ∀[s,u:Top].  (((B)p)(s;u) (B)s)

Lemma: pscm-ap-type-fst-id-adjoin
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[B:{X ⊢ _}]. ∀[u:Top].  (((B)p)[u] B ∈ {X ⊢ _})

Lemma: pscm-id-adjoin-ap-type
C:SmallCategory. ∀Gamma,Delta:ps_context{j:l}(C). ∀A:{Gamma ⊢ _}. ∀B:{Gamma.A ⊢ _}.
sigma:psc_map{j:l}(C; Delta; Gamma). ∀u:{Delta ⊢ _:(A)sigma}.
  (((B)(sigma p;q))[u] (B)(sigma;u) ∈ {Delta ⊢ _})

Lemma: ps-csm_ap_term_fst_adjoin_lemma
zz,yy,xx:Top.  (((zz)p)(xx;yy) (zz)xx)

Lemma: pscm-ap-term-snd-adjoin
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[u:{X ⊢ _:A}]. ∀[xx:Top].  ((q)(xx;u) u ∈ {X ⊢ _:A})

Lemma: pscm-adjoin-id-adjoin
[B,xx,s,X,Y,Z:Top].  (((B)(s p;q))[xx] (B)(s;xx))

Definition: pscm+
tau+ ==  (tau p;q)

Lemma: pscm+_wf
[C:SmallCategory]. ∀[H,K:ps_context{j:l}(C)]. ∀[A:{H ⊢ _}]. ∀[tau:psc_map{j:l}(C; K; H)].
  (tau+ ∈ psc_map{[i j]:l}(C; K.(A)tau; H.A))

Lemma: p-pscm+-type
[H,K,A,B,tau:Top].  (((A)p)tau+ ((A)tau)p)

Lemma: pcsm+-p-type
[C,H,K,A,B,tau:Top].  (((A)p)(tau+ p;q) ((A)tau+)p)

Lemma: p-pscm+-term
[H,K,A,t,tau:Top].  (((t)p)tau+ ((t)tau)p)

Lemma: pcsm+-p-term
[C,H,K,t,B,tau:Top].  (((t)p)(tau+ p;q) ((t)tau+)p)

Lemma: q-pscm+
[H,K,A,tau:Top].  ((q)tau+ q)

Lemma: pscm-adjoin-p-q
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}].  ((B)(p;q) B ∈ {X.A ⊢ _})

Definition: pscm-swap
pscm-swap(G;A;B) ==  (p+;(q)p)

Lemma: pscm-swap_wf
[C:SmallCategory]. ∀[G:ps_context{j:l}(C)]. ∀[A,B:{G ⊢ _}].
  (pscm-swap(G;A;B) ∈ psc_map{[i j]:l}(C; G.A.(B)p; G.B.(A)p))

Definition: presheaf-pi-family
presheaf-pi-family(C; X; A; B; I; a) ==
  {w:J:cat-ob(C) ⟶ f:(cat-arrow(C) I) ⟶ u:A(f(a)) ⟶ B((f(a);u))| 
   ∀J,K:cat-ob(C). ∀f:cat-arrow(C) I. ∀g:cat-arrow(C) J. ∀u:A(f(a)).
     ((w (f(a);u) g) (w (cat-comp(C) f) (u f(a) g)) ∈ B(g((f(a);u))))} 

Lemma: presheaf-pi-family_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[I:cat-ob(C)]. ∀[a:X(I)].
  (presheaf-pi-family(C; X; A; B; I; a) ∈ Type)

Lemma: presheaf-pi-family-comp
C:SmallCategory. ∀X,Delta:ps_context{j:l}(C). ∀s:psc_map{j:l}(C; Delta; X). ∀I,J:cat-ob(C). ∀f:cat-arrow(C) I.
a:Delta(I). ∀A:{X ⊢ _}. ∀B:{X.A ⊢ _}. ∀w:presheaf-pi-family(C; X; A; B; I; (s)a).
  K,g. (w (cat-comp(C) f)) ∈ presheaf-pi-family(C; X; A; B; J; (s)f(a)))

Lemma: pscm-presheaf-pi-family
C:SmallCategory. ∀X,Delta:ps_context{j:l}(C). ∀A:{X ⊢ _}. ∀B:{X.A ⊢ _}. ∀s:psc_map{j:l}(C; Delta; X). ∀I:cat-ob(C).
a:Delta(I).
  (presheaf-pi-family(C; X; A; B; I; (s)a) presheaf-pi-family(C; Delta; (A)s; (B)(s p;q); I; a) ∈ Type)

Definition: presheaf-fun-family
presheaf-fun-family(C; X; A; B; I; a) ==
  {w:J:cat-ob(C) ⟶ f:(cat-arrow(C) I) ⟶ u:A(f(a)) ⟶ B(f(a))| 
   ∀J,K:cat-ob(C). ∀f:cat-arrow(C) I. ∀g:cat-arrow(C) J. ∀u:A(f(a)).
     ((w f(a) g) (w (cat-comp(C) f) (u f(a) g)) ∈ B(g(f(a))))} 

Lemma: presheaf-fun-family_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A,B:{X ⊢ _}]. ∀[I:cat-ob(C)]. ∀[a:X(I)].
  (presheaf-fun-family(C; X; A; B; I; a) ∈ Type)

Lemma: presheaf-fun-family-comp
C:SmallCategory. ∀X,Delta:ps_context{j:l}(C). ∀s:psc_map{j:l}(C; Delta; X). ∀I,J:cat-ob(C). ∀f:cat-arrow(C) I.
a:Delta(I). ∀A,B:{X ⊢ _}. ∀w:presheaf-fun-family(C; X; A; B; I; (s)a).
  K,g. (w (cat-comp(C) f)) ∈ presheaf-fun-family(C; X; A; B; J; (s)f(a)))

Lemma: pscm-presheaf-fun-family
C:SmallCategory. ∀X,Delta:ps_context{j:l}(C). ∀A,B:{X ⊢ _}. ∀s:psc_map{j:l}(C; Delta; X). ∀I:cat-ob(C). ∀a:Delta(I).
  (presheaf-fun-family(C; X; A; B; I; (s)a) presheaf-fun-family(C; Delta; (A)s; (B)s; I; a) ∈ Type)

Definition: presheaf-pi
Π==  <λI,a. presheaf-pi-family(C; X; A; B; I; a), λI,J,f,a,w,K,g. (w (cat-comp(C) f))>

Lemma: presheaf-pi_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}].  B ∈ X ⊢ )

Lemma: pscm-presheaf-pi
C:SmallCategory. ∀X,Delta:ps_context{j:l}(C). ∀A:{X ⊢ _}. ∀B:{X.A ⊢ _}. ∀s:psc_map{j:l}(C; Delta; X).
  ((ΠB)s Delta ⊢ Π(A)s (B)(s p;q) ∈ {Delta ⊢ _})

Lemma: presheaf-pi-p
C:SmallCategory. ∀X:ps_context{j:l}(C). ∀T,A:{X ⊢ _}. ∀B:{X.A ⊢ _}.  ((ΠB)p X.T ⊢ Π(A)p (B)(p p;q) ∈ {X.T ⊢ _})

Definition: pscm-dependent
(s)dep ==  (s tp{i:l};tq)

Lemma: pscm-dependent_wf
C:SmallCategory. ∀X,Delta:ps_context{j:l}(C). ∀A:{X ⊢ _}. ∀s:psc_map{j:l}(C; Delta; X).
  ((s)dep ∈ psc_map{j:l}(C; Delta.(A)s; X.A))

Lemma: ps-csm_dep_p_rewrite_lemma
T,s,A,Delta,X:Top.  (((T)p)(s)dep ((T)s)p)

Lemma: ps-csm_dep_typed_p_lemma
T,s,A,Delta,X:Top.  (((T)tp{i:l})(s)dep ((T)s)tp{i:l})

Lemma: pscm-dep_term_p_lemma
t,s,A,Delta,X:Top.  (((t)tp{i:l})(s)dep ((t)s)tp{i:l})

Lemma: ps-csm_dep_term_q_lemma
s,A,Delta,X:Top.  ((tq)(s)dep tq)

Definition: presheaf-fun
(A ⟶ B) ==  <λI,a. presheaf-fun-family(C; X; A; B; I; a), λI,J,f,a,w,K,g. (w (cat-comp(C) f))>

Lemma: presheaf-fun_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A,B:{X ⊢ _}].  ((A ⟶ B) ∈ X ⊢ )

Lemma: pscm-presheaf-fun
C:SmallCategory. ∀X,Delta:ps_context{j:l}(C). ∀A,B:{X ⊢ _}. ∀s:psc_map{j:l}(C; Delta; X).
  (((A ⟶ B))s (Delta ⊢ (A)s ⟶ (B)s) ∈ {Delta ⊢ _})

Lemma: presheaf-fun-equal
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A,B:{X ⊢ _}]. ∀[f,g:{X ⊢ _:(A ⟶ B)}].
  g ∈ {X ⊢ _:(A ⟶ B)} 
  supposing ∀[I:cat-ob(C)]. ∀[a:X(I)]. ∀[J:cat-ob(C)]. ∀[h:cat-arrow(C) I]. ∀[u:A(h(a))].
              ((f(a) u) (g(a) u) ∈ B(h(a)))

Lemma: presheaf-fun-equal2
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A,B:{X ⊢ _}]. ∀[f:{X ⊢ _:(A ⟶ B)}]. ∀[g:I:cat-ob(C)
                                                                                        ⟶ a:X(I)
                                                                                        ⟶ J:cat-ob(C)
                                                                                        ⟶ h:(cat-arrow(C) I)
                                                                                        ⟶ u:A(h(a))
                                                                                        ⟶ B(h(a))].
  g ∈ {X ⊢ _:(A ⟶ B)} 
  supposing ∀[I:cat-ob(C)]. ∀[a:X(I)]. ∀[J:cat-ob(C)]. ∀[h:cat-arrow(C) I]. ∀[u:A(h(a))].
              ((f(a) u) (g(a) u) ∈ B(h(a)))

Lemma: presheaf-fun-p
C:SmallCategory. ∀X:ps_context{j:l}(C). ∀A,B,T:{X ⊢ _}.  (((A ⟶ B))p (X.T ⊢ (A)p ⟶ (B)p) ∈ {X.T ⊢ _})

Lemma: member-presheaf-fun-p
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A,B,T:{X ⊢ _}]. ∀[x:{X ⊢ _:(A ⟶ B)}].  ((x)p ∈ {X.T ⊢ _:((A)p ⟶ (B)p)})

Lemma: psc-snd_wf-presheaf-fun
C:SmallCategory. ∀X:ps_context{j:l}(C). ∀A,B:{X ⊢ _}.  (q ∈ {X.(A ⟶ B) ⊢ _:((A)p ⟶ (B)p)})

Lemma: presheaf-fun-as-presheaf-pi
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A,B:{X ⊢ _}].  ((X ⊢ A ⟶ B) X ⊢ Π(B)p ∈ {X ⊢ _})

Definition: presheaf-lambda
b) ==  λI,a,J,f,u. (b (f(a);u))

Lemma: presheaf-lambda_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[b:{X.A ⊢ _:B}].  ((λb) ∈ {X ⊢ _:ΠB})

Lemma: pscm-presheaf-lambda
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[b:{X.A ⊢ _:B}]. ∀[H:ps_context{j:l}(C)].
[s:psc_map{j:l}(C; H; X)].
  (((λb))s (b)s+) ∈ {H ⊢ _:(ΠB)s})

Definition: presheaf-lam
presheaf-lam(X;b) ==  b)

Lemma: presheaf-lam_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A,B:{X ⊢ _}]. ∀[b:{X.A ⊢ _:(B)p}].
  (presheaf-lam(X;b) ∈ {X ⊢ _:(A ⟶ B)})

Lemma: pscm-presheaf-lam
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A,B:{X ⊢ _}]. ∀[b:{X.A ⊢ _:(B)p}]. ∀[H:ps_context{j:l}(C)].
[s:psc_map{j:l}(C; H; X)].
  ((presheaf-lam(X;b))s presheaf-lam(H;(b)s+) ∈ {H ⊢ _:((A ⟶ B))s})

Definition: presheaf-id-fun
presheaf-id-fun(X) ==  presheaf-lam(X;q)

Lemma: presheaf-id-fun_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}].  (presheaf-id-fun(X) ∈ {X ⊢ _:(A ⟶ A)})

Lemma: pscm-presheaf-id-fun
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[H:ps_context{j:l}(C)]. ∀[s:psc_map{j:l}(C; H; X)].
  ((presheaf-id-fun(X))s presheaf-id-fun(H) ∈ {H ⊢ _:((A)s ⟶ (A)s)})

Definition: presheaf-app
app(w; u) ==  λI,a. (w (cat-id(C) I) (u a))

Lemma: presheaf-app_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[w:{X ⊢ _:ΠB}]. ∀[u:{X ⊢ _:A}].
  (app(w; u) ∈ {X ⊢ _:(B)[u]})

Lemma: presheaf-app_wf-pscm
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[w:{X ⊢ _:ΠB}]. ∀[H:ps_context{j:l}(C)].
[tau:psc_map{j:l}(C; H; X)]. ∀[u:{H ⊢ _:(A)tau}].
  (app((w)tau; u) ∈ {H ⊢ _:((B)tau+)[u]})

Definition: presheaf-apply
presheaf-apply(w;u) ==  app(w; u)

Lemma: presheaf-apply_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[w:{X ⊢ _:ΠB}]. ∀[u:{X ⊢ _:A}].
  (presheaf-apply(w;u) ∈ {X ⊢ _:(B)[u]})

Lemma: presheaf-app_wf_fun
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A,B:{X ⊢ _}]. ∀[w:{X ⊢ _:(A ⟶ B)}]. ∀[u:{X ⊢ _:A}].
  (app(w; u) ∈ {X ⊢ _:B})

Definition: presheaf-fun-comp
(f g) ==  presheaf-lam(G;app((f)p; app((g)p; q)))

Lemma: presheaf-fun-comp_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A,B,E:{X ⊢ _}]. ∀[g:{X ⊢ _:(A ⟶ B)}]. ∀[f:{X ⊢ _:(B ⟶ E)}].
  ((f g) ∈ {X ⊢ _:(A ⟶ E)})

Definition: presheaf-sigma
Σ ==  <λI,a. (u:A(a) × B((a;u))), λI,J,f,a,p. <(fst(p) f), (snd(p) (a;fst(p)) f)>>

Lemma: presheaf-sigma_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}].  (Σ B ∈ X ⊢ )

Lemma: presheaf-sigma-at
[X,A,B,I,a:Top].  (Σ B(a) u:A(a) × B((a;u)))

Lemma: pscm-presheaf-sigma
C:SmallCategory. ∀X,Delta:ps_context{j:l}(C). ∀A:{X ⊢ _}. ∀B:{X.A ⊢ _}. ∀s:psc_map{j:l}(C; Delta; X).
  ((Σ B)s = Σ (A)s (B)(s p;q) ∈ {Delta ⊢ _})

Lemma: presheaf-sigma-p
C:SmallCategory. ∀X:ps_context{j:l}(C). ∀T,A:{X ⊢ _}. ∀B:{X.A ⊢ _}.  ((Σ B)p = Σ (A)p (B)(p p;q) ∈ {X.T ⊢ _})

Lemma: presheaf-sigma-p-p
C:SmallCategory. ∀X:ps_context{j:l}(C). ∀T,A:{X ⊢ _}. ∀B:{X.A ⊢ _}. ∀E:{X.T ⊢ _}.
  (((Σ B)p)p = Σ ((A)p)p (B)(p p;q) ∈ {X.T.E ⊢ _})

Lemma: pscm-presheaf-sigma-typed
C:SmallCategory. ∀X,Delta:ps_context{j:l}(C). ∀A:{X ⊢ _}. ∀B:{X.A ⊢ _}. ∀s:psc_map{j:l}(C; Delta; X).
  ((Σ B)s = Σ (A)s (B)(s)dep ∈ {Delta ⊢ _})

Definition: presheaf-fst
p.1 ==  λI,a. (fst((p a)))

Lemma: presheaf-fst_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[p:{X ⊢ _:Σ B}].  (p.1 ∈ {X ⊢ _:A})

Lemma: pscm-presheaf-fst
[p,s:Top].  ((p.1)s (p)s.1)

Lemma: pscm-ap-presheaf-fst
[C:SmallCategory]. ∀[X,Delta:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[p:{X ⊢ _:Σ B}].
[s:psc_map{j:l}(C; Delta; X)].
  ((p.1)s (p)s.1 ∈ {Delta ⊢ _:(A)s})

Definition: presheaf-snd
p.2 ==  λI,a. (snd((p a)))

Lemma: presheaf-snd_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[p:{X ⊢ _:Σ B}].  (p.2 ∈ {X ⊢ _:(B)[p.1]})

Lemma: presheaf-snd-at
[a,I,p:Top].  (p.2(a) snd(p(a)))

Lemma: presheaf-fst-at
[a,I,p:Top].  (p.1(a) fst(p(a)))

Lemma: pscm-presheaf-snd
[p,s:Top].  ((p.2)s (p)s.2)

Lemma: pscm-ap-presheaf-snd
[C:SmallCategory]. ∀[X,Delta:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[p:{X ⊢ _:Σ B}].
[s:psc_map{j:l}(C; Delta; X)].
  ((p.2)s (p)s.2 ∈ {Delta ⊢ _:((B)[p.1])s})

Definition: presheaf-pair
presheaf-pair(u;v) ==  λI,a. <a, a>

Lemma: presheaf-pair_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[u:{X ⊢ _:A}]. ∀[v:{X ⊢ _:(B)[u]}].
  (presheaf-pair(u;v) ∈ {X ⊢ _:Σ B})

Lemma: pscm-presheaf-pair
[u,v,s:Top].  ((presheaf-pair(u;v))s presheaf-pair((u)s;(v)s))

Definition: sigma-elim-pscm
SigmaElim ==  λI,x. let a,u,v in ((a;u);v)

Lemma: sigma-elim-pscm_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}].
  (SigmaElim ∈ psc_map{[i j]:l}(C; X.Σ B; X.A.B))

Definition: sigma-unelim-pscm
SigmaUnElim ==  λI,x. let au,v in let a,u au in (a;(u;v))

Lemma: sigma-unelim-pscm_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}].
  (SigmaUnElim ∈ psc_map{[i j]:l}(C; X.A.B; X.Σ B))

Lemma: ps-sigma-elim-unelim
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}].
  (SigmaUnElim SigmaElim 1(X.Σ B) ∈ psc_map{[i j]:l}(C; X.Σ B; X.Σ B))

Lemma: ps-sigma-unelim-elim
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}].
  (SigmaElim SigmaUnElim 1(X.A.B) ∈ psc_map{[i j]:l}(C; X.A.B; X.A.B))

Lemma: ps-sigma-unelim-elim-type
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[T:{X.Σ B ⊢ _}].
  (((T)SigmaUnElim)SigmaElim T ∈ {X.Σ B ⊢ _})

Lemma: ps-sigma-unelim-elim-term
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[T:{X.Σ B ⊢ _}]. ∀[t:{X.Σ B ⊢ _:T}].
  (((t)SigmaUnElim)SigmaElim t ∈ {X.Σ B ⊢ _:T})

Lemma: ps-sigma-unelim-p
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}].
  (p SigmaUnElim p ∈ psc_map{[i j]:l}(C; X.A.B; X))

Lemma: ps-sigma-unelim-p-type
[T:Top]. (((T)p)SigmaUnElim ((T)p)p)

Lemma: ps-sigma-unelim-p-term
[t:Top]. (((t)p)SigmaUnElim ((t)p)p)

Lemma: ps-sigma-elim-rule
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[T:{X.Σ B ⊢ _}].
[t:{X.A.B ⊢ _:(T)SigmaUnElim}].
  ((t)SigmaElim ∈ {X.Σ B ⊢ _:T})

Lemma: ps-sigma-elim-equality-rule
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[T:{X.Σ B ⊢ _}].
[t1,t2:{X.A.B ⊢ _:(T)SigmaUnElim}].
  (t1)SigmaElim (t2)SigmaElim ∈ {X.Σ B ⊢ _:T} supposing t1 t2 ∈ {X.A.B ⊢ _:(T)SigmaUnElim}

Lemma: ps-sigma-elim-equality-rule2
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[T:{X.Σ B ⊢ _}].
[t1:{X.A.B ⊢ _:(T)SigmaUnElim}]. ∀[t2:{X.Σ B ⊢ _:T}].
  (t1)SigmaElim t2 ∈ {X.Σ B ⊢ _:T} supposing t1 (t2)SigmaUnElim ∈ {X.A.B ⊢ _:(T)SigmaUnElim}

Lemma: pscm-ap-presheaf-pair
[C:SmallCategory]. ∀[X,Delta:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[u:{X ⊢ _:A}]. ∀[v:{X ⊢ _:(B)[u]}].
[s:psc_map{j:l}(C; Delta; X)].
  ((presheaf-pair(u;v))s presheaf-pair((u)s;(v)s) ∈ {Delta ⊢ _:(Σ B)s})

Lemma: pscm-presheaf-app
[C,w,u,s:Top].  ((app(w; u))s app((w)s; (u)s))

Lemma: pscm-ap-presheaf-app
[C:SmallCategory]. ∀[X,Delta:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[w:{X ⊢ _:ΠB}]. ∀[u:{X ⊢ _:A}].
[s:psc_map{j:l}(C; Delta; X)].
  ((app(w; u))s app((w)s; (u)s) ∈ {Delta ⊢ _:((B)[u])s})

Lemma: pscm-ap-presheaf-app-fun
[C:SmallCategory]. ∀[X,Delta:ps_context{j:l}(C)]. ∀[A,B:{X ⊢ _}]. ∀[w:{X ⊢ _:(A ⟶ B)}]. ∀[u:{X ⊢ _:A}].
[s:psc_map{j:l}(C; Delta; X)].
  ((app(w; u))s app((w)s; (u)s) ∈ {Delta ⊢ _:(B)s})

Lemma: pscm-ap-presheaf-lambda
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[b:{X.A ⊢ _:B}]. ∀[H:ps_context{j:l}(C)].
[s:psc_map{j:l}(C; H; X)].
  (((λb))s (b)s+) ∈ {H ⊢ _:(ΠB)s})

Lemma: presheaf-snd-pair
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[u:{X ⊢ _:A}]. ∀[v:{X ⊢ _:(B)[u]}].
  (presheaf-pair(u;v).2 v ∈ {X ⊢ _:(B)[u]})

Lemma: presheaf-fst-pair
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[u:{X ⊢ _:A}]. ∀[v:Top].
  (presheaf-pair(u;v).1 u ∈ {X ⊢ _:A})

Lemma: presheaf-pair-eta
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[w:{X ⊢ _:Σ B}].
  (presheaf-pair(w.1;w.2) w ∈ {X ⊢ _:Σ B})

Lemma: presheaf-sigma-equal
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[w,y:{X ⊢ _:Σ B}].
  (w y ∈ {X ⊢ _:Σ B}) supposing ((w.2 y.2 ∈ {X ⊢ _:(B)[w.1]}) and (w.1 y.1 ∈ {X ⊢ _:A}))

Lemma: presheaf-eta
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[w:{X ⊢ _:ΠB}].
  ((λapp((w)p; q)) w ∈ {X ⊢ _:ΠB})

Lemma: presheaf-fun-eta
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A,B:{X ⊢ _}]. ∀[w:{X ⊢ _:(A ⟶ B)}].
  (presheaf-lam(X;app((w)p; q)) w ∈ {X ⊢ _:(A ⟶ B)})

Lemma: presheaf-beta
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[B:{X.A ⊢ _}]. ∀[b:{X.A ⊢ _:B}]. ∀[u:{X ⊢ _:A}].
  (app((λb); u) (b)[u] ∈ {X ⊢ _:(B)[u]})

Lemma: presheaf-app-id-fun
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}]. ∀[u:{X ⊢ _:A}].  (app(presheaf-id-fun(X); u) u ∈ {X ⊢ _:A})

Definition: presheaf-sigma-fun
presheaf-sigma-fun(G;A;B;f) ==  presheaf-lam(G;presheaf-pair(q.1;app(app(((λf))p; q.1); q.2)))

Lemma: presheaf-sigma-fun_wf
[C:SmallCategory]. ∀[G:ps_context{j:l}(C)]. ∀[A:{G ⊢ _}]. ∀[B,B':{G.A ⊢ _}]. ∀[f:{G.A ⊢ _:(B ⟶ B')}].
  (presheaf-sigma-fun(G;A;B;f) ∈ {G ⊢ _:(Σ B ⟶ Σ B')})

Definition: discrete-presheaf-type
discr(T) ==  <λI,alpha. T, λI,J,f,alpha,x. x>

Lemma: discrete-presheaf-type_wf
[C:SmallCategory]. ∀[T:Type]. ∀[X:ps_context{j:l}(C)].  (discr(T) ∈ X ⊢ )

Lemma: pscm-discrete-presheaf-type
[T,s:Top].  ((discr(T))s discr(T))

Definition: discrete-presheaf-term
discr(t) ==  λI,alpha. t

Lemma: discrete-presheaf-term_wf
[C:SmallCategory]. ∀[T:Type]. ∀[t:T]. ∀[X:ps_context{j:l}(C)].  (discr(t) ∈ {X ⊢ _:discr(T)})

Lemma: discrete-presheaf-term-at-morph
[C:SmallCategory]. ∀[T:Type]. ∀[X:ps_context{j:l}(C)]. ∀[t:{X ⊢ _:discr(T)}].
  ∀I,J:cat-ob(C). ∀f:cat-arrow(C) I. ∀a:X(I).  (t(a) t(f(a)) ∈ T)

Definition: discrete-unary
discrete-unary(t;x.f[x]) ==  λI,a. f[t(a)]

Lemma: discrete-unary_wf
[C:SmallCategory]. ∀[A,B:Type]. ∀[f:A ⟶ B]. ∀[X:ps_context{j:l}(C)]. ∀[t:{X ⊢ _:discr(A)}].
  (discrete-unary(t;x.f[x]) ∈ {X ⊢ _:discr(B)})

Lemma: pscm-discrete-presheaf-term
[t,s:Top].  ((discr(t))s discr(t))

Lemma: discrete-presheaf-term-is-map
[C:SmallCategory]. ∀[T:Type]. ∀[X:ps_context{j:l}(C)].  {X ⊢ _:discr(T)} ≡ psc_map{[i j]:l}(C; X; discrete-set(T))

Lemma: ps-discrete-map-is-constant
[C:SmallCategory]. ∀[T:𝕌{j}]. ∀[I:cat-ob(C)]. ∀[s:psc_map{[i j]:l}(C; Yoneda(I); discrete-set(T))].
  (s J,g. (s (cat-id(C) I))) ∈ psc_map{[i j]:l}(C; Yoneda(I); discrete-set(T)))

Lemma: discrete-presheaf-term-is-constant
Not every term of discrete presheaf type is constant, but when the
context is the Yoneda(I) -- Yoneda(I) -- then it is.⋅

[C:SmallCategory]. ∀[T:Type]. ∀[I:cat-ob(C)]. ∀[t:{Yoneda(I) ⊢ _:discr(T)}].
  (t discr(t(cat-id(C) I)) ∈ {Yoneda(I) ⊢ _:discr(T)})

Definition: presheaf-unit
==  discr(Unit)

Lemma: presheaf-unit_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)].  (1 ∈ X ⊢ )

Lemma: pscm-presheaf-unit
[s:Top]. ((1)s 1)

Definition: presheaf-it
==  discr(⋅)

Lemma: presheaf-it_wf
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)].  (* ∈ {X ⊢ _:1})

Lemma: presheaf-it-unique
[C:SmallCategory]. ∀[X:ps_context{j:l}(C)]. ∀[t:{X ⊢ _:1}].  (t * ∈ {X ⊢ _:1})

Definition: constant-presheaf-type
(X) ==  <λI,alpha. X(I), λI,J,f,alpha,w. f(w)>

Lemma: constant-presheaf-type_wf
[C:SmallCategory]. ∀[X:small_ps_context{i:l}(C)]. ∀[Gamma:ps_context{j:l}(C)].  ((X) ∈ Gamma ⊢ )

Lemma: pscm-constant-presheaf-type
[X,s:Top].  (((X))s (X))

Lemma: constant-presheaf-type-at
[X,I,a:Top].  ((X)(a) X(I))

Lemma: unit-set-presheaf-type
[C:SmallCategory]. ∀[I:cat-ob(C)].
  ({Yoneda(I) ⊢ _} {AF:A:L:cat-ob(C) ⟶ (cat-arrow(C) I) ⟶ Type × (L:cat-ob(C)
                                                                       ⟶ J:cat-ob(C)
                                                                       ⟶ f:(cat-arrow(C) L)
                                                                       ⟶ a:(cat-arrow(C) I)
                                                                       ⟶ (A a)
                                                                       ⟶ (A (cat-comp(C) a)))| 
                      let A,F AF 
                      in (∀K:cat-ob(C). ∀a:cat-arrow(C) I. ∀u:A a.  ((F (cat-id(C) K) u) u ∈ (A a)))
                         ∧ (∀L,J,K:cat-ob(C). ∀f:cat-arrow(C) L. ∀g:cat-arrow(C) J. ∀a:cat-arrow(C) I. ∀u:A a.
                              ((F (cat-comp(C) f) u)
                              (F (cat-comp(C) a) (F u))
                              ∈ (A (cat-comp(C) (cat-comp(C) f) a))))} )

Lemma: presheaf-term-at-comp
C:SmallCategory. ∀Gamma:ps_context{j:l}(C). ∀T:{Gamma ⊢ _}. ∀t:{Gamma ⊢ _:T}. ∀I:cat-ob(C). ∀rho:Gamma(I).
J:cat-ob(C). ∀f:cat-arrow(C) I. ∀K:cat-ob(C). ∀g:cat-arrow(C) J.
  (t(cat-comp(C) f(rho)) t(g(f(rho))) ∈ T(g(f(rho))))

Lemma: subset-presheaf-type
[C:SmallCategory]. ∀[X,Y:ps_context{j:l}(C)].  {X ⊢ _} ⊆{Y ⊢ _} supposing sub_ps_context{j:l}(C; Y; X)

Lemma: subset-presheaf-term
[C:SmallCategory]. ∀[X,Y:ps_context{j:l}(C)].
  ∀[A:{X ⊢ _}]. ({X ⊢ _:A} ⊆{Y ⊢ _:A}) supposing sub_ps_context{j:l}(C; Y; X)

Lemma: subset-presheaf-term2
[C:SmallCategory]. ∀[X,Y:ps_context{j:l}(C)].
  ∀[A,B:{X ⊢ _}].  {X ⊢ _:A} ⊆{Y ⊢ _:B} supposing B ∈ {X ⊢ _} supposing sub_ps_context{j:l}(C; Y; X)

Lemma: pscm-subset-codomain
[C:SmallCategory]. ∀[X,Y,Z:ps_context{j:l}(C)].
  psc_map{j:l}(C; X; Y) ⊆psc_map{j:l}(C; X; Z) supposing sub_ps_context{j:l}(C; Y; Z)

Lemma: pscm-subset-domain
[C:SmallCategory]. ∀[X,Y,Z:ps_context{j:l}(C)].
  psc_map{j:l}(C; Y; X) ⊆psc_map{j:l}(C; Z; X) supposing sub_ps_context{j:l}(C; Z; Y)

Lemma: pscm-subset-subtype
[C:SmallCategory]. ∀[A,B,Y,Z:ps_context{j:l}(C)].
  (psc_map{j:l}(C; Y; A) ⊆psc_map{j:l}(C; Z; B)) supposing 
     (sub_ps_context{j:l}(C; A; B) and 
     sub_ps_context{j:l}(C; Z; Y))

Lemma: sub_ps_context_functionality
[C:SmallCategory]. ∀[Y,X:ps_context{j:l}(C)]. ∀[A:{X ⊢ _}].
  sub_ps_context{[i j]:l}(C; Y.A; X.A) supposing sub_ps_context{j:l}(C; Y; X)

Lemma: presheaf-pi-intro
C:SmallCategory. ∀G:ps_context{j:l}(C). ∀A:{G ⊢ _}. ∀B:{G.A ⊢ _}.  ({G.A ⊢ _:B}  {G ⊢ _:ΠB})

Lemma: presheaf-sigma-intro
C:SmallCategory. ∀G:ps_context{j:l}(C). ∀A:{G ⊢ _}. ∀B:{G.A ⊢ _}.  ((∃a:{G ⊢ _:A}. {G ⊢ _:(B)[a]})  {G ⊢ _:Σ B})

Lemma: presheaf-pi-implies-sigma
C:SmallCategory. ∀G:ps_context{j:l}(C). ∀A:{G ⊢ _}. ∀B:{G.A ⊢ _}.  ({G ⊢ _:A}  {G ⊢ _:ΠB}  {G ⊢ _:Σ B})

Lemma: ps-csm_typedp_id_adjoin_lemma
E,s,F,G,u,H:Top.  ((((E)s)tp{i:l})[u] (E)s)

Lemma: presheaf-fun-family-discrete
[C:SmallCategory]. ∀[A,B:Type]. ∀[X:ps_context{j:l}(C)]. ∀[I:cat-ob(C)]. ∀[a:X(I)].
  (presheaf-fun-family(C; X; discr(A); discr(B); I; a)
  {w:J:cat-ob(C) ⟶ f:(cat-arrow(C) I) ⟶ u:A ⟶ B| 
     ∀J,K:cat-ob(C). ∀f:cat-arrow(C) I. ∀g:cat-arrow(C) J. ∀u:A.
       ((w u) (w (cat-comp(C) f) u) ∈ B)} 
  ∈ Type)

Definition: psdcff-inj
psdcff-inj(I;w) ==  (cat-id(C) I)

Lemma: psdcff-inj_wf
[C:SmallCategory]. ∀[A,B:Type]. ∀[X:ps_context{j:l}(C)]. ∀[I:cat-ob(C)]. ∀[a:X(I)]. ∀[w:presheaf-fun-family(C;
                                                                                                             X;
                                                                                                             discr(A);
                                                                                                             discr(B);
                                                                                                             I;
                                                                                                             a)].
  (psdcff-inj(I;w) ∈ A ⟶ B)

Lemma: psdcff-inj-injection
[C:SmallCategory]. ∀[A,B:Type]. ∀[X:ps_context{j:l}(C)]. ∀[I:cat-ob(C)]. ∀[a:X(I)].
  Inj(presheaf-fun-family(C; X; discr(A); discr(B); I; a);A ⟶ B;λw.psdcff-inj(I;w))

Lemma: psdcff-inj-bijection
[C:SmallCategory]. ∀[A,B:Type]. ∀[X:ps_context{j:l}(C)]. ∀[I:cat-ob(C)]. ∀[a:X(I)].
  Bij(presheaf-fun-family(C; X; discr(A); discr(B); I; a);A ⟶ B;λw.psdcff-inj(I;w))



Home Index