Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
(** * The flattening lemma. *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Types.Paths Types.Forall Types.Sigma Types.Arrow Types.Universe.LocalOpen Scope path_scope.Require Import HoTT.Colimits.Coeq.(** The base HIT [W] is just a homotopy coequalizer [Coeq]. *)(** TODO: Make the names in this file more usable, move it into [Coeq.v], and use it to derive corresponding flattening lemmas for [pushout], etc. *)(** Now we define the flattened HIT which will be equivalent to the total space of a fibration over [W]. *)ModuleExport FlattenedHIT.Private InductiveWtil (AB : Type) (fg : B -> A)
(C : A -> Type) (D : forallb, C (f b) <~> C (g b))
: Type :=
| cct : foralla, C a -> Wtil A B f g C D.Arguments cct {A B f g C D} a c.Axiomppt : forall {ABfgCD} (b:B) (y:C (f b)),
@cct A B f g C D (f b) y = cct (g b) (D b y).DefinitionWtil_ind {ABfgCD} (Q : Wtil A B f g C D -> Type)
(cct' : forallax, Q (cct a x))
(ppt' : forallby, (ppt b y) # (cct' (f b) y) = cct' (g b) (D b y))
: forallw, Q w
:= funw => match w with cct a x => fun_ => cct' a x end ppt'.AxiomWtil_ind_beta_ppt
: forall {ABfgCD} (Q : Wtil A B f g C D -> Type)
(cct' : forallax, Q (cct a x))
(ppt' : forallby, (ppt b y) # (cct' (f b) y) = cct' (g b) (D b y))
(b:B) (y : C (f b)),
apD (Wtil_ind Q cct' ppt') (ppt b y) = ppt' b y.EndFlattenedHIT.DefinitionWtil_rec {ABfgC} {D : forallb, C (f b) <~> C (g b)}
(Q : Type) (cct' : foralla (x : C a), Q)
(ppt' : forallb (y : C (f b)), cct' (f b) y = cct' (g b) (D b y))
: Wtil A B f g C D -> Q
:= Wtil_ind (fun_ => Q) cct' (funby => transport_const _ _ @ ppt' b y).
A, B: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) Q: Type cct': foralla : A, C a -> Q ppt': forall (b : B) (y : C (f b)),
cct' (f b) y = cct' (g b) (D b y) b: B y: C (f b)
ap (Wtil_rec Q cct' ppt') (ppt b y) = ppt' b y
A, B: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) Q: Type cct': foralla : A, C a -> Q ppt': forall (b : B) (y : C (f b)),
cct' (f b) y = cct' (g b) (D b y) b: B y: C (f b)
ap (Wtil_rec Q cct' ppt') (ppt b y) = ppt' b y
A, B: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) Q: Type cct': foralla : A, C a -> Q ppt': forall (b : B) (y : C (f b)),
cct' (f b) y = cct' (g b) (D b y) b: B y: C (f b)
ap
(Wtil_ind (fun_ : Wtil A B f g C D => Q) cct'
(fun (b : B) (y : C (f b)) =>
transport_const (ppt b y) (cct' (f b) y) @
ppt' b y)) (ppt b y) = ppt' b y
A, B: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) Q: Type cct': foralla : A, C a -> Q ppt': forall (b : B) (y : C (f b)),
cct' (f b) y = cct' (g b) (D b y) b: B y: C (f b)
transport_const (ppt b y)
(Wtil_ind (fun_ : Wtil A B f g C D => Q) cct'
(fun (b : B) (y : C (f b)) =>
transport_const (ppt b y) (cct' (f b) y) @
ppt' b y) (cct (f b) y)) @
ap
(Wtil_ind (fun_ : Wtil A B f g C D => Q) cct'
(fun (b : B) (y : C (f b)) =>
transport_const (ppt b y) (cct' (f b) y) @
ppt' b y)) (ppt b y) =
transport_const (ppt b y)
(Wtil_ind (fun_ : Wtil A B f g C D => Q) cct'
(fun (b : B) (y : C (f b)) =>
transport_const (ppt b y) (cct' (f b) y) @
ppt' b y) (cct (f b) y)) @ ppt' b y
A, B: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) Q: Type cct': foralla : A, C a -> Q ppt': forall (b : B) (y : C (f b)),
cct' (f b) y = cct' (g b) (D b y) b: B y: C (f b)
apD
(Wtil_ind (fun_ : Wtil A B f g C D => Q) cct'
(fun (b : B) (y : C (f b)) =>
transport_const (ppt b y) (cct' (f b) y) @
ppt' b y)) (ppt b y) =
transport_const (ppt b y)
(Wtil_ind (fun_ : Wtil A B f g C D => Q) cct'
(fun (b : B) (y : C (f b)) =>
transport_const (ppt b y) (cct' (f b) y) @
ppt' b y) (cct (f b) y)) @ ppt' b y
exact (Wtil_ind_beta_ppt (fun_ => Q) _ _ _ _).Defined.(** Now we define the fibration over it that we will be considering the total space of. *)SectionAssumeAxioms.Context `{Univalence}.Context {BA : Type} {fg : B -> A}.Context {C : A -> Type} {D : forallb, C (f b) <~> C (g b)}.LetW' := Coeq f g.LetP : W' -> Type
:= Coeq_rec Type C (funb => path_universe (D b)).(** Now we give the total space the same structure as [Wtil]. *)LetsWtil := { w:W' & P w }.Letscct (a:A) (x:C a) : sWtil := (exist P (coeq a) x).Letsppt (b:B) (y:C (f b)) : scct (f b) y = scct (g b) (D b y)
:= path_sigma' P (cglue b)
(transport_path_universe' P (cglue b) (D b)
(Coeq_rec_beta_cglue Type C (funb0 => path_universe (D b0)) b) y).(** Here is the dependent eliminator *)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: sWtil -> Type scct': forall (a : A) (x : C a), Q (scct a x) sppt': forall (b : B) (y : C (f b)),
transport Q (sppt b y) (scct' (f b) y) =
scct' (g b) (D b y)
forallw : sWtil, Q w
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: sWtil -> Type scct': forall (a : A) (x : C a), Q (scct a x) sppt': forall (b : B) (y : C (f b)),
transport Q (sppt b y) (scct' (f b) y) =
scct' (g b) (D b y)
forallw : sWtil, Q w
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: sWtil -> Type scct': forall (a : A) (x : C a), Q (scct a x) sppt': forall (b : B) (y : C (f b)),
transport Q (sppt b y) (scct' (f b) y) =
scct' (g b) (D b y)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: sWtil -> Type scct': forall (a : A) (x : C a), Q (scct a x) sppt': forall (b : B) (y : C (f b)),
transport Q (sppt b y) (scct' (f b) y) =
scct' (g b) (D b y)
forallb : B,
transport
(funw : Coeq f g => forallx : P w, Q (w; x))
(cglue b) (funx : P (coeq (f b)) => scct' (f b) x) =
(funx : P (coeq (g b)) => scct' (g b) x)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: sWtil -> Type scct': forall (a : A) (x : C a), Q (scct a x) sppt': forall (b : B) (y : C (f b)),
transport Q (sppt b y) (scct' (f b) y) =
scct' (g b) (D b y) b: B
transport
(funw : Coeq f g => forallx : P w, Q (w; x))
(cglue b) (funx : P (coeq (f b)) => scct' (f b) x) =
(funx : P (coeq (g b)) => scct' (g b) x)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: sWtil -> Type scct': forall (a : A) (x : C a), Q (scct a x) sppt': forall (b : B) (y : C (f b)),
transport Q (sppt b y) (scct' (f b) y) =
scct' (g b) (D b y) b: B
forally1 : P (coeq (f b)),
transportD P (fun (a : W') (b : P a) => Q (a; b))
(cglue b) y1 (scct' (f b) y1) =
scct' (g b) (transport P (cglue b) y1)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: sWtil -> Type scct': forall (a : A) (x : C a), Q (scct a x) sppt': forall (b : B) (y : C (f b)),
transport Q (sppt b y) (scct' (f b) y) =
scct' (g b) (D b y) b: B y: P (coeq (f b))
transportD P (fun (a : W') (b : P a) => Q (a; b))
(cglue b) y (scct' (f b) y) =
scct' (g b) (transport P (cglue b) y)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: sWtil -> Type scct': forall (a : A) (x : C a), Q (scct a x) sppt': forall (b : B) (y : C (f b)),
transport Q (sppt b y) (scct' (f b) y) =
scct' (g b) (D b y) b: B y: P (coeq (f b)) q:= transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b) y: transport P (cglue b) y = D b y
transportD P (fun (a : W') (b : P a) => Q (a; b))
(cglue b) y (scct' (f b) y) =
scct' (g b) (transport P (cglue b) y)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: sWtil -> Type scct': forall (a : A) (x : C a), Q (scct a x) sppt': forall (b : B) (y : C (f b)),
transport Q (sppt b y) (scct' (f b) y) =
scct' (g b) (D b y) b: B y: P (coeq (f b)) q:= transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b) y: transport P (cglue b) y = D b y
transport Q (path_sigma' P (cglue b) 1)
(scct' (f b) y) =
scct' (g b) (transport P (cglue b) y)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: sWtil -> Type scct': forall (a : A) (x : C a), Q (scct a x) sppt': forall (b : B) (y : C (f b)),
transport Q (sppt b y) (scct' (f b) y) =
scct' (g b) (D b y) b: B y: P (coeq (f b)) q:= transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b) y: transport P (cglue b) y = D b y
transport Q (path_sigma' P (cglue b) 1)
(scct' (f b) y) =
transport (funx : C (g b) => Q (scct (g b) x)) q^
(scct' (g b) (D b y))
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: sWtil -> Type scct': forall (a : A) (x : C a), Q (scct a x) sppt': forall (b : B) (y : C (f b)),
transport Q (sppt b y) (scct' (f b) y) =
scct' (g b) (D b y) b: B y: P (coeq (f b)) q:= transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b) y: transport P (cglue b) y = D b y
transport (funx : C (g b) => Q (scct (g b) x)) q
(transport Q (path_sigma' P (cglue b) 1)
(scct' (f b) y)) = scct' (g b) (D b y)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: sWtil -> Type scct': forall (a : A) (x : C a), Q (scct a x) sppt': forall (b : B) (y : C (f b)),
transport Q (sppt b y) (scct' (f b) y) =
scct' (g b) (D b y) b: B y: P (coeq (f b)) q:= transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b) y: transport P (cglue b) y = D b y
transport Q
(path_sigma' P (cglue b) 1 @ ap (scct (g b)) q)
(scct' (f b) y) = scct' (g b) (D b y)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: sWtil -> Type scct': forall (a : A) (x : C a), Q (scct a x) sppt': forall (b : B) (y : C (f b)),
transport Q (sppt b y) (scct' (f b) y) =
scct' (g b) (D b y) b: B y: P (coeq (f b)) q:= transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b) y: transport P (cglue b) y = D b y
transport Q
(path_sigma' P (cglue b) 1 @ ap (scct (g b)) q)
(scct' (f b) y) =
transport Q (sppt b y) (scct' (f b) y)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: sWtil -> Type scct': forall (a : A) (x : C a), Q (scct a x) sppt': forall (b : B) (y : C (f b)),
transport Q (sppt b y) (scct' (f b) y) =
scct' (g b) (D b y) b: B y: P (coeq (f b)) q:= transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b) y: transport P (cglue b) y = D b y
path_sigma' P (cglue b) 1 @ ap (scct (g b)) q =
sppt b y
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: sWtil -> Type scct': forall (a : A) (x : C a), Q (scct a x) sppt': forall (b : B) (y : C (f b)),
transport Q (sppt b y) (scct' (f b) y) =
scct' (g b) (D b y) b: B y: P (coeq (f b)) q:= transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b) y: transport P (cglue b) y = D b y
path_sigma' P (cglue b) 1 @ path_sigma' P 1 q =
sppt b y
exact ((path_sigma_p1_1p' _ _ _)^).Defined.(** The eliminator computes on the point constructor. *)DefinitionsWtil_ind_beta_cct (Q : sWtil -> Type)
(scct' : forallax, Q (scct a x))
(sppt' : forallby, (sppt b y) # (scct' (f b) y) = scct' (g b) (D b y))
(a:A) (x:C a)
: sWtil_ind Q scct' sppt' (scct a x) = scct' a x
:= 1.(** This would be its propositional computation rule on the path constructor... *)(**<<Definition sWtil_ind_beta_ppt (Q : sWtil -> Type) (scct' : forall a x, Q (scct a x)) (sppt' : forall b y, (sppt b y) # (scct' (f b) y) = scct' (g b) (D b y)) (b:B) (y:C (f b)) : apD (sWtil_ind Q scct' sppt') (sppt b y) = sppt' b y.Proof. unfold sWtil_ind. (** ... but it's a doozy! *)Abort.>>*)(** Fortunately, it turns out to be enough to have the computation rule for the *non-dependent* eliminator! *)(** We could define that in terms of the dependent one, as usual...<<Definition sWtil_rec (P : Type) (scct' : forall a (x : C a), P) (sppt' : forall b (y : C (f b)), scct' (f b) y = scct' (g b) (D b y)) : sWtil -> P := sWtil_ind (fun _ => P) scct' (fun b y => transport_const _ _ @ sppt' b y).>>*)(** ...but if we define it diindly, then it's easier to reason about. *)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: Type scct': foralla : A, C a -> Q sppt': forall (b : B) (y : C (f b)),
scct' (f b) y = scct' (g b) (D b y)
sWtil -> Q
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: Type scct': foralla : A, C a -> Q sppt': forall (b : B) (y : C (f b)),
scct' (f b) y = scct' (g b) (D b y)
sWtil -> Q
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: Type scct': foralla : A, C a -> Q sppt': forall (b : B) (y : C (f b)),
scct' (f b) y = scct' (g b) (D b y)
forallproj1 : W', P proj1 -> Q
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: Type scct': foralla : A, C a -> Q sppt': forall (b : B) (y : C (f b)),
scct' (f b) y = scct' (g b) (D b y)
forallb : B,
transport (funw : Coeq f g => P w -> Q) (cglue b)
(funx : P (coeq (f b)) => scct' (f b) x) =
(funx : P (coeq (g b)) => scct' (g b) x)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: Type scct': foralla : A, C a -> Q sppt': forall (b : B) (y : C (f b)),
scct' (f b) y = scct' (g b) (D b y) b: B
transport (funw : Coeq f g => P w -> Q) (cglue b)
(funx : P (coeq (f b)) => scct' (f b) x) =
(funx : P (coeq (g b)) => scct' (g b) x)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: Type scct': foralla : A, C a -> Q sppt': forall (b : B) (y : C (f b)),
scct' (f b) y = scct' (g b) (D b y) b: B
forally1 : P (coeq (f b)),
transport (fun_ : W' => Q) (cglue b) (scct' (f b) y1) =
scct' (g b) (transport P (cglue b) y1)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: Type scct': foralla : A, C a -> Q sppt': forall (b : B) (y : C (f b)),
scct' (f b) y = scct' (g b) (D b y) b: B y: P (coeq (f b))
transport (fun_ : W' => Q) (cglue b) (scct' (f b) y) =
scct' (g b) (transport P (cglue b) y)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: Type scct': foralla : A, C a -> Q sppt': forall (b : B) (y : C (f b)),
scct' (f b) y = scct' (g b) (D b y) b: B y: P (coeq (f b))
scct' (f b) y = scct' (g b) (transport P (cglue b) y)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: Type scct': foralla : A, C a -> Q sppt': forall (b : B) (y : C (f b)),
scct' (f b) y = scct' (g b) (D b y) b: B y: P (coeq (f b))
D b y = transport P (cglue b) y
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: Type scct': foralla : A, C a -> Q sppt': forall (b : B) (y : C (f b)),
scct' (f b) y = scct' (g b) (D b y) b: B y: P (coeq (f b))
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: Type scct': foralla : A, C a -> Q sppt': forall (b : B) (y : C (f b)),
scct' (f b) y = scct' (g b) (D b y) b: B y: C (f b)
ap (sWtil_rec Q scct' sppt') (sppt b y) = sppt' b y
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: Type scct': foralla : A, C a -> Q sppt': forall (b : B) (y : C (f b)),
scct' (f b) y = scct' (g b) (D b y) b: B y: C (f b)
ap (sWtil_rec Q scct' sppt') (sppt b y) = sppt' b y
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: Type scct': foralla : A, C a -> Q sppt': forall (b : B) (y : C (f b)),
scct' (f b) y = scct' (g b) (D b y) b: B y: C (f b)
ap
(sig_ind (fun_ : {w : W' & P w} => Q)
(Coeq_ind (funw : Coeq f g => P w -> Q)
(fun (a : A) (x : P (coeq a)) => scct' a x)
(funb : B =>
dpath_arrow P (fun_ : W' => Q) (cglue b)
(funx : P (coeq (f b)) => scct' (f b) x)
(funx : P (coeq (g b)) => scct' (g b) x)
(funy : P (coeq (f b)) =>
transport_const (cglue b) (scct' (f b) y)
@' (sppt' b y
@' ap (scct' (g b))
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B =>
path_universe (D b0)) b) y)^)))))
(path_sigma' P (cglue b)
(transport_path_universe' P (cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b) y)) =
sppt' b y
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: Type scct': foralla : A, C a -> Q sppt': forall (b : B) (y : C (f b)),
scct' (f b) y = scct' (g b) (D b y) b: B y: C (f b)
(transport_const (cglue b) (scct' (f b) y))^
@' (ap
(funx : C (f b) =>
transport (fun_ : W' => Q) (cglue b)
(scct' (f b) x)) (transport_Vp P (cglue b) y))^
@' (transport_arrow (cglue b)
(funx : C (f b) => scct' (f b) x)
(transport P (cglue b) y))^
@' ap10
(apD
(Coeq_ind (funw : Coeq f g => P w -> Q)
(fun (a : A) (x : C a) => scct' a x)
(funb : B =>
dpath_arrow P (fun_ : W' => Q) (cglue b)
(funx : C (f b) => scct' (f b) x)
(funx : C (g b) => scct' (g b) x)
(funy : C (f b) =>
transport_const (cglue b)
(scct' (f b) y)
@' (sppt' b y
@' ap (scct' (g b))
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B =>
path_universe (D b0)) b)
y)^)))) (cglue b))
(transport P (cglue b) y)
@' ap (funx : C (g b) => scct' (g b) x)
(transport_path_universe' P (cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b) y) =
sppt' b y
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: Type scct': foralla : A, C a -> Q sppt': forall (b : B) (y : C (f b)),
scct' (f b) y = scct' (g b) (D b y) b: B y: C (f b)
(transport_const (cglue b) (scct' (f b) y))^
@' (ap
(funx : C (f b) =>
transport (fun_ : W' => Q) (cglue b)
(scct' (f b) x)) (transport_Vp P (cglue b) y))^
@' (transport_arrow (cglue b)
(funx : C (f b) => scct' (f b) x)
(transport P (cglue b) y))^
@' ap10
(dpath_arrow P (fun_ : W' => Q) (cglue b)
(funx : C (f b) => scct' (f b) x)
(funx : C (g b) => scct' (g b) x)
(funy : C (f b) =>
transport_const (cglue b) (scct' (f b) y)
@' (sppt' b y
@' ap (scct' (g b))
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb : B =>
path_universe (D b)) b) y)^)))
(transport P (cglue b) y)
@' ap (funx : C (g b) => scct' (g b) x)
(transport_path_universe' P (cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b) y) =
sppt' b y
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: Type scct': foralla : A, C a -> Q sppt': forall (b : B) (y : C (f b)),
scct' (f b) y = scct' (g b) (D b y) b: B y: C (f b)
(transport_const (cglue b) (scct' (f b) y))^
@' (ap
(funx : C (f b) =>
transport (fun_ : W' => Q) (cglue b)
(scct' (f b) x)) (transport_Vp P (cglue b) y))^
@' (transport_arrow (cglue b)
(funx : C (f b) => scct' (f b) x)
(transport P (cglue b) y))^
@' (transport_arrow (cglue b)
(funx : C (f b) => scct' (f b) x)
(transport P (cglue b) y)
@' ap
(funx : P (coeq (f b)) =>
transport (fun_ : W' => Q) (cglue b)
(scct' (f b) x))
(transport_Vp P (cglue b) y)
@' (transport_const (cglue b) (scct' (f b) y)
@' (sppt' b y
@' ap (scct' (g b))
(transport_path_universe' P (cglue b)
(D b)
(Coeq_rec_beta_cglue Type C
(funb : B =>
path_universe (D b)) b) y)^)))
@' ap (funx : C (g b) => scct' (g b) x)
(transport_path_universe' P (cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b) y) =
sppt' b y
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: Type scct': foralla : A, C a -> Q sppt': forall (b : B) (y : C (f b)),
scct' (f b) y = scct' (g b) (D b y) b: B y: C (f b)
(transport_const (cglue b) (scct' (f b) y))^
@' (ap
(funx : C (f b) =>
transport (fun_ : W' => Q) (cglue b)
(scct' (f b) x)) (transport_Vp P (cglue b) y))^
@' (transport_arrow (cglue b)
(funx : C (f b) => scct' (f b) x)
(transport P (cglue b) y))^
@' transport_arrow (cglue b)
(funx : C (f b) => scct' (f b) x)
(transport P (cglue b) y)
@' ap
(funx : P (coeq (f b)) =>
transport (fun_ : W' => Q) (cglue b)
(scct' (f b) x)) (transport_Vp P (cglue b) y)
@' transport_const (cglue b) (scct' (f b) y)
@' sppt' b y
@' ap (scct' (g b))
(transport_path_universe' P (cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb : B => path_universe (D b)) b) y)^
@' ap (funx : C (g b) => scct' (g b) x)
(transport_path_universe' P (cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b) y) =
sppt' b y
(** Now everything cancels! *)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) Q: Type scct': foralla : A, C a -> Q sppt': forall (b : B) (y : C (f b)),
scct' (f b) y = scct' (g b) (D b y) b: B y: C (f b)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y)
Wtil A B f g C D <~> sWtil
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y)
Wtil A B f g C D <~> sWtil
(** The maps back and forth are obtained easily from the non-dependent eliminators. *)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y)
(funx : sWtil =>
Wtil_rec sWtil scct sppt
(sWtil_rec (Wtil A B f g C D) cct ppt x)) == idmap
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y)
(funx : Wtil A B f g C D =>
sWtil_rec (Wtil A B f g C D) cct ppt
(Wtil_rec sWtil scct sppt x)) == idmap
(** The two homotopies are completely symmetrical, using the *dependent* eliminators, but only the computation rules for the non-dependent ones. *)
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y)
(funx : sWtil =>
Wtil_rec sWtil scct sppt
(sWtil_rec (Wtil A B f g C D) cct ppt x)) == idmap
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y)
forall (b : B) (y : C (f b)),
transport
(funw : sWtil =>
Wtil_rec sWtil scct sppt
(sWtil_rec (Wtil A B f g C D) cct ppt w) = w)
(sppt b y) 1 = 1
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) b: B y: C (f b)
transport
(funw : sWtil =>
Wtil_rec sWtil scct sppt
(sWtil_rec (Wtil A B f g C D) cct ppt w) = w)
(sppt b y) 1 = 1
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) b: B y: C (f b)
1 @ sppt b y =
ap (Wtil_rec sWtil scct sppt)
(ap (sWtil_rec (Wtil A B f g C D) cct ppt)
(sppt b y)) @ 1
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) b: B y: C (f b)
sppt b y =
ap (Wtil_rec sWtil scct sppt)
(ap (sWtil_rec (Wtil A B f g C D) cct ppt)
(sppt b y))
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) b: B y: C (f b)
sppt b y = ap (Wtil_rec sWtil scct sppt) (ppt b y)
bysymmetry; apply (@Wtil_rec_beta_ppt A B f g C D).
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y)
(funx : Wtil A B f g C D =>
sWtil_rec (Wtil A B f g C D) cct ppt
(Wtil_rec sWtil scct sppt x)) == idmap
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y)
forall (b : B) (y : C (f b)),
transport
(funw : Wtil A B f g C D =>
sWtil_rec (Wtil A B f g C D) cct ppt
(Wtil_rec sWtil scct sppt w) = w) (ppt b y) 1 = 1
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) b: B y: C (f b)
transport
(funw : Wtil A B f g C D =>
sWtil_rec (Wtil A B f g C D) cct ppt
(Wtil_rec sWtil scct sppt w) = w) (ppt b y) 1 = 1
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) b: B y: C (f b)
1 @ ppt b y =
ap (sWtil_rec (Wtil A B f g C D) cct ppt)
(ap (Wtil_rec sWtil scct sppt) (ppt b y)) @ 1
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) b: B y: C (f b)
ppt b y =
ap (sWtil_rec (Wtil A B f g C D) cct ppt)
(ap (Wtil_rec sWtil scct sppt) (ppt b y))
H: Univalence B, A: Type f, g: B -> A C: A -> Type D: forallb : B, C (f b) <~> C (g b) W':= Coeq f g: Type P:= Coeq_rec Type C (funb : B => path_universe (D b)): W' -> Type sWtil:= {w : W' & P w}: Type scct:= fun (a : A) (x : C a) => (coeq a; x): foralla : A, C a -> sWtil sppt:= fun (b : B) (y : C (f b)) =>
path_sigma' P (cglue b)
(transport_path_universe' P
(cglue b) (D b)
(Coeq_rec_beta_cglue Type C
(funb0 : B => path_universe (D b0)) b)
y): forall (b : B) (y : C (f b)),
scct (f b) y = scct (g b) (D b y) b: B y: C (f b)
ppt b y =
ap (sWtil_rec (Wtil A B f g C D) cct ppt) (sppt b y)