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.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Types.Paths Types.Sigma Types.Prod HFiber Limits.Pullback.(** * Pushouts of "dependent spans". *)SectionSpanPushout.Context {XY : Type} (Q : X -> Y -> Type).DefinitionSPushout := @Pushout@{up _ _ up} (sig@{up _} (fun (xy : X * Y) => Q (fst xy) (snd xy))) X Y
(fst o pr1) (snd o pr1).Definitionspushl : X -> SPushout := pushl.Definitionspushr : Y -> SPushout := pushr.Definitionspglue {x:X} {y:Y} : Q x y -> spushl x = spushr y
:= funq => pglue ((x,y) ; q).
X, Y: Type Q: X -> Y -> Type R: Type spushl': X -> R spushr': Y -> R spglue': forall (x : X) (y : Y),
Q x y -> spushl' x = spushr' y
SPushout -> R
X, Y: Type Q: X -> Y -> Type R: Type spushl': X -> R spushr': Y -> R spglue': forall (x : X) (y : Y),
Q x y -> spushl' x = spushr' y
SPushout -> R
X, Y: Type Q: X -> Y -> Type R: Type spushl': X -> R spushr': Y -> R spglue': forall (x : X) (y : Y),
Q x y -> spushl' x = spushr' y
foralla : {xy : X * Y & Q (fst xy) (snd xy)},
spushl' ((fst o pr1) a) = spushr' ((snd o pr1) a)
X, Y: Type Q: X -> Y -> Type R: Type spushl': X -> R spushr': Y -> R spglue': forall (x : X) (y : Y),
Q x y -> spushl' x = spushr' y x: X y: Y q: Q x y
spushl' x = spushr' y
apply spglue'; assumption.Defined.Definitionspushout_rec_beta_spglue (R : Type)
(spushl' : X -> R) (spushr' : Y -> R)
(spglue' : forallxy (q : Q x y), spushl' x = spushr' y)
(x:X) (y:Y) (q:Q x y)
: ap (spushout_rec R spushl' spushr' spglue') (spglue q) = spglue' x y q
:= Pushout_rec_beta_pglue _ _ _ _ ((x, y); q).
X, Y: Type Q: X -> Y -> Type R: SPushout -> Type spushl': forallx : X, R (spushl x) spushr': forally : Y, R (spushr y) spglue': forall (x : X) (y : Y)
(q : Q x y),
transport R (spglue q) (spushl' x) =
spushr' y
forallp : SPushout, R p
X, Y: Type Q: X -> Y -> Type R: SPushout -> Type spushl': forallx : X, R (spushl x) spushr': forally : Y, R (spushr y) spglue': forall (x : X) (y : Y)
(q : Q x y),
transport R (spglue q) (spushl' x) =
spushr' y
forallp : SPushout, R p
X, Y: Type Q: X -> Y -> Type R: SPushout -> Type spushl': forallx : X, R (spushl x) spushr': forally : Y, R (spushr y) spglue': forall (x : X) (y : Y)
(q : Q x y),
transport R (spglue q) (spushl' x) =
spushr' y
foralla : {xy : X * Y & Q (fst xy) (snd xy)},
transport R (pglue a) (spushl' ((fst o pr1) a)) =
spushr' ((snd o pr1) a)
X, Y: Type Q: X -> Y -> Type R: SPushout -> Type spushl': forallx : X, R (spushl x) spushr': forally : Y, R (spushr y) spglue': forall (x : X) (y : Y)
(q : Q x y),
transport R (spglue q) (spushl' x) =
spushr' y x: X y: Y q: Q x y
transport R (pglue ((x, y); q)) (spushl' x) =
spushr' y
apply spglue'; assumption.Defined.Definitionspushout_ind_beta_spglue (R : SPushout -> Type)
(spushl' : forallx, R (spushl x))
(spushr' : forally, R (spushr y))
(spglue' : forallxy (q : Q x y),
transport R (spglue q) (spushl' x) = (spushr' y))
(x:X) (y:Y) (q:Q x y)
: apD (spushout_ind R spushl' spushr' spglue') (spglue q) = spglue' x y q
:= Pushout_ind_beta_pglue _ _ _ _ ((x,y);q).EndSpanPushout.
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f: X -> Z g: Y -> W h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y)
SPushout Q -> SPushout Q'
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f: X -> Z g: Y -> W h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y)
SPushout Q -> SPushout Q'
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f: X -> Z g: Y -> W h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y)
X -> SPushout Q'
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f: X -> Z g: Y -> W h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y)
Y -> SPushout Q'
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f: X -> Z g: Y -> W h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y)
forall (x : X) (y : Y),
Q x y -> ?spushl' x = ?spushr' y
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f: X -> Z g: Y -> W h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y)
X -> SPushout Q'
exact (funx => spushl Q' (f x)).
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f: X -> Z g: Y -> W h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y)
Y -> SPushout Q'
exact (funy => spushr Q' (g y)).
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f: X -> Z g: Y -> W h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y)
forall (x : X) (y : Y),
Q x y ->
(funx0 : X => spushl Q' (f x0)) x =
(funy0 : Y => spushr Q' (g y0)) y
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f: X -> Z g: Y -> W h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y) x: X y: Y q: Q x y
(funx : X => spushl Q' (f x)) x =
(funy : Y => spushr Q' (g y)) y
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f: X -> Z g: Y -> W h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y) x: X y: Y q: Q x y
Q' (f x) (g y)
exact (h x y q).Defined.
X, Y, X', Y', X'', Y'': Type Q: X -> Y -> Type Q': X' -> Y' -> Type Q'': X'' -> Y'' -> Type f: X -> X' g: Y -> Y' f': X' -> X'' g': Y' -> Y'' h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y) h': forall (x : X') (y : Y'),
Q' x y -> Q'' (f' x) (g' y)
functor_spushout f' g' h' o functor_spushout f g h ==
functor_spushout (f' o f) (g' o g)
(fun (x : X) (y : Y) => h' (f x) (g y) o h x y)
X, Y, X', Y', X'', Y'': Type Q: X -> Y -> Type Q': X' -> Y' -> Type Q'': X'' -> Y'' -> Type f: X -> X' g: Y -> Y' f': X' -> X'' g': Y' -> Y'' h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y) h': forall (x : X') (y : Y'),
Q' x y -> Q'' (f' x) (g' y)
functor_spushout f' g' h' o functor_spushout f g h ==
functor_spushout (f' o f) (g' o g)
(fun (x : X) (y : Y) => h' (f x) (g y) o h x y)
X, Y, X', Y', X'', Y'': Type Q: X -> Y -> Type Q': X' -> Y' -> Type Q'': X'' -> Y'' -> Type f: X -> X' g: Y -> Y' f': X' -> X'' g': Y' -> Y'' h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y) h': forall (x : X') (y : Y'),
Q' x y -> Q'' (f' x) (g' y)
forallx : X,
(funp : SPushout Q =>
(functor_spushout f' g' h' o functor_spushout f g h)
p =
functor_spushout (f' o f) (g' o g)
(fun (x0 : X) (y : Y) => h' (f x0) (g y) o h x0 y)
p) (spushl Q x)
X, Y, X', Y', X'', Y'': Type Q: X -> Y -> Type Q': X' -> Y' -> Type Q'': X'' -> Y'' -> Type f: X -> X' g: Y -> Y' f': X' -> X'' g': Y' -> Y'' h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y) h': forall (x : X') (y : Y'),
Q' x y -> Q'' (f' x) (g' y)
forally : Y,
(funp : SPushout Q =>
(functor_spushout f' g' h' o functor_spushout f g h)
p =
functor_spushout (f' o f) (g' o g)
(fun (x : X) (y0 : Y) => h' (f x) (g y0) o h x y0)
p) (spushr Q y)
X, Y, X', Y', X'', Y'': Type Q: X -> Y -> Type Q': X' -> Y' -> Type Q'': X'' -> Y'' -> Type f: X -> X' g: Y -> Y' f': X' -> X'' g': Y' -> Y'' h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y) h': forall (x : X') (y : Y'),
Q' x y -> Q'' (f' x) (g' y)
forall (x : X) (y : Y) (q : Q x y),
transport
(funp : SPushout Q =>
(functor_spushout f' g' h' o functor_spushout f g h)
p =
functor_spushout (f' o f) (g' o g)
(fun (x0 : X) (y0 : Y) =>
h' (f x0) (g y0) o h x0 y0) p) (spglue Q q)
(?spushl' x) = ?spushr' y
X, Y, X', Y', X'', Y'': Type Q: X -> Y -> Type Q': X' -> Y' -> Type Q'': X'' -> Y'' -> Type f: X -> X' g: Y -> Y' f': X' -> X'' g': Y' -> Y'' h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y) h': forall (x : X') (y : Y'),
Q' x y -> Q'' (f' x) (g' y)
forall (x : X) (y : Y) (q : Q x y),
transport
(funp : SPushout Q =>
(functor_spushout f' g' h' o functor_spushout f g h)
p =
functor_spushout (f' o f) (g' o g)
(fun (x0 : X) (y0 : Y) =>
h' (f x0) (g y0) o h x0 y0) p) (spglue Q q)
((funx0 : X => 1) x) = (funy0 : Y => 1) y
X, Y, X', Y', X'', Y'': Type Q: X -> Y -> Type Q': X' -> Y' -> Type Q'': X'' -> Y'' -> Type f: X -> X' g: Y -> Y' f': X' -> X'' g': Y' -> Y'' h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y) h': forall (x : X') (y : Y'),
Q' x y -> Q'' (f' x) (g' y) x: X y: Y q: Q x y
transport
(funp : SPushout Q =>
functor_spushout f' g' h'
(functor_spushout f g h p) =
functor_spushout (funx : X => f' (f x))
(funx : Y => g' (g x))
(fun (x : X) (y : Y) (x0 : Q x y) =>
h' (f x) (g y) (h x y x0)) p) (spglue Q q) 1 = 1
X, Y, X', Y', X'', Y'': Type Q: X -> Y -> Type Q': X' -> Y' -> Type Q'': X'' -> Y'' -> Type f: X -> X' g: Y -> Y' f': X' -> X'' g': Y' -> Y'' h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y) h': forall (x : X') (y : Y'),
Q' x y -> Q'' (f' x) (g' y) x: X y: Y q: Q x y
ap (functor_spushout f' g' h')
(ap (functor_spushout f g h) (spglue Q q)) @ 1 =
1 @
ap
(functor_spushout (funx : X => f' (f x))
(funx : Y => g' (g x))
(fun (x : X) (y : Y) (x0 : Q x y) =>
h' (f x) (g y) (h x y x0))) (spglue Q q)
X, Y, X', Y', X'', Y'': Type Q: X -> Y -> Type Q': X' -> Y' -> Type Q'': X'' -> Y'' -> Type f: X -> X' g: Y -> Y' f': X' -> X'' g': Y' -> Y'' h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y) h': forall (x : X') (y : Y'),
Q' x y -> Q'' (f' x) (g' y) x: X y: Y q: Q x y
ap (functor_spushout f' g' h')
(ap (functor_spushout f g h) (spglue Q q)) =
ap
(functor_spushout (funx : X => f' (f x))
(funx : Y => g' (g x))
(fun (x : X) (y : Y) (x0 : Q x y) =>
h' (f x) (g y) (h x y x0))) (spglue Q q)
X, Y, X', Y', X'', Y'': Type Q: X -> Y -> Type Q': X' -> Y' -> Type Q'': X'' -> Y'' -> Type f: X -> X' g: Y -> Y' f': X' -> X'' g': Y' -> Y'' h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y) h': forall (x : X') (y : Y'),
Q' x y -> Q'' (f' x) (g' y) x: X y: Y q: Q x y
ap (functor_spushout f g h) (spglue Q q) = ?Goal
X, Y, X', Y', X'', Y'': Type Q: X -> Y -> Type Q': X' -> Y' -> Type Q'': X'' -> Y'' -> Type f: X -> X' g: Y -> Y' f': X' -> X'' g': Y' -> Y'' h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y) h': forall (x : X') (y : Y'),
Q' x y -> Q'' (f' x) (g' y) x: X y: Y q: Q x y
ap (functor_spushout f' g' h') ?Goal =
ap
(functor_spushout (funx : X => f' (f x))
(funx : Y => g' (g x))
(fun (x : X) (y : Y) (x0 : Q x y) =>
h' (f x) (g y) (h x y x0))) (spglue Q q)
X, Y, X', Y', X'', Y'': Type Q: X -> Y -> Type Q': X' -> Y' -> Type Q'': X'' -> Y'' -> Type f: X -> X' g: Y -> Y' f': X' -> X'' g': Y' -> Y'' h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y) h': forall (x : X') (y : Y'),
Q' x y -> Q'' (f' x) (g' y) x: X y: Y q: Q x y
ap (functor_spushout f' g' h') (spglue Q' (h x y q)) =
ap
(functor_spushout (funx : X => f' (f x))
(funx : Y => g' (g x))
(fun (x : X) (y : Y) (x0 : Q x y) =>
h' (f x) (g y) (h x y x0))) (spglue Q q)
X, Y, X', Y', X'', Y'': Type Q: X -> Y -> Type Q': X' -> Y' -> Type Q'': X'' -> Y'' -> Type f: X -> X' g: Y -> Y' f': X' -> X'' g': Y' -> Y'' h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y) h': forall (x : X') (y : Y'),
Q' x y -> Q'' (f' x) (g' y) x: X y: Y q: Q x y
spglue Q'' (h' (f x) (g y) (h x y q)) =
ap
(functor_spushout (funx : X => f' (f x))
(funx : Y => g' (g x))
(fun (x : X) (y : Y) (x0 : Q x y) =>
h' (f x) (g y) (h x y x0))) (spglue Q q)
X, Y, X', Y', X'', Y'': Type Q: X -> Y -> Type Q': X' -> Y' -> Type Q'': X'' -> Y'' -> Type f: X -> X' g: Y -> Y' f': X' -> X'' g': Y' -> Y'' h: forall (x : X) (y : Y), Q x y -> Q' (f x) (g y) h': forall (x : X') (y : Y'),
Q' x y -> Q'' (f' x) (g' y) x: X y: Y q: Q x y
ap
(functor_spushout (funx : X => f' (f x))
(funx : Y => g' (g x))
(fun (x : X) (y : Y) (x0 : Q x y) =>
h' (f x) (g y) (h x y x0))) (spglue Q q) =
spglue Q'' (h' (f x) (g y) (h x y q))
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f, g: X -> Z h: f == g i, j: Y -> W k: i == j l: forall (x : X) (y : Y), Q x y -> Q' (f x) (i y) m: forall (x : X) (y : Y), Q x y -> Q' (g x) (j y) H: forall (x : X) (y : Y) (q : Q x y),
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ spglue Q' (m x y q)
functor_spushout f i l == functor_spushout g j m
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f, g: X -> Z h: f == g i, j: Y -> W k: i == j l: forall (x : X) (y : Y), Q x y -> Q' (f x) (i y) m: forall (x : X) (y : Y), Q x y -> Q' (g x) (j y) H: forall (x : X) (y : Y) (q : Q x y),
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ spglue Q' (m x y q)
functor_spushout f i l == functor_spushout g j m
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f, g: X -> Z h: f == g i, j: Y -> W k: i == j l: forall (x : X) (y : Y), Q x y -> Q' (f x) (i y) m: forall (x : X) (y : Y), Q x y -> Q' (g x) (j y) H: forall (x : X) (y : Y) (q : Q x y),
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ spglue Q' (m x y q)
forallx : X,
(funp : SPushout Q =>
functor_spushout f i l p = functor_spushout g j m p)
(spushl Q x)
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f, g: X -> Z h: f == g i, j: Y -> W k: i == j l: forall (x : X) (y : Y), Q x y -> Q' (f x) (i y) m: forall (x : X) (y : Y), Q x y -> Q' (g x) (j y) H: forall (x : X) (y : Y) (q : Q x y),
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ spglue Q' (m x y q)
forally : Y,
(funp : SPushout Q =>
functor_spushout f i l p = functor_spushout g j m p)
(spushr Q y)
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f, g: X -> Z h: f == g i, j: Y -> W k: i == j l: forall (x : X) (y : Y), Q x y -> Q' (f x) (i y) m: forall (x : X) (y : Y), Q x y -> Q' (g x) (j y) H: forall (x : X) (y : Y) (q : Q x y),
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ spglue Q' (m x y q)
forall (x : X) (y : Y) (q : Q x y),
transport
(funp : SPushout Q =>
functor_spushout f i l p = functor_spushout g j m p)
(spglue Q q) (?spushl' x) = ?spushr' y
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f, g: X -> Z h: f == g i, j: Y -> W k: i == j l: forall (x : X) (y : Y), Q x y -> Q' (f x) (i y) m: forall (x : X) (y : Y), Q x y -> Q' (g x) (j y) H: forall (x : X) (y : Y) (q : Q x y),
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ spglue Q' (m x y q)
forallx : X,
(funp : SPushout Q =>
functor_spushout f i l p = functor_spushout g j m p)
(spushl Q x)
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f, g: X -> Z h: f == g i, j: Y -> W k: i == j l: forall (x : X) (y : Y), Q x y -> Q' (f x) (i y) m: forall (x : X) (y : Y), Q x y -> Q' (g x) (j y) H: forall (x : X) (y : Y) (q : Q x y),
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ spglue Q' (m x y q) x: X
functor_spushout f i l (spushl Q x) =
functor_spushout g j m (spushl Q x)
exact (ap (spushl Q') (h x)).
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f, g: X -> Z h: f == g i, j: Y -> W k: i == j l: forall (x : X) (y : Y), Q x y -> Q' (f x) (i y) m: forall (x : X) (y : Y), Q x y -> Q' (g x) (j y) H: forall (x : X) (y : Y) (q : Q x y),
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ spglue Q' (m x y q)
forally : Y,
(funp : SPushout Q =>
functor_spushout f i l p = functor_spushout g j m p)
(spushr Q y)
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f, g: X -> Z h: f == g i, j: Y -> W k: i == j l: forall (x : X) (y : Y), Q x y -> Q' (f x) (i y) m: forall (x : X) (y : Y), Q x y -> Q' (g x) (j y) H: forall (x : X) (y : Y) (q : Q x y),
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ spglue Q' (m x y q) y: Y
functor_spushout f i l (spushr Q y) =
functor_spushout g j m (spushr Q y)
exact (ap (spushr Q') (k y)).
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f, g: X -> Z h: f == g i, j: Y -> W k: i == j l: forall (x : X) (y : Y), Q x y -> Q' (f x) (i y) m: forall (x : X) (y : Y), Q x y -> Q' (g x) (j y) H: forall (x : X) (y : Y) (q : Q x y),
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ spglue Q' (m x y q)
forall (x : X) (y : Y) (q : Q x y),
transport
(funp : SPushout Q =>
functor_spushout f i l p = functor_spushout g j m p)
(spglue Q q)
((funx0 : X =>
ap (spushl Q') (h x0)
:
(funp : SPushout Q =>
functor_spushout f i l p =
functor_spushout g j m p) (spushl Q x0)) x) =
(funy0 : Y =>
ap (spushr Q') (k y0)
:
(funp : SPushout Q =>
functor_spushout f i l p = functor_spushout g j m p)
(spushr Q y0)) y
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f, g: X -> Z h: f == g i, j: Y -> W k: i == j l: forall (x : X) (y : Y), Q x y -> Q' (f x) (i y) m: forall (x : X) (y : Y), Q x y -> Q' (g x) (j y) H: forall (x : X) (y : Y) (q : Q x y),
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ spglue Q' (m x y q) x: X y: Y q: Q x y
transport
(funp : SPushout Q =>
functor_spushout f i l p = functor_spushout g j m p)
(spglue Q q)
((funx : X =>
ap (spushl Q') (h x)
:
(funp : SPushout Q =>
functor_spushout f i l p =
functor_spushout g j m p) (spushl Q x)) x) =
(funy : Y =>
ap (spushr Q') (k y)
:
(funp : SPushout Q =>
functor_spushout f i l p = functor_spushout g j m p)
(spushr Q y)) y
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f, g: X -> Z h: f == g i, j: Y -> W k: i == j l: forall (x : X) (y : Y), Q x y -> Q' (f x) (i y) m: forall (x : X) (y : Y), Q x y -> Q' (g x) (j y) H: forall (x : X) (y : Y) (q : Q x y),
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ spglue Q' (m x y q) x: X y: Y q: Q x y
ap (functor_spushout f i l) (spglue Q q) @
ap (spushr Q') (k y) =
ap (spushl Q') (h x) @
ap (functor_spushout g j m) (spglue Q q)
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f, g: X -> Z h: f == g i, j: Y -> W k: i == j l: forall (x : X) (y : Y), Q x y -> Q' (f x) (i y) m: forall (x : X) (y : Y), Q x y -> Q' (g x) (j y) H: forall (x : X) (y : Y) (q : Q x y),
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ spglue Q' (m x y q) x: X y: Y q: Q x y
ap (functor_spushout f i l) (spglue Q q) = ?Goal
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f, g: X -> Z h: f == g i, j: Y -> W k: i == j l: forall (x : X) (y : Y), Q x y -> Q' (f x) (i y) m: forall (x : X) (y : Y), Q x y -> Q' (g x) (j y) H: forall (x : X) (y : Y) (q : Q x y),
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ spglue Q' (m x y q) x: X y: Y q: Q x y
?Goal @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @
ap (functor_spushout g j m) (spglue Q q)
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f, g: X -> Z h: f == g i, j: Y -> W k: i == j l: forall (x : X) (y : Y), Q x y -> Q' (f x) (i y) m: forall (x : X) (y : Y), Q x y -> Q' (g x) (j y) H: forall (x : X) (y : Y) (q : Q x y),
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ spglue Q' (m x y q) x: X y: Y q: Q x y
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @
ap (functor_spushout g j m) (spglue Q q)
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f, g: X -> Z h: f == g i, j: Y -> W k: i == j l: forall (x : X) (y : Y), Q x y -> Q' (f x) (i y) m: forall (x : X) (y : Y), Q x y -> Q' (g x) (j y) H: forall (x : X) (y : Y) (q : Q x y),
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ spglue Q' (m x y q) x: X y: Y q: Q x y
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ ?Goal
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f, g: X -> Z h: f == g i, j: Y -> W k: i == j l: forall (x : X) (y : Y), Q x y -> Q' (f x) (i y) m: forall (x : X) (y : Y), Q x y -> Q' (g x) (j y) H: forall (x : X) (y : Y) (q : Q x y),
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ spglue Q' (m x y q) x: X y: Y q: Q x y
ap (functor_spushout g j m) (spglue Q q) = ?Goal
X, Y, Z, W: Type Q: X -> Y -> Type Q': Z -> W -> Type f, g: X -> Z h: f == g i, j: Y -> W k: i == j l: forall (x : X) (y : Y), Q x y -> Q' (f x) (i y) m: forall (x : X) (y : Y), Q x y -> Q' (g x) (j y) H: forall (x : X) (y : Y) (q : Q x y),
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ spglue Q' (m x y q) x: X y: Y q: Q x y
spglue Q' (l x y q) @ ap (spushr Q') (k y) =
ap (spushl Q') (h x) @ spglue Q' (m x y q)
apply H.Defined.(** Any pushout is equivalent to a span pushout. *)
X, Y, Z: Type f: X -> Y g: X -> Z
Pushout f g <~>
SPushout
(fun (y : Y) (z : Z) =>
{x : X & (f x = y) * (g x = z)})
X, Y, Z: Type f: X -> Y g: X -> Z
Pushout f g <~>
SPushout
(fun (y : Y) (z : Z) =>
{x : X & (f x = y) * (g x = z)})
X, Y, Z: Type f: X -> Y g: X -> Z
X <~>
{xy : Y * Z &
(fun (y : Y) (z : Z) =>
{x : X & (f x = y) * (g x = z)}) (fst xy) (snd xy)}
X, Y, Z: Type f: X -> Y g: X -> Z
Y <~> Y
X, Y, Z: Type f: X -> Y g: X -> Z
Z <~> Z
X, Y, Z: Type f: X -> Y g: X -> Z
?eB o f ==
(funx : {xy : Y * Z &
(fun (y : Y) (z : Z) =>
{x : X & (f x = y) * (g x = z)}) (fst xy)
(snd xy)} => fst x.1) o ?eA
X, Y, Z: Type f: X -> Y g: X -> Z
?eC o g ==
(funx : {xy : Y * Z &
(fun (y : Y) (z : Z) =>
{x : X & (f x = y) * (g x = z)}) (fst xy)
(snd xy)} => snd x.1) o ?eA
X, Y, Z: Type f: X -> Y g: X -> Z
X <~>
{xy : Y * Z &
(fun (y : Y) (z : Z) =>
{x : X & (f x = y) * (g x = z)}) (fst xy) (snd xy)}
X, Y, Z: Type f: X -> Y g: X -> Z
X <~>
{a : Y &
{b : Z &
{x : X & (f x = fst (a, b)) * (g x = snd (a, b))}}}
apply equiv_double_fibration_replacement.
X, Y, Z: Type f: X -> Y g: X -> Z
Y <~> Y
X, Y, Z: Type f: X -> Y g: X -> Z
Z <~> Z
X, Y, Z: Type f: X -> Y g: X -> Z
?eB o f ==
(funx : {xy : Y * Z &
(fun (y : Y) (z : Z) =>
{x : X & (f x = y) * (g x = z)}) (fst xy)
(snd xy)} => fst x.1)
o (equiv_sigma_prod
(funxy : Y * Z =>
(fun (y : Y) (z : Z) =>
{x : X & (f x = y) * (g x = z)}) (fst xy)
(snd xy))
oE equiv_double_fibration_replacement f g)
X, Y, Z: Type f: X -> Y g: X -> Z
?eC o g ==
(funx : {xy : Y * Z &
(fun (y : Y) (z : Z) =>
{x : X & (f x = y) * (g x = z)}) (fst xy)
(snd xy)} => snd x.1)
o (equiv_sigma_prod
(funxy : Y * Z =>
(fun (y : Y) (z : Z) =>
{x : X & (f x = y) * (g x = z)}) (fst xy)
(snd xy))
oE equiv_double_fibration_replacement f g)
1-4: reflexivity.Defined.(** There is a natural map from the total space of [Q] to the pushout product of [Q]. *)Definitionspushout_sjoin_map {XY : Type} (Q : X -> Y -> Type)
: {x : X & {y : Y & Q x y}} -> Pullback (spushl Q) (spushr Q)
:= functor_sigma idmap (fun_ => functor_sigma idmap (fun_ => spglue Q)).