Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.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 Export HoTT.Classes.interfaces.canonical_names.Require Import Modalities.ReflectiveSubuniverse.Local Set Polymorphic Inductive Cumulativity.Generalizable VariablesA B f g x y.(* For various structures we omit declaration of substructures. For example, if we say:Class Setoid_Morphism := { setoidmor_a : Setoid A ; setoidmor_b : Setoid B ; sm_proper : Proper ((=) ==> (=)) f }.#[export] Existing Instances setoidmor_a setoidmor_b sm_proper.then each time a Setoid instance is required, Coq will try to prove that aSetoid_Morphism exists. This obviously results in an enormous blow-up of thesearch space. Moreover, one should be careful to declare a Setoid_Morphismsas a substructure. Consider [f t1 t2], now if we want to perform setoid rewritingin [t2] Coq will first attempt to prove that [f t1] is Proper, for which it will attempt to prove [Setoid_Morphism (f t1)]. If many structures declareSetoid_Morphism as a substructure, setoid rewriting will become horribly slow.*)(* An unbundled variant of the former CoRN CSetoid. We do not include a proof that A is a Setoid because it can be derived. *)ClassIsApartA {Aap : Apart A} : Type :=
{ apart_set : IsHSet A
; apart_mere : is_mere_relation _ apart
; apart_symmetric : Symmetric (≶)
; apart_cotrans : CoTransitive (≶)
; tight_apart : forallxy, ~(x ≶ y) <-> x = y }.#[export] Existing Instances
apart_set
apart_mere
apart_symmetric
apart_cotrans.
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A Anegate: Negate A
IsCRing -> IsRing
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A Anegate: Negate A
IsCRing -> IsRing
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A Anegate: Negate A H: IsCRing
IsRing
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A Anegate: Negate A H: IsCRing
RightDistribute mult plus
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A Anegate: Negate A H: IsCRing a, b, c: A
(a + b) * c = a * c + b * c
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A Anegate: Negate A H: IsCRing a, b, c: A
sg_op c (a + b) = a * c + b * c
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A Anegate: Negate A H: IsCRing a, b, c: A
c * a + c * b = a * c + b * c
f_ap; apply commutativity.Defined.ClassIsIntegralDomain :=
{ intdom_ring : IsCRing
; intdom_nontrivial : PropHolds (not (1 = 0))
; intdom_nozeroes : NoZeroDivisors A }.#[export] Existing Instances intdom_nozeroes.(* We do not include strong extensionality for (-) and (/) because it can de derived *)ClassIsField {Aap: Apart A} {Arecip: Recip A} :=
{ field_ring : IsCRing
; field_apart : IsApart A
; field_plus_ext : StrongBinaryExtensionality (+)
; field_mult_ext : StrongBinaryExtensionality (.*.)
; field_nontrivial : PropHolds (1 ≶ 0)
; recip_inverse : forallx, x.1 // x = 1 }.#[export] Existing Instances
field_ring
field_apart
field_plus_ext
field_mult_ext.(* We let /0 = 0 so properties as Injective (/), f (/x) = / (f x), / /x = x, /x * /y = /(x * y) hold without any additional assumptions *)ClassIsDecField {Adec_recip : DecRecip A} :=
{ decfield_ring : IsCRing
; decfield_nontrivial : PropHolds (1 <> 0)
; dec_recip_0 : /0 = 0
; dec_recip_inverse : forallx, x <> 0 -> x / x = 1 }.#[export] Existing Instances decfield_ring.ClassFieldCharacteristic@{j} {Aap : Apart@{i j} A} (k : nat) : Type@{j}
:= field_characteristic : foralln : nat,
Nat.Core.lt 0 n ->
iff@{j j j} (forallm : nat, not@{j} (paths@{Set} n
(Nat.Core.mul k m)))
(@apart A Aap (nat_iter n (1 +) 0) 0).Endupper_classes.(* Due to bug #2528 *)#[export]
Hint Extern4 (PropHolds (1 <> 0)) =>
eapply @intdom_nontrivial : typeclass_instances.#[export]
Hint Extern5 (PropHolds (1 ≶ 0)) =>
eapply @field_nontrivial : typeclass_instances.#[export]
Hint Extern5 (PropHolds (1 <> 0)) =>
eapply @decfield_nontrivial : typeclass_instances.(* For a strange reason IsCRing instances of Integers are sometimes obtained byIntegers -> IntegralDomain -> Ring and sometimes directly. Making this aninstance with a low priority instead of using intdom_ring:> IsCRing forces Coq totake the right way *)#[export]
Hint Extern10 (IsCRing _) => apply @intdom_ring : typeclass_instances.Arguments recip_inverse {A Aplus Amult Azero Aone Anegate Aap Arecip IsField} _.Arguments dec_recip_inverse
{A Aplus Amult Azero Aone Anegate Adec_recip IsDecField} _ _.Arguments dec_recip_0 {A Aplus Amult Azero Aone Anegate Adec_recip IsDecField}.Sectionlattice.ContextA {Ajoin: Join A} {Ameet: Meet A} {Abottom : Bottom A} {Atop : Top A}.ClassIsJoinSemiLattice :=
join_semilattice : @IsSemiLattice A join_is_sg_op.#[export] Existing Instancejoin_semilattice.ClassIsBoundedJoinSemiLattice :=
bounded_join_semilattice : @IsBoundedSemiLattice A
join_is_sg_op bottom_is_mon_unit.#[export] Existing Instancebounded_join_semilattice.ClassIsMeetSemiLattice :=
meet_semilattice : @IsSemiLattice A meet_is_sg_op.#[export] Existing Instancemeet_semilattice.ClassIsBoundedMeetSemiLattice :=
bounded_meet_semilattice : @IsBoundedSemiLattice A
meet_is_sg_op top_is_mon_unit.#[export] Existing Instancebounded_meet_semilattice.ClassIsLattice :=
{ lattice_join : IsJoinSemiLattice
; lattice_meet : IsMeetSemiLattice
; join_meet_absorption : Absorption (⊔) (⊓)
; meet_join_absorption : Absorption (⊓) (⊔) }.#[export] Existing Instances
lattice_join
lattice_meet
join_meet_absorption
meet_join_absorption.ClassIsBoundedLattice :=
{ boundedlattice_join : IsBoundedJoinSemiLattice
; boundedlattice_meet : IsBoundedMeetSemiLattice
; boundedjoin_meet_absorption : Absorption (⊔) (⊓)
; boundedmeet_join_absorption : Absorption (⊓) (⊔)}.#[export] Existing Instances
boundedlattice_join
boundedlattice_meet
boundedjoin_meet_absorption
boundedmeet_join_absorption.ClassIsDistributiveLattice :=
{ distr_lattice_lattice : IsLattice
; join_meet_distr_l : LeftDistribute (⊔) (⊓) }.#[export] Existing Instances distr_lattice_lattice join_meet_distr_l.Endlattice.Sectionmorphism_classes.Sectionsgmorphism_classes.Context {AB : Type} {Aop : SgOp A} {Bop : SgOp B}
{Aunit : MonUnit A} {Bunit : MonUnit B}.LocalOpen Scope mc_mult_scope.ClassIsSemiGroupPreserving (f : A -> B) :=
preserves_sg_op : forallxy, f (x * y) = f x * f y.ClassIsUnitPreserving (f : A -> B) :=
preserves_mon_unit : f mon_unit = mon_unit.ClassIsMonoidPreserving (f : A -> B) :=
{ monmor_sgmor : IsSemiGroupPreserving f
; monmor_unitmor : IsUnitPreserving f }.#[export] Existing Instances monmor_sgmor monmor_unitmor.Endsgmorphism_classes.Sectionringmorphism_classes.Context {AB : Type} {Aplus : Plus A} {Bplus : Plus B}
{Amult : Mult A} {Bmult : Mult B} {Azero : Zero A} {Bzero : Zero B}
{Aone : One A} {Bone : One B}.ClassIsSemiRingPreserving (f : A -> B) :=
{ semiringmor_plus_mor : @IsMonoidPreserving A B
plus_is_sg_op plus_is_sg_op zero_is_mon_unit zero_is_mon_unit f
; semiringmor_mult_mor : @IsMonoidPreserving A B
mult_is_sg_op mult_is_sg_op one_is_mon_unit one_is_mon_unit f }.#[export] Existing Instances semiringmor_plus_mor semiringmor_mult_mor.Context {Aap : Apart A} {Bap : Apart B}.ClassIsSemiRingStrongPreserving (f : A -> B) :=
{ strong_semiringmor_sr_mor : IsSemiRingPreserving f
; strong_semiringmor_strong_mor : StrongExtensionality f }.#[export] Existing Instances strong_semiringmor_sr_mor strong_semiringmor_strong_mor.Endringmorphism_classes.Sectionlatticemorphism_classes.Context {AB : Type} {Ajoin : Join A} {Bjoin : Join B}
{Ameet : Meet A} {Bmeet : Meet B}.ClassIsJoinPreserving (f : A -> B) :=
join_slmor_sgmor : @IsSemiGroupPreserving A B join_is_sg_op join_is_sg_op f.#[export] Existing Instances join_slmor_sgmor.ClassIsMeetPreserving (f : A -> B) :=
meet_slmor_sgmor : @IsSemiGroupPreserving A B meet_is_sg_op meet_is_sg_op f.#[export] Existing Instances meet_slmor_sgmor.Context {Abottom : Bottom A} {Bbottom : Bottom B}.ClassIsBoundedJoinPreserving (f : A -> B) := bounded_join_slmor_monmor
: @IsMonoidPreserving A B join_is_sg_op join_is_sg_op
bottom_is_mon_unit bottom_is_mon_unit f.#[export] Existing Instances bounded_join_slmor_monmor.ClassIsLatticePreserving (f : A -> B) :=
{ latticemor_join_mor : IsJoinPreserving f
; latticemor_meet_mor : IsMeetPreserving f }.#[export] Existing Instances
latticemor_join_mor
latticemor_meet_mor.Endlatticemorphism_classes.Endmorphism_classes.Sectionjections.Context {AB} (f : A -> B).ClassIsInjective := injective : forallxy, f x = f y -> x = y.
A, B: Type f: A -> B H: IsInjective x, y: A
x <> y -> f x <> f y
A, B: Type f: A -> B H: IsInjective x, y: A
x <> y -> f x <> f y
A, B: Type f: A -> B H: IsInjective x, y: A E1: x <> y E2: f x = f y
Empty
A, B: Type f: A -> B H: IsInjective x, y: A E1: x <> y E2: f x = f y
x = y
A, B: Type f: A -> B H: IsInjective x, y: A E1: x <> y E2: f x = f y
f x = f y
assumption.Qed.Endjections.Global Instanceisinj_idmapA : @IsInjective A A idmap
:= funxy => idmap.#[export]
Hint Unfold IsInjective : typeclass_instances.#[export]
Instanceisinjective_mapinO_tr {AB : Type} (f : A -> B)
{p : MapIn (Tr (-1)) f} : IsInjective f
:= funxypfeq => ap pr1 (@center _ (p (f y) (x; pfeq) (y; idpath))).Sectionstrong_injective.Context {AB} {Aap : Apart A} {Bap : Apart B} (f : A -> B) .ClassIsStrongInjective :=
{ strong_injective : forallxy, x ≶ y -> f x ≶ f y
; strong_injective_mor : StrongExtensionality f }.Endstrong_injective.Sectionextras.ClassCutMinusSpecA (cm : CutMinus A) `{Zero A} `{Plus A} `{Le A} := {
cut_minus_le : forallxy, y ≤ x -> x ∸ y + y = x ;
cut_minus_0 : forallxy, x ≤ y -> x ∸ y = 0
}.
H: Funext A, B: Type IsHSet0: IsHSet B H0: SgOp A H1: SgOp B f: A -> B
IsHProp (IsSemiGroupPreserving f)
H: Funext A, B: Type IsHSet0: IsHSet B H0: SgOp A H1: SgOp B f: A -> B
IsHProp (IsSemiGroupPreserving f)
unfold IsSemiGroupPreserving; exact _.Defined.Definitionissig_IsSemiRingPreserving {AB : Type}
`{Plus A, Plus B, Mult A, Mult B, Zero A, Zero B, One A, One B} {f : A -> B}
: _ <~> IsSemiRingPreserving f := ltac:(issig).Definitionissig_IsMonoidPreserving {AB : Type} `{SgOp A} `{SgOp B}
`{MonUnit A} `{MonUnit B} {f : A -> B} : _ <~> IsMonoidPreserving f
:= ltac:(issig).
H: Funext A, B: Type H0: SgOp A H1: SgOp B IsHSet0: IsHSet B H2: MonUnit A H3: MonUnit B f: A -> B
IsHProp (IsMonoidPreserving f)
H: Funext A, B: Type H0: SgOp A H1: SgOp B IsHSet0: IsHSet B H2: MonUnit A H3: MonUnit B f: A -> B
IsHProp (IsMonoidPreserving f)
H: Funext A, B: Type H0: SgOp A H1: SgOp B IsHSet0: IsHSet B H2: MonUnit A H3: MonUnit B f: A -> B
IsHProp
{_ : IsSemiGroupPreserving f & IsUnitPreserving f}
H: Funext A, B: Type H0: SgOp A H1: SgOp B IsHSet0: IsHSet B H2: MonUnit A H3: MonUnit B f: A -> B
IsHProp (IsSemiGroupPreserving f * IsUnitPreserving f)
H: Funext A, B: Type H0: SgOp A H1: SgOp B IsHSet0: IsHSet B H2: MonUnit A H3: MonUnit B f: A -> B
IsHProp (IsUnitPreserving f)
H: Funext A, B: Type H0: SgOp A H1: SgOp B IsHSet0: IsHSet B H2: MonUnit A H3: MonUnit B f: A -> B
IsHProp (f mon_unit = mon_unit)
exact _.Defined.
H: Funext A, B: Type IsHSet0: IsHSet B H0: Plus A H1: Plus B H2: Mult A H3: Mult B H4: Zero A H5: Zero B H6: One A H7: One B f: A -> B
IsHProp (IsSemiRingPreserving f)
H: Funext A, B: Type IsHSet0: IsHSet B H0: Plus A H1: Plus B H2: Mult A H3: Mult B H4: Zero A H5: Zero B H6: One A H7: One B f: A -> B
IsHProp (IsSemiRingPreserving f)
H: Funext A, B: Type IsHSet0: IsHSet B H0: Plus A H1: Plus B H2: Mult A H3: Mult B H4: Zero A H5: Zero B H6: One A H7: One B f: A -> B
IsHProp
{_ : IsMonoidPreserving f & IsMonoidPreserving f}
exact _.Defined.Definitionissig_issemigroupxy : _ <~> @IsSemiGroup x y := ltac:(issig).
Contr
(issig_issemigroup x y
((issig_issemigroup x y)^-1 a) = b)
H: Funext x: Type y: SgOp x a, b: IsSemiGroup x
Contr
(issig_issemigroup x y
((issig_issemigroup x y)^-1 a) =
issig_issemigroup x y
((issig_issemigroup x y)^-1 b))
H: Funext x: Type y: SgOp x a, b: IsSemiGroup x a':= (issig_issemigroup x y)^-1 a: {_ : IsHSet x & Associative sg_op}
Contr
(issig_issemigroup x y a' =
issig_issemigroup x y
((issig_issemigroup x y)^-1 b))
H: Funext x: Type y: SgOp x a, b: IsSemiGroup x a':= (issig_issemigroup x y)^-1 a: {_ : IsHSet x & Associative sg_op} b':= (issig_issemigroup x y)^-1 b: {_ : IsHSet x & Associative sg_op}
Contr
(issig_issemigroup x y a' = issig_issemigroup x y b')
H: Funext x: Type y: SgOp x a', b': {_ : IsHSet x & Associative sg_op}
Contr
(issig_issemigroup x y a' = issig_issemigroup x y b')
H: Funext x: Type y: SgOp x a', b': {_ : IsHSet x & Associative sg_op}
Contr (a' = b')
H: Funext x: Type y: SgOp x a', b': {_ : IsHSet x & Associative sg_op}
H: Funext x: Type y: SgOp x a', b': {_ : IsHSet x & Associative sg_op} a:= equiv_sigma_prod0 (IsHSet x) (Associative sg_op) a': (IsHSet x * Associative sg_op)%type b:= equiv_sigma_prod0 (IsHSet x) (Associative sg_op) b': (IsHSet x * Associative sg_op)%type
Contr
((equiv_sigma_prod0 (IsHSet x) (Associative sg_op))^-1
a =
(equiv_sigma_prod0 (IsHSet x) (Associative sg_op))^-1
b)
H: Funext x: Type y: SgOp x a, b: (IsHSet x * Associative sg_op)%type
Contr
((equiv_sigma_prod0 (IsHSet x) (Associative sg_op))^-1
a =
(equiv_sigma_prod0 (IsHSet x) (Associative sg_op))^-1
b)
H: Funext x: Type y: SgOp x a, b: (IsHSet x * Associative sg_op)%type
Contr (a = b)
H: Funext x: Type y: SgOp x a, b: (IsHSet x * Associative sg_op)%type
Contr ((fst a = fst b) * (snd a = snd b))
H: Funext x: Type y: SgOp x a, b: (IsHSet x * Associative sg_op)%type
Contr (snd a = snd b)
H: Funext x: Type y: SgOp x a': IsHSet x a: Associative sg_op b': IsHSet x b: Associative sg_op
Contr (snd (a', a) = snd (b', b))
H: Funext x: Type y: SgOp x a': IsHSet x a: Associative sg_op b': IsHSet x b: Associative sg_op a0, a1, a2: x
Contr (snd (a', a) a0 a1 a2 = snd (b', b) a0 a1 a2)
exact _.Defined.Definitionissig_ismonoidxyz : _ <~> @IsMonoid x y z := ltac:(issig).
H: Funext x: Type y: SgOp x z: MonUnit x
IsHProp (IsMonoid x)
H: Funext x: Type y: SgOp x z: MonUnit x
IsHProp (IsMonoid x)
H: Funext x: Type y: SgOp x z: MonUnit x
forallx0y0 : IsMonoid x, Contr (x0 = y0)
H: Funext x: Type y: SgOp x z: MonUnit x a, b: IsMonoid x
Contr (a = b)
H: Funext x: Type y: SgOp x z: MonUnit x a, b: IsMonoid x
Contr
(issig_ismonoid x y z ((issig_ismonoid x y z)^-1 a) =
b)
H: Funext x: Type y: SgOp x z: MonUnit x a, b: IsMonoid x
Contr
(issig_ismonoid x y z ((issig_ismonoid x y z)^-1 a) =
issig_ismonoid x y z ((issig_ismonoid x y z)^-1 b))
H: Funext x: Type y: SgOp x z: MonUnit x a, b: IsMonoid x a':= (issig_ismonoid x y z)^-1 a: {_ : IsSemiGroup x &
{_ : LeftIdentity sg_op mon_unit &
RightIdentity sg_op mon_unit}}
Contr
(issig_ismonoid x y z a' =
issig_ismonoid x y z ((issig_ismonoid x y z)^-1 b))
H: Funext x: Type y: SgOp x z: MonUnit x a, b: IsMonoid x a':= (issig_ismonoid x y z)^-1 a: {_ : IsSemiGroup x &
{_ : LeftIdentity sg_op mon_unit &
RightIdentity sg_op mon_unit}} b':= (issig_ismonoid x y z)^-1 b: {_ : IsSemiGroup x &
{_ : LeftIdentity sg_op mon_unit &
RightIdentity sg_op mon_unit}}
Contr
(issig_ismonoid x y z a' = issig_ismonoid x y z b')
H: Funext x: Type y: SgOp x z: MonUnit x a', b': {_ : IsSemiGroup x &
{_ : LeftIdentity sg_op mon_unit &
RightIdentity sg_op mon_unit}}
Contr
(issig_ismonoid x y z a' = issig_ismonoid x y z b')
H: Funext x: Type y: SgOp x z: MonUnit x a', b': {_ : IsSemiGroup x &
{_ : LeftIdentity sg_op mon_unit &
RightIdentity sg_op mon_unit}}
Contr (a' = b')
H: Funext x: Type y: SgOp x z: MonUnit x a', b': {_ : IsSemiGroup x &
{_ : LeftIdentity sg_op mon_unit &
RightIdentity sg_op mon_unit}}
H: Funext x: Type y: SgOp x z: MonUnit x a', b': IsSemiGroup x a'', b'': (LeftIdentity sg_op mon_unit * RightIdentity sg_op mon_unit)%type
Contr (a'' = b'')
H: Funext x: Type y: SgOp x z: MonUnit x a', b': IsSemiGroup x a'', b'': (LeftIdentity sg_op mon_unit * RightIdentity sg_op mon_unit)%type
Contr ((fst a'' = fst b'') * (snd a'' = snd b''))
H: Funext x: Type y: SgOp x z: MonUnit x a', b': IsSemiGroup x a: LeftIdentity sg_op mon_unit a'': RightIdentity sg_op mon_unit b: LeftIdentity sg_op mon_unit b'': RightIdentity sg_op mon_unit
Contr ((a = b) * (a'' = b''))
H: Funext x: Type y: SgOp x z: MonUnit x a', b': IsSemiGroup x a: LeftIdentity sg_op mon_unit a'': RightIdentity sg_op mon_unit b: LeftIdentity sg_op mon_unit b'': RightIdentity sg_op mon_unit
Contr (a = b)
H: Funext x: Type y: SgOp x z: MonUnit x a', b': IsSemiGroup x a: LeftIdentity sg_op mon_unit a'': RightIdentity sg_op mon_unit b: LeftIdentity sg_op mon_unit b'': RightIdentity sg_op mon_unit
Contr (a'' = b'')
H: Funext x: Type y: SgOp x z: MonUnit x a', b': IsSemiGroup x a: LeftIdentity sg_op mon_unit a'': RightIdentity sg_op mon_unit b: LeftIdentity sg_op mon_unit b'': RightIdentity sg_op mon_unit
Contr (LeftIdentity sg_op mon_unit)
H: Funext x: Type y: SgOp x z: MonUnit x a', b': IsSemiGroup x a: LeftIdentity sg_op mon_unit a'': RightIdentity sg_op mon_unit b: LeftIdentity sg_op mon_unit b'': RightIdentity sg_op mon_unit
Contr (RightIdentity sg_op mon_unit)
H: Funext x: Type y: SgOp x z: MonUnit x a', b': IsSemiGroup x a: LeftIdentity sg_op mon_unit a'': RightIdentity sg_op mon_unit b: LeftIdentity sg_op mon_unit b'': RightIdentity sg_op mon_unit
IsHProp (LeftIdentity sg_op mon_unit)
H: Funext x: Type y: SgOp x z: MonUnit x a', b': IsSemiGroup x a: LeftIdentity sg_op mon_unit a'': RightIdentity sg_op mon_unit b: LeftIdentity sg_op mon_unit b'': RightIdentity sg_op mon_unit
IsHProp (RightIdentity sg_op mon_unit)
all: srapply istrunc_forall.Defined.Definitionissig_isgroupwxyz : _ <~> @IsGroup w x y z := ltac:(issig).
H: Funext w: Type x: SgOp w y: MonUnit w z: Negate w
IsHProp (IsGroup w)
H: Funext w: Type x: SgOp w y: MonUnit w z: Negate w
IsHProp (IsGroup w)
H: Funext w: Type x: SgOp w y: MonUnit w z: Negate w
forallx0y0 : IsGroup w, Contr (x0 = y0)
H: Funext w: Type x: SgOp w y: MonUnit w z: Negate w a, b: IsGroup w
Contr (a = b)
H: Funext w: Type x: SgOp w y: MonUnit w z: Negate w a, b: IsGroup w
Contr
(issig_isgroup w x y z
((issig_isgroup w x y z)^-1 a) = b)
H: Funext w: Type x: SgOp w y: MonUnit w z: Negate w a, b: IsGroup w
Contr
(issig_isgroup w x y z
((issig_isgroup w x y z)^-1 a) =
issig_isgroup w x y z
((issig_isgroup w x y z)^-1 b))
H: Funext w: Type x: SgOp w y: MonUnit w z: Negate w a, b: IsGroup w a':= (issig_isgroup w x y z)^-1 a: {_ : IsMonoid w &
{_ : LeftInverse sg_op negate mon_unit &
RightInverse sg_op negate mon_unit}}
Contr
(issig_isgroup w x y z a' =
issig_isgroup w x y z
((issig_isgroup w x y z)^-1 b))
H: Funext w: Type x: SgOp w y: MonUnit w z: Negate w a, b: IsGroup w a':= (issig_isgroup w x y z)^-1 a: {_ : IsMonoid w &
{_ : LeftInverse sg_op negate mon_unit &
RightInverse sg_op negate mon_unit}} b':= (issig_isgroup w x y z)^-1 b: {_ : IsMonoid w &
{_ : LeftInverse sg_op negate mon_unit &
RightInverse sg_op negate mon_unit}}
Contr
(issig_isgroup w x y z a' = issig_isgroup w x y z b')
H: Funext w: Type x: SgOp w y: MonUnit w z: Negate w a', b': {_ : IsMonoid w &
{_ : LeftInverse sg_op negate mon_unit &
RightInverse sg_op negate mon_unit}}
Contr
(issig_isgroup w x y z a' = issig_isgroup w x y z b')
H: Funext w: Type x: SgOp w y: MonUnit w z: Negate w a', b': {_ : IsMonoid w &
{_ : LeftInverse sg_op negate mon_unit &
RightInverse sg_op negate mon_unit}}
Contr (a' = b')
H: Funext w: Type x: SgOp w y: MonUnit w z: Negate w a', b': {_ : IsMonoid w &
{_ : LeftInverse sg_op negate mon_unit &
RightInverse sg_op negate mon_unit}}
H: Funext w: Type x: SgOp w y: MonUnit w z: Negate w a, b: (IsMonoid w *
{_ : LeftInverse sg_op negate mon_unit &
RightInverse sg_op negate mon_unit})%type
H: Funext w: Type x: SgOp w y: MonUnit w z: Negate w a, b: (IsMonoid w *
{_ : LeftInverse sg_op negate mon_unit &
RightInverse sg_op negate mon_unit})%type
Contr (a = b)
H: Funext w: Type x: SgOp w y: MonUnit w z: Negate w a, b: (IsMonoid w *
{_ : LeftInverse sg_op negate mon_unit &
RightInverse sg_op negate mon_unit})%type
Contr ((fst a = fst b) * (snd a = snd b))
H: Funext w: Type x: SgOp w y: MonUnit w z: Negate w a, b: (IsMonoid w *
{_ : LeftInverse sg_op negate mon_unit &
RightInverse sg_op negate mon_unit})%type
Contr (snd a = snd b)
H: Funext w: Type x: SgOp w y: MonUnit w z: Negate w a': IsMonoid w a: {_ : LeftInverse sg_op negate mon_unit &
RightInverse sg_op negate mon_unit} b': IsMonoid w b: {_ : LeftInverse sg_op negate mon_unit &
RightInverse sg_op negate mon_unit}
Contr (a = b)
H: Funext w: Type x: SgOp w y: MonUnit w z: Negate w a': IsMonoid w a: {_ : LeftInverse sg_op negate mon_unit &
RightInverse sg_op negate mon_unit} b': IsMonoid w b: {_ : LeftInverse sg_op negate mon_unit &
RightInverse sg_op negate mon_unit}