Built with
doc-gen4, running Lean4.
Bubbles (
) indicate interactive fragments: hover for details, tap to reveal contents.
Use
Ctrl+โCtrl+โto navigate,
Ctrl+๐ฑ๏ธto focus.
On Mac, use
Cmdinstead of
Ctrl.
/-
Copyright (c) 2022 Alex Kontorovich. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Alex Kontorovich
! This file was ported from Lean 3 source module group_theory.subgroup.mul_opposite
! leanprover-community/mathlib commit f93c11933efbc3c2f0299e47b8ff83e9b539cbf6
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.GroupTheory.Subgroup.Actions
/-!
# Mul-opposite subgroups
## Tags
subgroup, subgroups
-/
variable {G : Type _} [Group G]
namespace Subgroup
/-- A subgroup `H` of `G` determines a subgroup `H.opposite` of the opposite group `Gแตแตแต`. -/
@[to_additive "An additive subgroup `H` of `G` determines an additive subgroup `H.opposite` of the
opposite additive group `Gแตแตแต`."]
def opposite : Subgroup G โ Subgroup Gแตแตแต
where
toFun H :=
{ carrier := MulOpposite.unop โปยน' (H : Set G)
one_mem' := H.one_mem
mul_mem' := fun ha hb => H.mul_mem hb ha
inv_mem' := H.inv_mem }
invFun H :=
{ carrier := MulOpposite.op โปยน' (H : Set Gแตแตแต)
one_mem' := H.one_mem
mul_mem' := fun ha hb => H.mul_mem hb ha
inv_mem' := H.inv_mem }
left_inv _ := SetLike.coe_injective rfl: โ {ฮฑ : Sort ?u.1664} {a : ฮฑ}, a = a
rfl
right_inv _ := SetLike.coe_injective rfl: โ {ฮฑ : Sort ?u.1710} {a : ฮฑ}, a = a
rfl
#align subgroup.opposite Subgroup.opposite
#align add_subgroup.opposite AddSubgroup.opposite
/-- Bijection between a subgroup `H` and its opposite. -/
@[to_additive (attr := simps!) "Bijection between an additive subgroup `H` and its opposite."]
def oppositeEquiv: (H : Subgroup G) โ { x // x โ H } โ { x // x โ โopposite H }
oppositeEquiv (H : Subgroup: (G : Type ?u.2128) โ [inst : Group G] โ Type ?u.2128
Subgroup G) : H โ opposite H :=
MulOpposite.opEquiv.subtypeEquiv: {ฮฑ : Sort ?u.2601} โ
{ฮฒ : Sort ?u.2600} โ
{p : ฮฑ โ Prop} โ {q : ฮฒ โ Prop} โ (e : ฮฑ โ ฮฒ) โ (โ (a : ฮฑ), p a โ q (โe a)) โ { a // p a } โ { b // q b }
subtypeEquiv fun _ => Iff.rfl
#align subgroup.opposite_equiv Subgroup.oppositeEquiv: {G : Type u_1} โ [inst : Group G] โ (H : Subgroup G) โ { x // x โ H } โ { x // x โ โopposite H }
Subgroup.oppositeEquiv
#align add_subgroup.opposite_equiv AddSubgroup.oppositeEquiv
#align subgroup.opposite_equiv_symm_apply_coe Subgroup.oppositeEquiv_symm_apply_coe
@[to_additive]
instance (H : Subgroup: (G : Type ?u.3019) โ [inst : Group G] โ Type ?u.3019
Subgroup G) [Encodable: Type ?u.3027 โ Type ?u.3027
Encodable H] : Encodable: Type ?u.3174 โ Type ?u.3174
Encodable (opposite H) :=
Encodable.ofEquiv H H.oppositeEquiv.symm: {ฮฑ : Sort ?u.3598} โ {ฮฒ : Sort ?u.3597} โ ฮฑ โ ฮฒ โ ฮฒ โ ฮฑ
symm
@[to_additive]
instance (H : Subgroup: (G : Type ?u.3777) โ [inst : Group G] โ Type ?u.3777
Subgroup G) [Countable H] : Countable (opposite H) :=
Countable.of_equiv H H.oppositeEquiv
@[to_additive]
theorem smul_opposite_mul: โ {H : Subgroup G} (x g : G) (h : { x // x โ โopposite H }), h โข (g * x) = g * h โข x
smul_opposite_mul {H : Subgroup: (G : Type ?u.4517) โ [inst : Group G] โ Type ?u.4517
Subgroup G} (x g : G) (h: { x // x โ โopposite H }
h : opposite H) :
h: { x // x โ โopposite H }
h โข (g * x) = g * h: { x // x โ โopposite H }
h โข x :=
mul_assoc: โ {G : Type ?u.6585} [inst : Semigroup G] (a b c : G), a * b * c = a * (b * c)
mul_assoc _ _ _
#align subgroup.smul_opposite_mul Subgroup.smul_opposite_mul: โ {G : Type u_1} [inst : Group G] {H : Subgroup G} (x g : G) (h : { x // x โ โopposite H }), h โข (g * x) = g * h โข x
Subgroup.smul_opposite_mul
#align add_subgroup.vadd_opposite_add AddSubgroup.vadd_opposite_add
end Subgroup