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 Algebra.Groups.Group.Require Import WildCat.Core.(** 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 (funb : B => {c : C & f b = g c}) ?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 (funb : B => {c : C & f b = g c})
(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 (funb : B => {c : C & f b = g c})
(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 (funx : Y' => g (g' x)) 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