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]
LocalOpen Scope mc_mult_scope.Generalizable VariablesG H A B C f g.Sectiongroup_props.Context `{IsGroup G}.(** Group inverses are involutive *)
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G
Involutive inv
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G
Involutive inv
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x: G
(x^)^ = x
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x: G
(x^)^ = 1 * x
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x: G
1 * x = x
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x: G
(x^)^ = 1 * x
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x: G
(x^)^ = (x^)^ * x^ * x
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x: G
(x^)^ * x^ * x = 1 * x
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x: G
(x^)^ = (x^)^ * x^ * x
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x: G
(x^)^ = (x^)^ * (x^ * x)
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x: G
(x^)^ * (x^ * x) = (x^)^ * x^ * x
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x: G
(x^)^ = (x^)^ * (x^ * x)
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x: G
(x^)^ = (x^)^ * 1
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x: G
(x^)^ * 1 = (x^)^ * (x^ * x)
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x: G
(x^)^ = (x^)^ * 1
applysymmetry, right_identity.Qed.
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G
IsInjective inv
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G
IsInjective inv
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x, y: G E: x^ = y^
x = y
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x, y: G E: x^ = y^
(x^)^ = (y^)^
apply ap, E.Qed.
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G
1^ = 1
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G
1^ = 1
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G
(funx : G => 1^ = x) 1
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G
1^ = 1^ * 1
applysymmetry, right_identity.Qed.
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G
forallz : G, LeftCancellation sg_op z
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G
forallz : G, LeftCancellation sg_op z
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G z, x, y: G E: z * x = z * y
x = y
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G z, x, y: G E: z * x = z * y
x = 1 * y
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G z, x, y: G E: z * x = z * y
x = z^ * z * y
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G z, x, y: G E: z * x = z * y
x = z^ * (z * y)
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G z, x, y: G E: z * x = z * y
x = - z * (z * x)
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G z, x, y: G E: z * x = z * y
- z * (z * x) = x
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G z, x, y: G E: z * x = z * y
- z * z * x = x
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G z, x, y: G E: z * x = z * y
1 * x = x
apply left_identity.Defined.
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G
forallz : G, RightCancellation sg_op z
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G
forallz : G, RightCancellation sg_op z
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G z, x, y: G E: x * z = y * z
x = y
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G z, x, y: G E: x * z = y * z
x * 1 = y
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G z, x, y: G E: x * z = y * z
x * (z * z^) = y
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G z, x, y: G E: x * z = y * z
x * z * z^ = y
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G z, x, y: G E: x * z = y * z
y * z * z^ = y
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G z, x, y: G E: x * z = y * z
y = y
reflexivity.Qed.
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x, y: G
(x * y)^ = y^ * x^
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x, y: G
(x * y)^ = y^ * x^
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x, y: G
(x * y)^ = 1 * (- y * - x)
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x, y: G
(x * y)^ = (x * y)^ * (x * y) * (- y * - x)
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x, y: G
(x * y)^ = (x * y)^ * (x * y * (- y * - x))
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x, y: G
(x * y)^ = (x * y)^ * (x * (y * (- y * - x)))
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x, y: G
(x * y)^ = (x * y)^ * (x * (y * - y * - x))
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x, y: G
(x * y)^ = (x * y)^ * (x * (1 * - x))
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x, y: G
(x * y)^ = (x * y)^ * (x * - x)
G: Type Aop: SgOp G Aunit: MonUnit G Ainv: Inverse G H: IsGroup G x, y: G
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A H: IsGroup A B: Type Aop0: SgOp B Aunit0: MonUnit B Ainv0: Inverse B H0: IsGroup B f: A -> B IsMonoidPreserving0: IsMonoidPreserving f x: A
f x^ = (f x)^
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A H: IsGroup A B: Type Aop0: SgOp B Aunit0: MonUnit B Ainv0: Inverse B H0: IsGroup B f: A -> B IsMonoidPreserving0: IsMonoidPreserving f x: A
f x^ = (f x)^
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A H: IsGroup A B: Type Aop0: SgOp B Aunit0: MonUnit B Ainv0: Inverse B H0: IsGroup B f: A -> B IsMonoidPreserving0: IsMonoidPreserving f x: A
f x * f x^ = f x * (f x)^
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A H: IsGroup A B: Type Aop0: SgOp B Aunit0: MonUnit B Ainv0: Inverse B H0: IsGroup B f: A -> B IsMonoidPreserving0: IsMonoidPreserving f x: A
f (x * x^) = f x * (f x)^
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A H: IsGroup A B: Type Aop0: SgOp B Aunit0: MonUnit B Ainv0: Inverse B H0: IsGroup B f: A -> B IsMonoidPreserving0: IsMonoidPreserving f x: A
f 1 = 1
exact preserves_mon_unit.Qed.Endgroupmor_props.Sectionfrom_another_sg.Context
`{IsSemiGroup A} `{IsHSet B}
`{Bop : SgOp B} (f : B -> A) `{!IsInjective f}
(op_correct : forallxy, f (x * y) = f x * f y).
A: Type Aop: SgOp A H: IsSemiGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y
IsSemiGroup B
A: Type Aop: SgOp A H: IsSemiGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y
IsSemiGroup B
A: Type Aop: SgOp A H: IsSemiGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y
IsHSet B
A: Type Aop: SgOp A H: IsSemiGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y
Associative sg_op
A: Type Aop: SgOp A H: IsSemiGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y
IsHSet B
exact _.
A: Type Aop: SgOp A H: IsSemiGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y
Associative sg_op
A: Type Aop: SgOp A H: IsSemiGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y x, y, z: B
f (x * (y * z)) = f (x * y * z)
A: Type Aop: SgOp A H: IsSemiGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y x, y, z: B
f x * (f y * f z) = f x * f y * f z
apply associativity.Qed.Endfrom_another_sg.Sectionfrom_another_com.Context `{SgOp A} `{!Commutative (A:=A) sg_op} {B}
`{Bop : SgOp B} (f : B -> A) `{!IsInjective f}
(op_correct : forallxy, f (x * y) = f x * f y).
A: Type H: SgOp A Commutative0: Commutative sg_op B: Type Bop: SgOp B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y
Commutative sg_op
A: Type H: SgOp A Commutative0: Commutative sg_op B: Type Bop: SgOp B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y
Commutative sg_op
A: Type H: SgOp A Commutative0: Commutative sg_op B: Type Bop: SgOp B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y x, y: B
x * y = y * x
A: Type H: SgOp A Commutative0: Commutative sg_op B: Type Bop: SgOp B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y x, y: B
f (x * y) = f (y * x)
A: Type H: SgOp A Commutative0: Commutative sg_op B: Type Bop: SgOp B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y x, y: B
f x * f y = f y * f x
apply commutativity.Qed.Endfrom_another_com.Sectionfrom_another_com_sg.Context
`{IsCommutativeSemiGroup A} `{IsHSet B}
`{Bop : SgOp B} (f : B -> A) `{!IsInjective f}
(op_correct : forallxy, f (x * y) = f x * f y).
A: Type Aop: SgOp A H: IsCommutativeSemiGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y
IsCommutativeSemiGroup B
A: Type Aop: SgOp A H: IsCommutativeSemiGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y
IsCommutativeSemiGroup B
A: Type Aop: SgOp A H: IsCommutativeSemiGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y
IsSemiGroup B
A: Type Aop: SgOp A H: IsCommutativeSemiGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y
Commutative sg_op
A: Type Aop: SgOp A H: IsCommutativeSemiGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y
IsSemiGroup B
apply (projected_sg f);assumption.
A: Type Aop: SgOp A H: IsCommutativeSemiGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y
Commutative sg_op
apply (projected_comm f);assumption.Qed.Endfrom_another_com_sg.Sectionfrom_another_monoid.Context `{IsMonoid A} `{IsHSet B}
`{Bop : SgOp B} `{Bunit : MonUnit B} (f : B -> A) `{!IsInjective f}
(op_correct : forallxy, f (x * y) = f x * f y) (unit_correct : f mon_unit = mon_unit).
A: Type Aop: SgOp A Aunit: MonUnit A H: IsMonoid A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1
IsMonoid B
A: Type Aop: SgOp A Aunit: MonUnit A H: IsMonoid A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1
IsMonoid B
A: Type Aop: SgOp A Aunit: MonUnit A H: IsMonoid A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1
IsSemiGroup B
A: Type Aop: SgOp A Aunit: MonUnit A H: IsMonoid A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1
LeftIdentity sg_op 1
A: Type Aop: SgOp A Aunit: MonUnit A H: IsMonoid A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1
RightIdentity sg_op 1
A: Type Aop: SgOp A Aunit: MonUnit A H: IsMonoid A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1
IsSemiGroup B
A: Type Aop: SgOp A Aunit: MonUnit A H: IsMonoid A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1
forallxy : B, f (x * y) = f x * f y
assumption.
A: Type Aop: SgOp A Aunit: MonUnit A H: IsMonoid A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1
LeftIdentity sg_op 1
A: Type Aop: SgOp A Aunit: MonUnit A H: IsMonoid A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 y: B
f (1 * y) = f y
A: Type Aop: SgOp A Aunit: MonUnit A H: IsMonoid A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 y: B
f y = f y
reflexivity.
A: Type Aop: SgOp A Aunit: MonUnit A H: IsMonoid A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1
RightIdentity sg_op 1
A: Type Aop: SgOp A Aunit: MonUnit A H: IsMonoid A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 x: B
f (x * 1) = f x
A: Type Aop: SgOp A Aunit: MonUnit A H: IsMonoid A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 x: B
f x = f x
reflexivity.Qed.Endfrom_another_monoid.Sectionfrom_another_com_monoid.Context
`{IsCommutativeMonoid A} `{IsHSet B}
`{Bop : SgOp B} `{Bunit : MonUnit B} (f : B -> A) `{!IsInjective f}
(op_correct : forallxy, f (x * y) = f x * f y)
(unit_correct : f mon_unit = mon_unit).
A: Type Aop: SgOp A Aunit: MonUnit A H: IsCommutativeMonoid A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1
IsCommutativeMonoid B
A: Type Aop: SgOp A Aunit: MonUnit A H: IsCommutativeMonoid A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1
IsCommutativeMonoid B
A: Type Aop: SgOp A Aunit: MonUnit A H: IsCommutativeMonoid A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1
IsMonoid B
A: Type Aop: SgOp A Aunit: MonUnit A H: IsCommutativeMonoid A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1
Commutative sg_op
A: Type Aop: SgOp A Aunit: MonUnit A H: IsCommutativeMonoid A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1
IsMonoid B
apply (projected_monoid f);assumption.
A: Type Aop: SgOp A Aunit: MonUnit A H: IsCommutativeMonoid A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1
Commutative sg_op
apply (projected_comm f);assumption.Qed.Endfrom_another_com_monoid.Sectionfrom_another_group.Context
`{isg : IsGroup A} `{IsHSet B}
`{Bop : SgOp B} `{Bunit : MonUnit B} `{Binv : Inverse B}
(f : B -> A) `{!IsInjective f}
(op_correct : forallxy, f (x * y) = f x * f y)
(unit_correct : f mon_unit = mon_unit)
(inverse_correct : forallx, f x^ = (f x)^).
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A isg: IsGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B Binv: Inverse B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 inverse_correct: forallx : B, f x^ = (f x)^
IsGroup B
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A isg: IsGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B Binv: Inverse B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 inverse_correct: forallx : B, f x^ = (f x)^
IsGroup B
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A isg: IsGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B Binv: Inverse B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 inverse_correct: forallx : B, f x^ = (f x)^
IsMonoid B
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A isg: IsGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B Binv: Inverse B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 inverse_correct: forallx : B, f x^ = (f x)^
LeftInverse sg_op inv 1
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A isg: IsGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B Binv: Inverse B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 inverse_correct: forallx : B, f x^ = (f x)^
RightInverse sg_op inv 1
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A isg: IsGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B Binv: Inverse B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 inverse_correct: forallx : B, f x^ = (f x)^
IsMonoid B
apply (projected_monoid f);assumption.
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A isg: IsGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B Binv: Inverse B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 inverse_correct: forallx : B, f x^ = (f x)^
LeftInverse sg_op inv 1
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A isg: IsGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B Binv: Inverse B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 inverse_correct: forallx : B, f x^ = (f x)^ x: B
f (x^ * x) = f 1
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A isg: IsGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B Binv: Inverse B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 inverse_correct: forallx : B, f x^ = (f x)^ x: B
1 = 1
applyreflexivity.
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A isg: IsGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B Binv: Inverse B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 inverse_correct: forallx : B, f x^ = (f x)^
RightInverse sg_op inv 1
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A isg: IsGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B Binv: Inverse B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 inverse_correct: forallx : B, f x^ = (f x)^ x: B
f (x * x^) = f 1
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A isg: IsGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B Binv: Inverse B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 inverse_correct: forallx : B, f x^ = (f x)^ x: B
1 = 1
reflexivity.Qed.Endfrom_another_group.Sectionfrom_another_ab_group.LocalOpen Scope mc_add_scope.Context `{IsAbGroup A} `{IsHSet B}
`{Bop : SgOp B} `{Bunit : MonUnit B} `{Bnegate : Negate B}
(f : B -> A) `{!IsInjective f}
(op_correct : forallxy, f (x + y) = f x + f y)
(unit_correct : f 0 = 0)
(negate_correct : forallx, f (-x) = -f x).
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A H: IsAbGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B Bnegate: Negate B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 negate_correct: forallx : B, f x^ = (f x)^
IsAbGroup B
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A H: IsAbGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B Bnegate: Negate B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 negate_correct: forallx : B, f x^ = (f x)^
IsAbGroup B
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A H: IsAbGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B Bnegate: Negate B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 negate_correct: forallx : B, f x^ = (f x)^
IsGroup B
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A H: IsAbGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B Bnegate: Negate B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 negate_correct: forallx : B, f x^ = (f x)^
Commutative Bop
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A H: IsAbGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B Bnegate: Negate B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 negate_correct: forallx : B, f x^ = (f x)^
IsGroup B
apply (projected_group f (isg:=abgroup_group _)); assumption.
A: Type Aop: SgOp A Aunit: MonUnit A Ainv: Inverse A H: IsAbGroup A B: Type IsHSet0: IsHSet B Bop: SgOp B Bunit: MonUnit B Bnegate: Negate B f: B -> A IsInjective0: IsInjective f op_correct: forallxy : B, f (x * y) = f x * f y unit_correct: f 1 = 1 negate_correct: forallx : B, f x^ = (f x)^