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]
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: 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) x: G
P (amal_inl 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) x: G
P (amal_inl (x * 1))
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) 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: 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) x: G
P (amal_eta [inr (f x * 1)]%list)
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) 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)