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]
H: Funext M, N: Monoid f, g: MonoidHomomorphism M N
f == g <~> f = g
H: Funext M, N: Monoid f, g: MonoidHomomorphism M N
f == g <~> f = g
H: Funext M, N: Monoid f, g: MonoidHomomorphism M N
f == g <~>
(issig_MonoidHomomorphism M N)^-1 f =
(issig_MonoidHomomorphism M N)^-1 g
H: Funext M, N: Monoid f, g: MonoidHomomorphism M N
f == g <~>
((issig_MonoidHomomorphism M N)^-1 f).1 =
((issig_MonoidHomomorphism M N)^-1 g).1
apply equiv_path_forall.Defined.
H: Funext M, N: Monoid
IsHSet (MonoidHomomorphism M N)
H: Funext M, N: Monoid
IsHSet (MonoidHomomorphism M N)
H: Funext M, N: Monoid
is_mere_relation (MonoidHomomorphism M N) paths
intros f g; apply (istrunc_equiv_istrunc _ equiv_path_monoidhomomorphism).Defined.Definitionmnd_homo_id {M : Monoid} : MonoidHomomorphism M M
:= Build_MonoidHomomorphism idmap _.Definitionmnd_homo_compose {MNP : Monoid}
: MonoidHomomorphism N P -> MonoidHomomorphism M N
-> MonoidHomomorphism M P
:= funfg => Build_MonoidHomomorphism (f o g) _.(** ** Monoid Isomorphisms *)RecordMonoidIsomorphism (MN : Monoid) := {
mnd_iso_homo :> MonoidHomomorphism M N;
isequiv_mnd_iso :: IsEquiv mnd_iso_homo;
}.
M, N: Monoid f: M <~> N h: IsMonoidPreserving f
MonoidHomomorphism M N
M, N: Monoid f: M <~> N h: IsMonoidPreserving f
MonoidHomomorphism M N
M, N: Monoid f: M <~> N h: IsMonoidPreserving f
MonoidHomomorphism M N
M, N: Monoid f: M <~> N h: IsMonoidPreserving f
IsEquiv ?mnd_iso_homo
M, N: Monoid f: M <~> N h: IsMonoidPreserving f
IsEquiv
{|
mnd_homo_map := f;
ismonoidpreserving_mnd_homo := h
|}
exact _.Defined.Definitionissig_MonoidIsomorphism (MN : Monoid)
: _ <~> MonoidIsomorphism M N
:= ltac:(issig).Coercionequiv_mnd_iso {M N : Monoid}
: MonoidIsomorphism M N -> M <~> N
:= funf => Build_Equiv M N f _.Definitionmnd_iso_id {M : Monoid} : MonoidIsomorphism M M
:= Build_MonoidIsomorphism _ _ mnd_homo_id _.Definitionmnd_iso_compose {MNP : Monoid}
: MonoidIsomorphism N P -> MonoidIsomorphism M N
-> MonoidIsomorphism M P
:= fungf => Build_MonoidIsomorphism _ _ (mnd_homo_compose g f) _.Definitionmnd_iso_inverse {MN : Monoid}
: MonoidIsomorphism M N -> MonoidIsomorphism N M
:= funf => Build_MonoidIsomorphism _ _ (Build_MonoidHomomorphism f^-1 _) _.Instancereflexive_monoidisomorphism
: Reflexive MonoidIsomorphism
:= funM => mnd_iso_id.Instancesymmetric_monoidisomorphism
: Symmetric MonoidIsomorphism
:= funMN => mnd_iso_inverse.Instancetransitive_monoidisomorphism
: Transitive MonoidIsomorphism
:= funMNPfg => mnd_iso_compose g f.(** ** The category of monoids *)Instanceisgraph_monoid : IsGraph Monoid
:= Build_IsGraph Monoid MonoidHomomorphism.Instanceis01cat_monoid : Is01Cat Monoid
:= Build_Is01Cat Monoid _ (@mnd_homo_id) (@mnd_homo_compose).Local Notationmnd_homo_map' M N
:= (@mnd_homo_map M N : _ -> (monoid_type M $-> _)).Instanceis2graph_monoid : Is2Graph Monoid
:= funMN => isgraph_induced (mnd_homo_map' M N).Instanceisgraph_monoidhomomorphism {MN : Monoid} : IsGraph (M $-> N)
:= isgraph_induced (mnd_homo_map' M N).Instanceis01cat_monoidhomomorphism {MN : Monoid} : Is01Cat (M $-> N)
:= is01cat_induced (mnd_homo_map' M N).Instanceis0gpd_monoidhomomorphism {MN : Monoid} : Is0Gpd (M $-> N)
:= is0gpd_induced (mnd_homo_map' M N).
M, N, P: Monoid h: N $-> P
Is0Functor (cat_postcomp M h)
M, N, P: Monoid h: N $-> P
Is0Functor (cat_postcomp M h)
M, N, P: Monoid h: N $-> P
forallab : M $-> N,
(a $-> b) -> cat_postcomp M h a $-> cat_postcomp M h b
intros ? ? p a; exact (ap h (p a)).Defined.
M, N, P: Monoid h: M $-> N
Is0Functor (cat_precomp P h)
M, N, P: Monoid h: M $-> N
Is0Functor (cat_precomp P h)
M, N, P: Monoid h: M $-> N
forallab : N $-> P,
(a $-> b) -> cat_precomp P h a $-> cat_precomp P h b
intros ? ? p; exact (p o h).Defined.
Is1Cat Monoid
Is1Cat Monoid
by rapply Build_Is1Cat.Defined.
HasEquivs Monoid
HasEquivs Monoid
Monoid -> Monoid -> Type
forallab : Monoid, (a $-> b) -> Type
forallab : Monoid, ?CatEquiv' a b -> a $-> b
forall (ab : Monoid) (f : ?CatEquiv' a b),
?CatIsEquiv' a b (?cate_fun' a b f)
forall (ab : Monoid) (f : a $-> b),
?CatIsEquiv' a b f -> ?CatEquiv' a b
forall (ab : Monoid) (f : a $-> b)
(fe : ?CatIsEquiv' a b f),
?cate_fun' a b (?cate_buildequiv' a b f fe) $== f
forallab : Monoid, ?CatEquiv' a b -> b $-> a
forall (ab : Monoid) (f : ?CatEquiv' a b),
?cate_inv' a b f $o ?cate_fun' a b f $== Id a
forall (ab : Monoid) (f : ?CatEquiv' a b),
?cate_fun' a b f $o ?cate_inv' a b f $== Id b
forall (ab : Monoid) (f : a $-> b) (g : b $-> a),
f $o g $== Id b ->
g $o f $== Id a -> ?CatIsEquiv' a b f
Monoid -> Monoid -> Type
exact MonoidIsomorphism.
forallab : Monoid, (a $-> b) -> Type
exact (funMNf => IsEquiv f).
forallab : Monoid, MonoidIsomorphism a b -> a $-> b
intros M N f; exact f.
forall (ab : Monoid) (f : MonoidIsomorphism a b),
(fun (MN : Monoid) (f0 : M $-> N) => IsEquiv f0) a b
((fun (MN : Monoid) (f0 : MonoidIsomorphism M N) =>
mnd_iso_homo M N f0) a b f)
cbn; exact _.
forall (ab : Monoid) (f : a $-> b),
(fun (MN : Monoid) (f0 : M $-> N) => IsEquiv f0) a b
f -> MonoidIsomorphism a b
exact Build_MonoidIsomorphism.
forall (ab : Monoid) (f : a $-> b)
(fe : (fun (MN : Monoid) (f0 : M $-> N) => IsEquiv f0)
a b f),
(fun (MN : Monoid) (f0 : MonoidIsomorphism M N) =>
mnd_iso_homo M N f0) a b
{| mnd_iso_homo := f; isequiv_mnd_iso := fe |} $== f
reflexivity.
forallab : Monoid, MonoidIsomorphism a b -> b $-> a
intros M N; exact mnd_iso_inverse.
forall (ab : Monoid) (f : MonoidIsomorphism a b),
(fun (MN : Monoid) (x : MonoidIsomorphism M N) =>
mnd_iso_homo N M (mnd_iso_inverse x)) a b f $o
(fun (MN : Monoid) (f0 : MonoidIsomorphism M N) =>
mnd_iso_homo M N f0) a b f $== Id a
intros ????; apply eissect.
forall (ab : Monoid) (f : MonoidIsomorphism a b),
(fun (MN : Monoid) (f0 : MonoidIsomorphism M N) =>
mnd_iso_homo M N f0) a b f $o
(fun (MN : Monoid) (x : MonoidIsomorphism M N) =>
mnd_iso_homo N M (mnd_iso_inverse x)) a b f $== Id b
intros ????; apply eisretr.
forall (ab : Monoid) (f : a $-> b) (g : b $-> a),
f $o g $== Id b ->
g $o f $== Id a ->
(fun (MN : Monoid) (f0 : M $-> N) => IsEquiv f0) a b
f