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.
A, B, C: Group f, g: A $-> B h: B $-> C p: h $o f $== h $o g
GroupCoeq f g $-> C
A, B, C: Group f, g: A $-> B h: B $-> C p: h $o f $== h $o g
GroupCoeq f g $-> C
A, B, C: Group f, g: A $-> B h: B $-> C p: h $o f $== h $o g
h $o f $o FreeProduct_rec (Id A) (Id A) $== h $o FreeProduct_rec f g
A, B, C: Group f, g: A $-> B h: B $-> C p: h $o f $== h $o g
h $o f $o FreeProduct_rec (Id A) (Id A) $o freeproduct_inl $==
h $o FreeProduct_rec f g $o freeproduct_inl
A, B, C: Group f, g: A $-> B h: B $-> C p: h $o f $== h $o g
h $o f $o FreeProduct_rec (Id A) (Id A) $o freeproduct_inr $==
h $o FreeProduct_rec f g $o freeproduct_inr
(** The goals generated are very simple, but we give explicit proofs with wild cat terms to stop Coq from unfolding terms when checking the proof. Note that the category of groups is definitionally associative. *)
A, B, C: Group f, g: A $-> B h: B $-> C p: h $o f $== h $o g
h $o f $o FreeProduct_rec (Id A) (Id A) $o freeproduct_inl $==
h $o FreeProduct_rec f g $o freeproduct_inl
A, B, C: Group f, g: A $-> B h: B $-> C p: h $o f $== h $o g
h $o f $o (FreeProduct_rec (Id A) (Id A) $o freeproduct_inl) $==
h $o (FreeProduct_rec f g $o freeproduct_inl)
{b : A $-> C & ((b $== h $o f) * (b $== h $o g))%type} <~>
{b : A $-> C &
b $o FreeProduct_rec (Id A) (Id A) $== h $o FreeProduct_rec f g}
H: Funext A, B, C: Group f, g: A $-> B h: B $-> C
foralla : A $-> C,
(funb : A $-> C => ((b $== h $o f) * (b $== h $o g))%type) a <~>
(funb : A $-> C =>
b $o FreeProduct_rec (Id A) (Id A) $== h $o FreeProduct_rec f g) a
H: Funext A, B, C: Group f, g: A $-> B h: B $-> C h': A $-> C
(h' $== h $o f) * (h' $== h $o g) <~>
h' $o FreeProduct_rec (Id A) (Id A) $== h $o FreeProduct_rec f g
H: Funext A, B, C: Group f, g: A $-> B h: B $-> C h': A $-> C
(h' $== h $o f) * (h' $== h $o g) <~>
(h' $o FreeProduct_rec (Id A) (Id A) $o freeproduct_inl $==
h $o FreeProduct_rec f g $o freeproduct_inl) *
(h' $o FreeProduct_rec (Id A) (Id A) $o freeproduct_inr $==
h $o FreeProduct_rec f g $o freeproduct_inr)
H: Funext A, B, C: Group f, g: A $-> B h: B $-> C h': A $-> C
h' $== h $o f <~>
h' $o FreeProduct_rec (Id A) (Id A) $o freeproduct_inl $==
h $o FreeProduct_rec f g $o freeproduct_inl
H: Funext A, B, C: Group f, g: A $-> B h: B $-> C h': A $-> C
h' $== h $o g <~>
h' $o FreeProduct_rec (Id A) (Id A) $o freeproduct_inr $==
h $o FreeProduct_rec f g $o freeproduct_inr
H: Funext A, B, C: Group f, g: A $-> B h: B $-> C h': A $-> C
h' $== h $o f <~>
h' $o FreeProduct_rec (Id A) (Id A) $o freeproduct_inl $==
h $o FreeProduct_rec f g $o freeproduct_inl
H: Funext A, B, C: Group f, g: A $-> B h: B $-> C h': A $-> C a: A
h' a = h (f a) <~> h' (a * 1) = h (f a * 1)
byrewrite2 grp_unit_r.
H: Funext A, B, C: Group f, g: A $-> B h: B $-> C h': A $-> C
h' $== h $o g <~>
h' $o FreeProduct_rec (Id A) (Id A) $o freeproduct_inr $==
h $o FreeProduct_rec f g $o freeproduct_inr
H: Funext A, B, C: Group f, g: A $-> B h: B $-> C h': A $-> C a: A
h' a = h (g a) <~> h' (a * 1) = h (g a * 1)
byrewrite2 grp_unit_r.Defined.
G, H: Group f, g: G $-> H P: GroupCoeq f g -> Type H0: forallx : GroupCoeq f g, IsHProp (P x) c: forallh : H, P (groupcoeq_in h) Hop: forallxy : GroupCoeq f g, P x -> P y -> P (x * y)
forallx : GroupCoeq f g, P x
G, H: Group f, g: G $-> H P: GroupCoeq f g -> Type H0: forallx : GroupCoeq f g, IsHProp (P x) c: forallh : H, P (groupcoeq_in h) Hop: forallxy : GroupCoeq f g, P x -> P y -> P (x * y)
forallx : GroupCoeq f g, P x
G, H: Group f, g: G $-> H P: GroupCoeq f g -> Type H0: forallx : GroupCoeq f g, IsHProp (P x) c: forallh : H, P (groupcoeq_in h) Hop: forallxy : GroupCoeq f g, P x -> P y -> P (x * y)
forallx : AmalgamatedFreeProduct (FreeProduct_rec (Id G) (Id G))
(FreeProduct_rec f g),
IsHProp (P x)
G, H: Group f, g: G $-> H P: GroupCoeq f g -> Type H0: forallx : GroupCoeq f g, IsHProp (P x) c: forallh : H, P (groupcoeq_in h) Hop: forallxy : GroupCoeq f g, P x -> P y -> P (x * y)
foralla : G, P (amal_inl a)
G, H: Group f, g: G $-> H P: GroupCoeq f g -> Type H0: forallx : GroupCoeq f g, IsHProp (P x) c: forallh : H, P (groupcoeq_in h) Hop: forallxy : GroupCoeq f g, P x -> P y -> P (x * y)
forallb : H, P (amal_inr b)
G, H: Group f, g: G $-> H P: GroupCoeq f g -> Type H0: forallx : GroupCoeq f g, IsHProp (P x) c: forallh : H, P (groupcoeq_in h) Hop: forallxy : GroupCoeq f g, P x -> P y -> P (x * y)
forallxy : AmalgamatedFreeProduct (FreeProduct_rec (Id G) (Id G))
(FreeProduct_rec f g),
P x -> P y -> P (x * y)
G, H: Group f, g: G $-> H P: GroupCoeq f g -> Type H0: forallx : GroupCoeq f g, IsHProp (P x) c: forallh : H, P (groupcoeq_in h) Hop: forallxy : GroupCoeq f g, P x -> P y -> P (x * y)
forallx : AmalgamatedFreeProduct (FreeProduct_rec (Id G) (Id G))
(FreeProduct_rec f g),
IsHProp (P x)
exact _.
G, H: Group f, g: G $-> H P: GroupCoeq f g -> Type H0: forallx : GroupCoeq f g, IsHProp (P x) c: forallh : H, P (groupcoeq_in h) Hop: forallxy : GroupCoeq f g, P x -> P y -> P (x * y)
foralla : G, P (amal_inl a)
G, H: Group f, g: G $-> H P: GroupCoeq f g -> Type H0: forallx0 : GroupCoeq f g, IsHProp (P x0) c: forallh : H, P (groupcoeq_in h) Hop: forallx0y : GroupCoeq f g, P x0 -> P y -> P (x0 * y) x: G
P (amal_inl x)
G, H: Group f, g: G $-> H P: GroupCoeq f g -> Type H0: forallx0 : GroupCoeq f g, IsHProp (P x0) c: forallh : H, P (groupcoeq_in h) Hop: forallx0y : GroupCoeq f g, P x0 -> P y -> P (x0 * y) x: G
P (amal_inl (x * 1))
G, H: Group f, g: G $-> H P: GroupCoeq f g -> Type H0: forallx0 : GroupCoeq f g, IsHProp (P x0) c: forallh : H, P (groupcoeq_in h) Hop: forallx0y : GroupCoeq f g, P x0 -> P y -> P (x0 * y) x: G
P ((amal_inr $o FreeProduct_rec f g) (freeproduct_inl x))
G, H: Group f, g: G $-> H P: GroupCoeq f g -> Type H0: forallx0 : GroupCoeq f g, IsHProp (P x0) c: forallh : H, P (groupcoeq_in h) Hop: forallx0y : GroupCoeq f g, P x0 -> P y -> P (x0 * y) x: G
P (amal_eta [inr (f x * 1)]%list)
G, H: Group f, g: G $-> H P: GroupCoeq f g -> Type H0: forallx0 : GroupCoeq f g, IsHProp (P x0) c: forallh : H, P (groupcoeq_in h) Hop: forallx0y : GroupCoeq f g, P x0 -> P y -> P (x0 * y) x: G
P (amal_eta [inr (f x)]%list)
exact (c (f x)).
G, H: Group f, g: G $-> H P: GroupCoeq f g -> Type H0: forallx : GroupCoeq f g, IsHProp (P x) c: forallh : H, P (groupcoeq_in h) Hop: forallxy : GroupCoeq f g, P x -> P y -> P (x * y)
forallb : H, P (amal_inr b)
exact c.
G, H: Group f, g: G $-> H P: GroupCoeq f g -> Type H0: forallx : GroupCoeq f g, IsHProp (P x) c: forallh : H, P (groupcoeq_in h) Hop: forallxy : GroupCoeq f g, P x -> P y -> P (x * y)
forallxy : AmalgamatedFreeProduct (FreeProduct_rec (Id G) (Id G))
(FreeProduct_rec f g),
P x -> P y -> P (x * y)