Built with Alectryon. 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.
From HoTT Require Import Basics Types Limits.Pullback Cubical.PathSquare.From HoTT Require Import Basics Types Limits.Pullback Cubical.PathSquare.Require Import Truncations.Core ReflectiveSubuniverse HIT.epi.Require Import Algebra.Groups.Group.Require Import WildCat.Core WildCat.Pullbacks WildCat.EpiStable.(** Pullbacks of groups are formalized by equipping the set-pullback with the desired group structure. The universal property in the category of groups is proved by saying that the corecursion principle [grp_pullback_corec] is an equivalence. *)LocalOpen Scope mc_scope.LocalOpen Scope mc_mult_scope.SectionGrpPullback.(* Variables are named to correspond with Limits.Pullback. *)Context {ABC : Group} (f : B $-> A) (g : C $-> A).
A, B, C: Group f: B $-> A g: C $-> A
SgOp (Pullback f g)
A, B, C: Group f: B $-> A g: C $-> A
SgOp (Pullback f g)
A, B, C: Group f: B $-> A g: C $-> A b: B c: C p: f b = g c d: B e: C q: f d = g e
Pullback f g
A, B, C: Group f: B $-> A g: C $-> A b: B c: C p: f b = g c d: B e: C q: f d = g e
f (b * d) = g (c * e)
exact (grp_homo_op_agree _ _ p q).Defined.
A, B, C: Group f: B $-> A g: C $-> A
Associative grp_pullback_sgop
A, B, C: Group f: B $-> A g: C $-> A
Associative grp_pullback_sgop
A, B, C: Group f: B $-> A g: C $-> A x1: B x2: C p: f x1 = g x2 y1: B y2: C q: f y1 = g y2 z1: B z2: C u: f z1 = g z2
A, B, C: Group f: B $-> A g: C $-> A x1: B x2: C p: f x1 = g x2 y1: B y2: C q: f y1 = g y2 z1: B z2: C u: f z1 = g z2
{p0 : x1 * (y1 * z1) = x1 * y1 * z1 &
{q0 : x2 * (y2 * z2) = x2 * y2 * z2 &
PathSquare (ap f p0) (ap g q0)
(grp_homo_op_agree f g p (grp_homo_op_agree f g q u))
(grp_homo_op_agree f g (grp_homo_op_agree f g p q) u)}}
A, B, C: Group f: B $-> A g: C $-> A x1: B x2: C p: f x1 = g x2 y1: B y2: C q: f y1 = g y2 z1: B z2: C u: f z1 = g z2
PathSquare (ap f (associativity x1 y1 z1)) (ap g (associativity x2 y2 z2))
(grp_homo_op_agree f g p (grp_homo_op_agree f g q u))
(grp_homo_op_agree f g (grp_homo_op_agree f g p q) u)
A, B, C: Group f: B $-> A g: C $-> A x1: B x2: C p: f x1 = g x2 y1: B y2: C q: f y1 = g y2 z1: B z2: C u: f z1 = g z2
ap f (associativity x1 y1 z1) @
grp_homo_op_agree f g (grp_homo_op_agree f g p q) u =
grp_homo_op_agree f g p (grp_homo_op_agree f g q u) @
ap g (associativity x2 y2 z2)
apply path_ishprop.Defined.Local Instancegrp_pullback_issemigroup : IsSemiGroup (Pullback f g) := {}.Local Instancegrp_pullback_mon_unit : MonUnit (Pullback f g)
:= (1; 1; grp_homo_unit f @ (grp_homo_unit g)^).
A, B, C: Group f: B $-> A g: C $-> A b: B c: C p: f b = g c
{p0 : b * 1 = b &
{q : c * 1 = c &
PathSquare (ap f p0) (ap g q)
(grp_homo_op_agree f g p (grp_homo_unit f @ (grp_homo_unit g)^)) p}}
A, B, C: Group f: B $-> A g: C $-> A b: B c: C p: f b = g c
PathSquare (ap f (right_identity b)) (ap g (right_identity c))
(grp_homo_op_agree f g p (grp_homo_unit f @ (grp_homo_unit g)^)) p
A, B, C: Group f: B $-> A g: C $-> A b: B c: C p: f b = g c
ap f (right_identity b) @ p =
grp_homo_op_agree f g p (grp_homo_unit f @ (grp_homo_unit g)^) @
ap g (right_identity c)
apply path_ishprop.Defined.Local Instanceismonoid_grp_pullback : IsMonoid (Pullback f g) := {}.
A, B, C: Group f: B $-> A g: C $-> A
Inverse (Pullback f g)
A, B, C: Group f: B $-> A g: C $-> A
Inverse (Pullback f g)
A, B, C: Group f: B $-> A g: C $-> A b: B c: C p: f b = g c
Pullback f g
A, B, C: Group f: B $-> A g: C $-> A b: B c: C p: f b = g c
(f b)^ = (g c)^
exact (ap (^) p).Defined.
A, B, C: Group f: B $-> A g: C $-> A
LeftInverse sg_op inv 1
A, B, C: Group f: B $-> A g: C $-> A
LeftInverse sg_op inv 1
A, B, C: Group f: B $-> A g: C $-> A
forallx : Pullback f g, x^ * x = 1
A, B, C: Group f: B $-> A g: C $-> A b: B c: C p: f b = g c
(b; c; p)^ * (b; c; p) = 1
A, B, C: Group f: B $-> A g: C $-> A b: B c: C p: f b = g c
(b; c; p)^ * (b; c; p) = 1
A, B, C: Group f: B $-> A g: C $-> A b: B c: C p: f b = g c
{p0 : b^ * b = 1 &
{q : c^ * c = 1 &
PathSquare (ap f p0) (ap g q)
(grp_homo_op_agree f g
((grp_homo_inv f b @ ap inv p) @ (grp_homo_inv g c)^) p)
(grp_homo_unit f @ (grp_homo_unit g)^)}}
A, B, C: Group f: B $-> A g: C $-> A b: B c: C p: f b = g c
PathSquare (ap f (left_inverse b)) (ap g (left_inverse c))
(grp_homo_op_agree f g
((grp_homo_inv f b @ ap inv p) @ (grp_homo_inv g c)^) p)
(grp_homo_unit f @ (grp_homo_unit g)^)
A, B, C: Group f: B $-> A g: C $-> A b: B c: C p: f b = g c
ap f (left_inverse b) @ (grp_homo_unit f @ (grp_homo_unit g)^) =
grp_homo_op_agree f g ((grp_homo_inv f b @ ap inv p) @ (grp_homo_inv g c)^) p @
ap g (left_inverse c)
apply path_ishprop.Defined.
A, B, C: Group f: B $-> A g: C $-> A
RightInverse sg_op inv 1
A, B, C: Group f: B $-> A g: C $-> A
RightInverse sg_op inv 1
A, B, C: Group f: B $-> A g: C $-> A b: B c: C p: f b = g c
(b; c; p) * (b; c; p)^ = 1
A, B, C: Group f: B $-> A g: C $-> A b: B c: C p: f b = g c
(b; c; p) * (b; c; p)^ = 1
A, B, C: Group f: B $-> A g: C $-> A b: B c: C p: f b = g c
{p0 : b * b^ = 1 &
{q : c * c^ = 1 &
PathSquare (ap f p0) (ap g q)
(grp_homo_op_agree f g p
((grp_homo_inv f b @ ap inv p) @ (grp_homo_inv g c)^))
(grp_homo_unit f @ (grp_homo_unit g)^)}}
A, B, C: Group f: B $-> A g: C $-> A b: B c: C p: f b = g c
PathSquare (ap f (right_inverse b)) (ap g (right_inverse c))
(grp_homo_op_agree f g p
((grp_homo_inv f b @ ap inv p) @ (grp_homo_inv g c)^))
(grp_homo_unit f @ (grp_homo_unit g)^)
A, B, C: Group f: B $-> A g: C $-> A b: B c: C p: f b = g c
ap f (right_inverse b) @ (grp_homo_unit f @ (grp_homo_unit g)^) =
grp_homo_op_agree f g p ((grp_homo_inv f b @ ap inv p) @ (grp_homo_inv g c)^) @
ap g (right_inverse c)
apply path_ishprop.Defined.#[export] Instanceisgroup_grp_pullback : IsGroup (Pullback f g) := {}.Definitiongrp_pullback : Group
:= Build_Group (Pullback f g) _ _ _ _.
A, B, C: Group f: B $-> A g: C $-> A
grp_pullback $-> B
A, B, C: Group f: B $-> A g: C $-> A
grp_pullback $-> B
A, B, C: Group f: B $-> A g: C $-> A
grp_pullback -> B
A, B, C: Group f: B $-> A g: C $-> A
IsSemiGroupPreserving ?grp_homo_map
A, B, C: Group f: B $-> A g: C $-> A
grp_pullback -> B
exact pullback_pr1.
A, B, C: Group f: B $-> A g: C $-> A
IsSemiGroupPreserving pullback_pr1
A, B, C: Group f: B $-> A g: C $-> A x, y: grp_pullback
pullback_pr1 (x * y) = pullback_pr1 x * pullback_pr1 y
reflexivity.Defined.
A, B, C: Group f: B $-> A g: C $-> A
grp_pullback $-> C
A, B, C: Group f: B $-> A g: C $-> A
grp_pullback $-> C
A, B, C: Group f: B $-> A g: C $-> A
grp_pullback -> C
A, B, C: Group f: B $-> A g: C $-> A
IsSemiGroupPreserving ?grp_homo_map
A, B, C: Group f: B $-> A g: C $-> A
grp_pullback -> C
exact pullback_pr2.
A, B, C: Group f: B $-> A g: C $-> A
IsSemiGroupPreserving pullback_pr2
A, B, C: Group f: B $-> A g: C $-> A x, y: grp_pullback
pullback_pr2 (x * y) = pullback_pr2 x * pullback_pr2 y
reflexivity.Defined.
A, B, C: Group f: B $-> A g: C $-> A X: Group b: X $-> B c: X $-> C p: f o b == g o c
X $-> grp_pullback
A, B, C: Group f: B $-> A g: C $-> A X: Group b: X $-> B c: X $-> C p: f o b == g o c
X $-> grp_pullback
A, B, C: Group f: B $-> A g: C $-> A X: Group b: X $-> B c: X $-> C p: f o b == g o c
X -> grp_pullback
A, B, C: Group f: B $-> A g: C $-> A X: Group b: X $-> B c: X $-> C p: f o b == g o c
IsSemiGroupPreserving ?grp_homo_map
A, B, C: Group f: B $-> A g: C $-> A X: Group b: X $-> B c: X $-> C p: f o b == g o c
X -> grp_pullback
exact (funx => (b x; c x; p x)).
A, B, C: Group f: B $-> A g: C $-> A X: Group b: X $-> B c: X $-> C p: f o b == g o c
IsSemiGroupPreserving (funx : X => (b x; c x; p x))
A, B, C: Group f: B $-> A g: C $-> A X: Group b: X $-> B c: X $-> C p: f o b == g o c x, y: X
(b (x * y); c (x * y); p (x * y)) = (b x; c x; p x) * (b y; c y; p y)
A, B, C: Group f: B $-> A g: C $-> A X: Group b: X $-> B c: X $-> C p: f o b == g o c x, y: X
(b (x * y); c (x * y); p (x * y)).1 = ((b x; c x; p x) * (b y; c y; p y)).1
A, B, C: Group f: B $-> A g: C $-> A X: Group b: X $-> B c: X $-> C p: f o b == g o c x, y: X
transport (funb0 : B => {c0 : C & f b0 = g c0}) ?p
(b (x * y); c (x * y); p (x * y)).2 =
((b x; c x; p x) * (b y; c y; p y)).2
A, B, C: Group f: B $-> A g: C $-> A X: Group b: X $-> B c: X $-> C p: f o b == g o c x, y: X
(b (x * y); c (x * y); p (x * y)).1 = ((b x; c x; p x) * (b y; c y; p y)).1
A, B, C: Group f: B $-> A g: C $-> A X: Group b: X $-> B c: X $-> C p: f o b == g o c x, y: X
b (x * y) = b x * b y
apply (grp_homo_op b).
A, B, C: Group f: B $-> A g: C $-> A X: Group b: X $-> B c: X $-> C p: f o b == g o c x, y: X
transport (funb0 : B => {c0 : C & f b0 = g c0})
(grp_homo_op b x y
:
(b (x * y); c (x * y); p (x * y)).1 =
((b x; c x; p x) * (b y; c y; p y)).1)
(b (x * y); c (x * y); p (x * y)).2 =
((b x; c x; p x) * (b y; c y; p y)).2
A, B, C: Group f: B $-> A g: C $-> A X: Group b: X $-> B c: X $-> C p: f o b == g o c x, y: X
transport (funb0 : B => {c0 : C & f b0 = g c0}) (grp_homo_op b x y)
(c (x * y); p (x * y)) =
((b x; c x; p x) * (b y; c y; p y)).2
A, B, C: Group f: B $-> A g: C $-> A X: Group b: X $-> B c: X $-> C p: f o b == g o c x, y: X
((c (x * y); p (x * y)).1;
transport (funx0 : B => f x0 = g (c (x * y); p (x * y)).1)
(grp_homo_op b x y) (c (x * y); p (x * y)).2) =
(c x * c y; grp_homo_op_agree f g (p x) (p y))
A, B, C: Group f: B $-> A g: C $-> A X: Group b: X $-> B c: X $-> C p: f o b == g o c x, y: X
(c (x * y);
transport (funx0 : B => f x0 = g (c (x * y))) (grp_homo_op b x y)
(c (x * y); p (x * y)).2) =
(c x * c y; grp_homo_op_agree f g (p x) (p y))
A, B, C: Group f: B $-> A g: C $-> A X: Group b: X $-> B c: X $-> C p: f o b == g o c x, y: X
(c (x * y);
transport (funx0 : B => f x0 = g (c (x * y))) (grp_homo_op b x y)
(c (x * y); p (x * y)).2).1 =
(c x * c y; grp_homo_op_agree f g (p x) (p y)).1
A, B, C: Group f: B $-> A g: C $-> A X: Group b: X $-> B c: X $-> C p: f o b == g o c x, y: X
c (x * y) = c x * c y
apply (grp_homo_op c).Defined.
A, B, C: Group f: B $-> A g: C $-> A X: Group
{b : X $-> B & {c : X $-> C & f o b == g o c}} -> X $-> grp_pullback
A, B, C: Group f: B $-> A g: C $-> A X: Group
{b : X $-> B & {c : X $-> C & f o b == g o c}} -> X $-> grp_pullback
intros [b [c p]]; exact (grp_pullback_corec b c p).Defined.EndGrpPullback.
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: A $-> A' beta: B $-> B' gamma: C $-> C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
grp_pullback f g $-> grp_pullback f' g'
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: A $-> A' beta: B $-> B' gamma: C $-> C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
grp_pullback f g $-> grp_pullback f' g'
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: A $-> A' beta: B $-> B' gamma: C $-> C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
grp_pullback f g $-> B'
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: A $-> A' beta: B $-> B' gamma: C $-> C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
grp_pullback f g $-> C'
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: A $-> A' beta: B $-> B' gamma: C $-> C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
f' o ?b == g' o ?c
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: A $-> A' beta: B $-> B' gamma: C $-> C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
grp_pullback f g $-> B'
exact (beta $o grp_pullback_pr1 f g).
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: A $-> A' beta: B $-> B' gamma: C $-> C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
grp_pullback f g $-> C'
exact (gamma $o grp_pullback_pr2 f g).
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: A $-> A' beta: B $-> B' gamma: C $-> C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
f' o (beta $o grp_pullback_pr1 f g) == g' o (gamma $o grp_pullback_pr2 f g)
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: A $-> A' beta: B $-> B' gamma: C $-> C' h: f' o beta == alpha o f k: alpha o g == g' o gamma x: grp_pullback f g
f' (beta (pullback_pr1 x)) = g' (gamma (pullback_pr2 x))
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: A $-> A' beta: B $-> B' gamma: C $-> C' h: f' o beta == alpha o f k: alpha o g == g' o gamma x: grp_pullback f g
f (pullback_pr1 x) = g (pullback_pr2 x)
apply pullback_commsq.Defined.
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
GroupIsomorphism (grp_pullback f g) (grp_pullback f' g')
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
GroupIsomorphism (grp_pullback f g) (grp_pullback f' g')
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
GroupHomomorphism (grp_pullback f g) (grp_pullback f' g')
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
IsEquiv ?grp_iso_homo
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
IsEquiv (functor_grp_pullback f f' g g' alpha beta gamma h k)
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
grp_pullback f' g' -> grp_pullback f g
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
functor_grp_pullback f f' g g' alpha beta gamma h k o ?g == idmap
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
?g o functor_grp_pullback f f' g g' alpha beta gamma h k == idmap
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
grp_pullback f' g' -> grp_pullback f g
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
A' $-> A
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
B' $-> B
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
C' $-> C
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
f o ?beta == ?alpha o f'
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
?alpha o g' == g o ?gamma
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
f o grp_iso_inverse beta == grp_iso_inverse alpha o f'
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
grp_iso_inverse alpha o g' == g o grp_iso_inverse gamma
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
f o grp_iso_inverse beta == grp_iso_inverse alpha o f'
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma b: B
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma b: B
f b = grp_iso_inverse alpha (f' (beta b))
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma b: B
alpha (f b) = alpha (grp_iso_inverse alpha (f' (beta b)))
exact ((h b)^ @ (eisretr _ _)^).
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
grp_iso_inverse alpha o g' == g o grp_iso_inverse gamma
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma c: C
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma c: C
grp_iso_inverse alpha (g' (gamma c)) = g c
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma c: C
alpha (grp_iso_inverse alpha (g' (gamma c))) = alpha (g c)
exact (eisretr _ _ @ (k c)^).
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
functor_grp_pullback f f' g g' alpha beta gamma h k
o functor_grp_pullback f' f g' g (grp_iso_inverse alpha)
(grp_iso_inverse beta) (grp_iso_inverse gamma)
(equiv_ind beta
(funy : B' =>
(f o grp_iso_inverse beta) y = (grp_iso_inverse alpha o f') y)
(funb : B =>
ap f (eissect beta b) @
(equiv_ap' alpha (f b) (grp_iso_inverse alpha (f' (beta b))))^-1
((h b)^ @ (eisretr alpha (f' (beta b)))^)))
(equiv_ind gamma
(funy : C' =>
(grp_iso_inverse alpha o g') y = (g o grp_iso_inverse gamma) y)
(func : C =>
(equiv_ap' alpha (grp_iso_inverse alpha (g' (gamma c))) (g c))^-1
(eisretr alpha (g' (gamma c)) @ (k c)^) @
ap g (eissect gamma c)^)) ==
idmap
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma
functor_grp_pullback f' f g' g (grp_iso_inverse alpha)
(grp_iso_inverse beta) (grp_iso_inverse gamma)
(equiv_ind beta
(funy : B' =>
(f o grp_iso_inverse beta) y = (grp_iso_inverse alpha o f') y)
(funb : B =>
ap f (eissect beta b) @
(equiv_ap' alpha (f b) (grp_iso_inverse alpha (f' (beta b))))^-1
((h b)^ @ (eisretr alpha (f' (beta b)))^)))
(equiv_ind gamma
(funy : C' =>
(grp_iso_inverse alpha o g') y = (g o grp_iso_inverse gamma) y)
(func : C =>
(equiv_ap' alpha (grp_iso_inverse alpha (g' (gamma c))) (g c))^-1
(eisretr alpha (g' (gamma c)) @ (k c)^) @
ap g (eissect gamma c)^))
o functor_grp_pullback f f' g g' alpha beta gamma h k == idmap
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma x: grp_pullback f' g'
beta (beta^-1 (pullback_pr1 x)) = x.1
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma x: grp_pullback f' g'
gamma (gamma^-1 (pullback_pr2 x)) = (x.2).1
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma x: grp_pullback f g
beta^-1 (beta (pullback_pr1 x)) = x.1
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma x: grp_pullback f g
gamma^-1 (gamma (pullback_pr2 x)) = (x.2).1
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma x: grp_pullback f g
beta^-1 (beta (pullback_pr1 x)) = x.1
A, A', B, B', C, C': Group f: B $-> A f': B' $-> A' g: C $-> A g': C' $-> A' alpha: GroupIsomorphism A A' beta: GroupIsomorphism B B' gamma: GroupIsomorphism C C' h: f' o beta == alpha o f k: alpha o g == g' o gamma x: grp_pullback f g
gamma^-1 (gamma (pullback_pr2 x)) = (x.2).1
1-2: apply eissect.Defined.(** Pulling back along some [g : Y $-> Z] and then [g' : Y' $-> Y] is the same as pulling back along [g $o g']. *)
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
GroupIsomorphism (grp_pullback (grp_pullback_pr2 f g) g')
(grp_pullback f (g $o g'))
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
GroupIsomorphism (grp_pullback (grp_pullback_pr2 f g) g')
(grp_pullback f (g $o g'))
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
GroupHomomorphism (grp_pullback (grp_pullback_pr2 f g) g')
(grp_pullback f (g $o g'))
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
IsEquiv ?grp_iso_homo
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
GroupHomomorphism (grp_pullback (grp_pullback_pr2 f g) g')
(grp_pullback f (g $o g'))
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
grp_pullback (grp_pullback_pr2 f g) g' $-> X
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
grp_pullback (grp_pullback_pr2 f g) g' $-> Y'
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
f o ?b == g $o g' o ?c
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
grp_pullback (grp_pullback_pr2 f g) g' $-> Y'
apply grp_pullback_pr2.
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
f o (grp_pullback_pr1 f g $o grp_pullback_pr1 (grp_pullback_pr2 f g) g') ==
g $o g' o grp_pullback_pr2 (grp_pullback_pr2 f g) g'
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z x: grp_pullback (grp_pullback_pr2 f g) g'
f (pullback_pr1 (pullback_pr1 x)) = g (g' (pullback_pr2 x))
exact (pullback_commsq _ _ _ @ ap g (pullback_commsq _ _ _)).
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
IsEquiv
(grp_pullback_corec f (g $o g')
(grp_pullback_pr1 f g $o grp_pullback_pr1 (grp_pullback_pr2 f g) g')
(grp_pullback_pr2 (grp_pullback_pr2 f g) g')
((funx : grp_pullback (grp_pullback_pr2 f g) g' =>
pullback_commsq f g (pullback_pr1 x) @
ap g (pullback_commsq pullback_pr2 g' x)
:
f
((grp_pullback_pr1 f g $o grp_pullback_pr1 (grp_pullback_pr2 f g) g')
x) =
(g $o g') (grp_pullback_pr2 (grp_pullback_pr2 f g) g' x))
:
f
o (grp_pullback_pr1 f g $o grp_pullback_pr1 (grp_pullback_pr2 f g) g') ==
g $o g' o grp_pullback_pr2 (grp_pullback_pr2 f g) g'))
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
grp_pullback f (g $o g') -> grp_pullback (grp_pullback_pr2 f g) g'
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
grp_pullback_corec f (g $o g')
(grp_pullback_pr1 f g $o grp_pullback_pr1 (grp_pullback_pr2 f g) g')
(grp_pullback_pr2 (grp_pullback_pr2 f g) g')
((funx : grp_pullback (grp_pullback_pr2 f g) g' =>
pullback_commsq f g (pullback_pr1 x) @
ap g (pullback_commsq pullback_pr2 g' x)
:
f
((grp_pullback_pr1 f g $o grp_pullback_pr1 (grp_pullback_pr2 f g) g') x) =
(g $o g') (grp_pullback_pr2 (grp_pullback_pr2 f g) g' x))
:
f o (grp_pullback_pr1 f g $o grp_pullback_pr1 (grp_pullback_pr2 f g) g') ==
g $o g' o grp_pullback_pr2 (grp_pullback_pr2 f g) g')
o ?g == idmap
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
?g
o grp_pullback_corec f (g $o g')
(grp_pullback_pr1 f g $o grp_pullback_pr1 (grp_pullback_pr2 f g) g')
(grp_pullback_pr2 (grp_pullback_pr2 f g) g')
((funx : grp_pullback (grp_pullback_pr2 f g) g' =>
pullback_commsq f g (pullback_pr1 x) @
ap g (pullback_commsq pullback_pr2 g' x)
:
f
((grp_pullback_pr1 f g $o grp_pullback_pr1 (grp_pullback_pr2 f g) g')
x) =
(g $o g') (grp_pullback_pr2 (grp_pullback_pr2 f g) g' x))
:
f o (grp_pullback_pr1 f g $o grp_pullback_pr1 (grp_pullback_pr2 f g) g') ==
g $o g' o grp_pullback_pr2 (grp_pullback_pr2 f g) g') ==
idmap
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
grp_pullback f (g $o g') -> grp_pullback (grp_pullback_pr2 f g) g'
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
grp_pullback f (g $o g') $-> grp_pullback f g
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
grp_pullback f (g $o g') $-> Y'
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
grp_pullback_pr2 f g o ?b == g' o ?c
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
grp_pullback f (g $o g') $-> grp_pullback f g
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
Z $-> Z
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
X $-> X
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
Y' $-> Y
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
f o ?beta == ?alpha o f
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
?alpha o (g $o g') == g o ?gamma
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
Y' $-> Y
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
f o grp_homo_id == grp_homo_id o f
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
grp_homo_id o (g $o g') == g o ?gamma
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
f o grp_homo_id == grp_homo_id o f
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
grp_homo_id o (g $o g') == g o g'
all: reflexivity.
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
grp_pullback f (g $o g') $-> Y'
apply grp_pullback_pr2.
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
grp_pullback_pr2 f g
o functor_grp_pullback f f (g $o g') g grp_homo_id grp_homo_id g'
(funx0 : X => 1%path) (funx0 : Y' => 1%path) ==
g' o grp_pullback_pr2 f (g $o g')
reflexivity.
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
grp_pullback_corec f (g $o g')
(grp_pullback_pr1 f g $o grp_pullback_pr1 (grp_pullback_pr2 f g) g')
(grp_pullback_pr2 (grp_pullback_pr2 f g) g')
((funx : grp_pullback (grp_pullback_pr2 f g) g' =>
pullback_commsq f g (pullback_pr1 x) @
ap g (pullback_commsq pullback_pr2 g' x)
:
f
((grp_pullback_pr1 f g $o grp_pullback_pr1 (grp_pullback_pr2 f g) g') x) =
(g $o g') (grp_pullback_pr2 (grp_pullback_pr2 f g) g' x))
:
f o (grp_pullback_pr1 f g $o grp_pullback_pr1 (grp_pullback_pr2 f g) g') ==
g $o g' o grp_pullback_pr2 (grp_pullback_pr2 f g) g')
o grp_pullback_corec (grp_pullback_pr2 f g) g'
(functor_grp_pullback f f (g $o g') g grp_homo_id grp_homo_id g'
(funx0 : X => 1%path) (funx0 : Y' => 1%path))
(grp_pullback_pr2 f (g $o g'))
(funx0 : Pullback f (funx : Y' => g (g' x)) => 1%path) ==
idmap
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z x: grp_pullback f (g $o g')
(pullback_pr1 x; pullback_pr2 x;
((1 @ ap idmap (pullback_commsq f (funx0 : Y' => g (g' x0)) x)) @ 1) @ 1) =
x
by srapply equiv_path_pullback_hset.
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z
grp_pullback_corec (grp_pullback_pr2 f g) g'
(functor_grp_pullback f f (g $o g') g grp_homo_id grp_homo_id g'
(funx0 : X => 1%path) (funx0 : Y' => 1%path))
(grp_pullback_pr2 f (g $o g'))
(funx0 : Pullback f (funx : Y' => g (g' x)) => 1%path)
o grp_pullback_corec f (g $o g')
(grp_pullback_pr1 f g $o grp_pullback_pr1 (grp_pullback_pr2 f g) g')
(grp_pullback_pr2 (grp_pullback_pr2 f g) g')
((funx : grp_pullback (grp_pullback_pr2 f g) g' =>
pullback_commsq f g (pullback_pr1 x) @
ap g (pullback_commsq pullback_pr2 g' x)
:
f
((grp_pullback_pr1 f g $o grp_pullback_pr1 (grp_pullback_pr2 f g) g')
x) =
(g $o g') (grp_pullback_pr2 (grp_pullback_pr2 f g) g' x))
:
f o (grp_pullback_pr1 f g $o grp_pullback_pr1 (grp_pullback_pr2 f g) g') ==
g $o g' o grp_pullback_pr2 (grp_pullback_pr2 f g) g') ==
idmap
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z x: X y: Y z0: f x = g y y': Y' z1: grp_pullback_pr2 f g (x; y; z0) = g' y'
(x; g' y'; (1 @ ap idmap (z0 @ ap g z1)) @ 1) = (x; y; z0)
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z x: X y: Y z0: f x = g y y': Y' z1: grp_pullback_pr2 f g (x; y; z0) = g' y'
y' = y'
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z x: X y: Y z0: f x = g y y': Y' z1: grp_pullback_pr2 f g (x; y; z0) = g' y'
(x; g' y'; (1 @ ap idmap (z0 @ ap g z1)) @ 1) = (x; y; z0)
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z x: X y: Y z0: f x = g y y': Y' z1: grp_pullback_pr2 f g (x; y; z0) = g' y'
x = x
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z x: X y: Y z0: f x = g y y': Y' z1: grp_pullback_pr2 f g (x; y; z0) = g' y'
g' y' = y
X, Z, Y, Y': Group f: X $-> Z g': Y' $-> Y g: Y $-> Z x: X y: Y z0: f x = g y y': Y' z1: grp_pullback_pr2 f g (x; y; z0) = g' y'
g' y' = y
symmetry; exact z1.Defined.SectionIsEquivGrpPullbackCorec.(* New section with Funext at the start of the Context. *)Context `{Funext} {A B C : Group} (f : B $-> A) (g : C $-> A).
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group b: X $-> B c: X $-> C p: f o b == g o c
grp_pullback_pr1 f g $o grp_pullback_corec f g b c p = b
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group b: X $-> B c: X $-> C p: f o b == g o c
grp_pullback_pr1 f g $o grp_pullback_corec f g b c p = b
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group
IsEquiv (grp_pullback_corec' f g X)
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group
IsEquiv (grp_pullback_corec' f g X)
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group
(X $-> grp_pullback f g) -> {b : X $-> B & {c : X $-> C & f o b == g o c}}
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group
grp_pullback_corec' f g X o ?g == idmap
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group
?g o grp_pullback_corec' f g X == idmap
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group
(X $-> grp_pullback f g) -> {b : X $-> B & {c : X $-> C & f o b == g o c}}
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group phi: X $-> grp_pullback f g
{b : X $-> B & {c : X $-> C & f o b == g o c}}
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group phi: X $-> grp_pullback f g
(funx : X => f ((grp_pullback_pr1 f g $o phi) x)) ==
(funx : X => g ((grp_pullback_pr2 f g $o phi) x))
intro x; exact (pullback_commsq f g (phi x)).
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group
grp_pullback_corec' f g X
o (funphi : X $-> grp_pullback f g =>
(grp_pullback_pr1 f g $o phi; grp_pullback_pr2 f g $o phi;
(funx : X => pullback_commsq f g (phi x))
:
(funx : X => f ((grp_pullback_pr1 f g $o phi) x)) ==
(funx : X => g ((grp_pullback_pr2 f g $o phi) x)))) ==
idmap
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group phi: X $-> grp_pullback f g
grp_pullback_corec' f g X
(grp_pullback_pr1 f g $o phi; grp_pullback_pr2 f g $o phi;
funx : X => pullback_commsq f g (phi x)) =
phi
apply equiv_path_grouphomomorphism; reflexivity.
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group
(funphi : X $-> grp_pullback f g =>
(grp_pullback_pr1 f g $o phi; grp_pullback_pr2 f g $o phi;
(funx : X => pullback_commsq f g (phi x))
:
(funx : X => f ((grp_pullback_pr1 f g $o phi) x)) ==
(funx : X => g ((grp_pullback_pr2 f g $o phi) x))))
o grp_pullback_corec' f g X == idmap
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group bcp: {b : X $-> B &
{c : X $-> C & (funx : X => f (b x)) == (funx : X => g (c x))}}
(grp_homo_compose (grp_pullback_pr1 f g) (grp_pullback_corec' f g X bcp);
grp_homo_compose (grp_pullback_pr2 f g) (grp_pullback_corec' f g X bcp);
funx : X => pullback_commsq f g (bcp.1 x; (bcp.2).1 x; (bcp.2).2 x)) = bcp
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group bcp: {b : X $-> B &
{c : X $-> C & (funx : X => f (b x)) == (funx : X => g (c x))}}
(grp_homo_compose (grp_pullback_pr1 f g) (grp_pullback_corec' f g X bcp);
grp_homo_compose (grp_pullback_pr2 f g) (grp_pullback_corec' f g X bcp);
funx : X => pullback_commsq f g (bcp.1 x; (bcp.2).1 x; (bcp.2).2 x)).1 =
bcp.1
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group bcp: {b : X $-> B &
{c : X $-> C & (funx : X => f (b x)) == (funx : X => g (c x))}}
transport
(funb : GroupHomomorphism X B =>
{c : GroupHomomorphism X C &
(funx : X => f (b x)) == (funx : X => g (c x))})
?p
(grp_homo_compose (grp_pullback_pr1 f g) (grp_pullback_corec' f g X bcp);
grp_homo_compose (grp_pullback_pr2 f g) (grp_pullback_corec' f g X bcp);
funx : X => pullback_commsq f g (bcp.1 x; (bcp.2).1 x; (bcp.2).2 x)).2 =
bcp.2
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group bcp: {b : X $-> B &
{c : X $-> C & (funx : X => f (b x)) == (funx : X => g (c x))}}
(grp_homo_compose (grp_pullback_pr1 f g) (grp_pullback_corec' f g X bcp);
grp_homo_compose (grp_pullback_pr2 f g) (grp_pullback_corec' f g X bcp);
funx : X => pullback_commsq f g (bcp.1 x; (bcp.2).1 x; (bcp.2).2 x)).1 =
bcp.1
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group bcp: {b : X $-> B &
{c : X $-> C & (funx : X => f (b x)) == (funx : X => g (c x))}}
grp_homo_compose (grp_pullback_pr1 f g) (grp_pullback_corec' f g X bcp) =
bcp.1
apply grp_pullback_corec_pr1.
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group bcp: {b : X $-> B &
{c : X $-> C & (funx : X => f (b x)) == (funx : X => g (c x))}}
transport
(funb : GroupHomomorphism X B =>
{c : GroupHomomorphism X C &
(funx : X => f (b x)) == (funx : X => g (c x))})
(grp_pullback_corec_pr1 bcp.1 (bcp.2).1 (bcp.2).2
:
(grp_homo_compose (grp_pullback_pr1 f g) (grp_pullback_corec' f g X bcp);
grp_homo_compose (grp_pullback_pr2 f g) (grp_pullback_corec' f g X bcp);
funx : X => pullback_commsq f g (bcp.1 x; (bcp.2).1 x; (bcp.2).2 x)).1 =
bcp.1)
(grp_homo_compose (grp_pullback_pr1 f g) (grp_pullback_corec' f g X bcp);
grp_homo_compose (grp_pullback_pr2 f g) (grp_pullback_corec' f g X bcp);
funx : X => pullback_commsq f g (bcp.1 x; (bcp.2).1 x; (bcp.2).2 x)).2 =
bcp.2
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group bcp: {b : X $-> B &
{c : X $-> C & (funx : X => f (b x)) == (funx : X => g (c x))}}
(((grp_homo_compose (grp_pullback_pr1 f g) (grp_pullback_corec' f g X bcp);
grp_homo_compose (grp_pullback_pr2 f g) (grp_pullback_corec' f g X bcp);
funx : X => pullback_commsq f g (bcp.1 x; (bcp.2).1 x; (bcp.2).2 x)).2).1;
transport
(funx : GroupHomomorphism X B =>
(funx0 : X => f (x x0)) ==
(funx0 : X =>
g
(((grp_homo_compose (grp_pullback_pr1 f g)
(grp_pullback_corec' f g X bcp);
grp_homo_compose (grp_pullback_pr2 f g)
(grp_pullback_corec' f g X bcp);
funx1 : X =>
pullback_commsq f g (bcp.1 x1; (bcp.2).1 x1; (bcp.2).2 x1)).2).1 x0)))
(grp_pullback_corec_pr1 bcp.1 (bcp.2).1 (bcp.2).2)
((grp_homo_compose (grp_pullback_pr1 f g) (grp_pullback_corec' f g X bcp);
grp_homo_compose (grp_pullback_pr2 f g) (grp_pullback_corec' f g X bcp);
funx : X => pullback_commsq f g (bcp.1 x; (bcp.2).1 x; (bcp.2).2 x)).2).2) =
bcp.2
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group bcp: {b : X $-> B &
{c : X $-> C & (funx : X => f (b x)) == (funx : X => g (c x))}}
grp_homo_compose (grp_pullback_pr2 f g) (grp_pullback_corec' f g X bcp) =
(bcp.2).1
H: Funext A, B, C: Group f: B $-> A g: C $-> A X: Group bcp: {b : X $-> B &
{c : X $-> C & (funx : X => f (b x)) == (funx : X => g (c x))}}
grp_homo_compose (grp_pullback_pr2 f g) (grp_pullback_corec' f g X bcp) =
(bcp.2).1
apply grp_pullback_corec_pr2.Defined.EndIsEquivGrpPullbackCorec.(** The category of groups of 1-pullbacks in the wild sense. Note that we do not need [Funext] for this. *)
forall (z : Group) (kh : z $-> ?cat_pb),
?cat_pb_pr1 $o k $== ?cat_pb_pr1 $o h ->
?cat_pb_pr2 $o k $== ?cat_pb_pr2 $o h -> k $== h
A, B, C: Group f: A $-> C g: B $-> C
Group
exact (grp_pullback f g).
A, B, C: Group f: A $-> C g: B $-> C
grp_pullback f g $-> A
apply grp_pullback_pr1.
A, B, C: Group f: A $-> C g: B $-> C
grp_pullback f g $-> B
apply grp_pullback_pr2.
A, B, C: Group f: A $-> C g: B $-> C
f $o grp_pullback_pr1 f g $== g $o grp_pullback_pr2 f g
apply pullback_commsq.
A, B, C: Group f: A $-> C g: B $-> C
forallz : Group,
ZeroGroupoid.carrier
(ZeroGroupoid.pullback_0gpd (fmap (Yoneda.opyon_0gpd z) f)
(fmap (Yoneda.opyon_0gpd z) g)) ->
z $-> grp_pullback f g
apply grp_pullback_corec'.
A, B, C: Group f: A $-> C g: B $-> C
forall (z : Group)
(khp : ZeroGroupoid.carrier
(ZeroGroupoid.pullback_0gpd (fmap (Yoneda.opyon_0gpd z) f)
(fmap (Yoneda.opyon_0gpd z) g))),
grp_pullback_pr1 f g $o grp_pullback_corec' f g z khp $-> khp.1
A, B, C: Group f: A $-> C g: B $-> C
forall (z : Group)
(khp : {x : GroupHomomorphism z A &
{y : GroupHomomorphism z B &
(funx0 : z => f (x x0)) == (funx0 : z => g (y x0))}}),
(funx : z => khp.1 x) == khp.1
reflexivity.
A, B, C: Group f: A $-> C g: B $-> C
forall (z : Group)
(khp : ZeroGroupoid.carrier
(ZeroGroupoid.pullback_0gpd (fmap (Yoneda.opyon_0gpd z) f)
(fmap (Yoneda.opyon_0gpd z) g))),
grp_pullback_pr2 f g $o grp_pullback_corec' f g z khp $-> (khp.2).1
A, B, C: Group f: A $-> C g: B $-> C
forall (z : Group)
(khp : {x : GroupHomomorphism z A &
{y : GroupHomomorphism z B &
(funx0 : z => f (x x0)) == (funx0 : z => g (y x0))}}),
(funx : z => (khp.2).1 x) == (khp.2).1
reflexivity.
A, B, C: Group f: A $-> C g: B $-> C
forall (z : Group) (kh : z $-> grp_pullback f g),
grp_pullback_pr1 f g $o k $== grp_pullback_pr1 f g $o h ->
grp_pullback_pr2 f g $o k $== grp_pullback_pr2 f g $o h -> k $== h
A, B, C: Group f: A $-> C g: B $-> C Z: Group k, h: Z $-> grp_pullback f g p1: grp_pullback_pr1 f g $o k $== grp_pullback_pr1 f g $o h p2: grp_pullback_pr2 f g $o k $== grp_pullback_pr2 f g $o h
k $== h
A, B, C: Group f: A $-> C g: B $-> C Z: Group k, h: Z $-> grp_pullback f g p1: grp_pullback_pr1 f g $o k $== grp_pullback_pr1 f g $o h p2: grp_pullback_pr2 f g $o k $== grp_pullback_pr2 f g $o h
foralla : Z, ap f (p1 a) @ ((h a).2).2 = ((k a).2).2 @ ap g (p2 a)
A, B, C: Group f: A $-> C g: B $-> C Z: Group k, h: Z $-> grp_pullback f g p1: grp_pullback_pr1 f g $o k $== grp_pullback_pr1 f g $o h p2: grp_pullback_pr2 f g $o k $== grp_pullback_pr2 f g $o h z: Z
ap f (p1 z) @ ((h z).2).2 = ((k z).2).2 @ ap g (p2 z)
apply path_ishprop. (* Here we use that [C] is 0-truncated. *)Defined.