File: Mathlib/GroupTheory/Complement.lean

full_name: AddSubgroup.IsComplement
code: /-- `S` and `T` are complements if `(*) : S × T → G` is a bijection.
  This notion generalizes left transversals, right transversals, and complementary subgroups. -/
@[to_additive "`S` and `T` are complements if `(+) : S × T → G` is a bijection"]
def IsComplement : Prop 
goal: Prop

full_name: Subgroup.IsComplement
code: /-- `S` and `T` are complements if `(*) : S × T → G` is a bijection.
  This notion generalizes left transversals, right transversals, and complementary subgroups. -/
@[to_additive "`S` and `T` are complements if `(+) : S × T → G` is a bijection"]
def IsComplement : Prop 
goal: Prop

full_name: AddSubgroup.IsComplement'
code: /-- `H` and `K` are complements if `(*) : H × K → G` is a bijection -/
@[to_additive "`H` and `K` are complements if `(+) : H × K → G` is a bijection"]
abbrev IsComplement' 
goal: Prop

full_name: Subgroup.IsComplement'
code: /-- `H` and `K` are complements if `(*) : H × K → G` is a bijection -/
@[to_additive "`H` and `K` are complements if `(+) : H × K → G` is a bijection"]
abbrev IsComplement' 
goal: Prop

full_name: Subgroup.leftTransversals
code: /-- The set of left-complements of `T : Set G` -/
@[to_additive "The set of left-complements of `T : Set G`"]
def leftTransversals : Set (Set G) 
goal: Set (Set G)

full_name: AddSubgroup.leftTransversals
code: /-- The set of left-complements of `T : Set G` -/
@[to_additive "The set of left-complements of `T : Set G`"]
def leftTransversals : Set (Set G) 
goal: Set (Set G)

full_name: AddSubgroup.rightTransversals
code: /-- The set of right-complements of `S : Set G` -/
@[to_additive "The set of right-complements of `S : Set G`"]
def rightTransversals : Set (Set G) 
goal: Set (Set G)

full_name: Subgroup.rightTransversals
code: /-- The set of right-complements of `S : Set G` -/
@[to_additive "The set of right-complements of `S : Set G`"]
def rightTransversals : Set (Set G) 
goal: Set (Set G)

full_name: AddSubgroup.isComplement'_def
code: @[to_additive]
theorem isComplement'_def : IsComplement' H K ↔ IsComplement (H : Set G) (K : Set G) 
goal: H.IsComplement' K ↔ AddSubgroup.IsComplement ↑H ↑K

full_name: Subgroup.isComplement'_def
code: @[to_additive]
theorem isComplement'_def : IsComplement' H K ↔ IsComplement (H : Set G) (K : Set G) 
goal: H.IsComplement' K ↔ Subgroup.IsComplement ↑H ↑K

full_name: Subgroup.isComplement_iff_existsUnique
code: @[to_additive]
theorem isComplement_iff_existsUnique :
    IsComplement S T ↔ ∀ g : G, ∃! x : S × T, x.1.1 * x.2.1 = g 
goal: Subgroup.IsComplement S T ↔ ∀ (g : G), ∃! x, ↑x.1 * ↑x.2 = g

full_name: AddSubgroup.isComplement_iff_existsUnique
code: @[to_additive]
theorem isComplement_iff_existsUnique :
    IsComplement S T ↔ ∀ g : G, ∃! x : S × T, x.1.1 * x.2.1 = g 
goal: AddSubgroup.IsComplement S T ↔ ∀ (g : G), ∃! x, ↑x.1 + ↑x.2 = g

full_name: Subgroup.IsComplement.existsUnique
code: @[to_additive]
theorem IsComplement.existsUnique (h : IsComplement S T) (g : G) :
    ∃! x : S × T, x.1.1 * x.2.1 = g 
goal: ∃! x, ↑x.1 * ↑x.2 = g

full_name: AddSubgroup.IsComplement.existsUnique
code: @[to_additive]
theorem IsComplement.existsUnique (h : IsComplement S T) (g : G) :
    ∃! x : S × T, x.1.1 * x.2.1 = g 
goal: ∃! x, ↑x.1 + ↑x.2 = g

full_name: AddSubgroup.IsComplement'.symm
code: @[to_additive]
theorem IsComplement'.symm (h : IsComplement' H K) : IsComplement' K H 
goal: K.IsComplement' H

full_name: Subgroup.IsComplement'.symm
code: @[to_additive]
theorem IsComplement'.symm (h : IsComplement' H K) : IsComplement' K H 
goal: K.IsComplement' H

full_name: Subgroup.isComplement'_comm
code: @[to_additive]
theorem isComplement'_comm : IsComplement' H K ↔ IsComplement' K H 
goal: H.IsComplement' K ↔ K.IsComplement' H

full_name: AddSubgroup.isComplement'_comm
code: @[to_additive]
theorem isComplement'_comm : IsComplement' H K ↔ IsComplement' K H 
goal: H.IsComplement' K ↔ K.IsComplement' H

full_name: AddSubgroup.isComplement_univ_singleton
code: @[to_additive]
theorem isComplement_univ_singleton {g : G} : IsComplement (univ : Set G) {g} 
goal: AddSubgroup.IsComplement Set.univ {g}

full_name: Subgroup.isComplement_univ_singleton
code: @[to_additive]
theorem isComplement_univ_singleton {g : G} : IsComplement (univ : Set G) {g} 
goal: Subgroup.IsComplement Set.univ {g}

full_name: Subgroup.isComplement_singleton_univ
code: @[to_additive]
theorem isComplement_singleton_univ {g : G} : IsComplement ({g} : Set G) univ 
goal: Subgroup.IsComplement {g} Set.univ

full_name: AddSubgroup.isComplement_singleton_univ
code: @[to_additive]
theorem isComplement_singleton_univ {g : G} : IsComplement ({g} : Set G) univ 
goal: AddSubgroup.IsComplement {g} Set.univ

full_name: Subgroup.isComplement_singleton_left
code: @[to_additive]
theorem isComplement_singleton_left {g : G} : IsComplement {g} S ↔ S = univ 
goal: Subgroup.IsComplement {g} S ↔ S = Set.univ

full_name: AddSubgroup.isComplement_singleton_left
code: @[to_additive]
theorem isComplement_singleton_left {g : G} : IsComplement {g} S ↔ S = univ 
goal: AddSubgroup.IsComplement {g} S ↔ S = Set.univ

full_name: AddSubgroup.isComplement_singleton_right
code: @[to_additive]
theorem isComplement_singleton_right {g : G} : IsComplement S {g} ↔ S = univ 
goal: AddSubgroup.IsComplement S {g} ↔ S = Set.univ

full_name: Subgroup.isComplement_singleton_right
code: @[to_additive]
theorem isComplement_singleton_right {g : G} : IsComplement S {g} ↔ S = univ 
goal: Subgroup.IsComplement S {g} ↔ S = Set.univ

full_name: AddSubgroup.isComplement_univ_left
code: @[to_additive]
theorem isComplement_univ_left : IsComplement univ S ↔ ∃ g : G, S = {g} 
goal: AddSubgroup.IsComplement Set.univ S ↔ ∃ g, S = {g}

full_name: Subgroup.isComplement_univ_left
code: @[to_additive]
theorem isComplement_univ_left : IsComplement univ S ↔ ∃ g : G, S = {g} 
goal: Subgroup.IsComplement Set.univ S ↔ ∃ g, S = {g}

full_name: AddSubgroup.isComplement_univ_right
code: @[to_additive]
theorem isComplement_univ_right : IsComplement S univ ↔ ∃ g : G, S = {g} 
goal: AddSubgroup.IsComplement S Set.univ ↔ ∃ g, S = {g}

full_name: Subgroup.isComplement_univ_right
code: @[to_additive]
theorem isComplement_univ_right : IsComplement S univ ↔ ∃ g : G, S = {g} 
goal: Subgroup.IsComplement S Set.univ ↔ ∃ g, S = {g}

full_name: Subgroup.IsComplement.mul_eq
code: @[to_additive]
lemma IsComplement.mul_eq (h : IsComplement S T) : S * T = univ 
goal: S * T = Set.univ

full_name: AddSubgroup.IsComplement.add_eq
code: @[to_additive]
lemma IsComplement.mul_eq (h : IsComplement S T) : S * T = univ 
goal: S + T = Set.univ

full_name: Subgroup.IsComplement.card_mul_card
code: @[to_additive AddSubgroup.IsComplement.card_mul_card]
lemma IsComplement.card_mul_card (h : IsComplement S T) : Nat.card S * Nat.card T = Nat.card G 
goal: Nat.card ↑S * Nat.card ↑T = Nat.card G

full_name: AddSubgroup.IsComplement.card_mul_card
code: @[to_additive AddSubgroup.IsComplement.card_mul_card]
lemma IsComplement.card_mul_card (h : IsComplement S T) : Nat.card S * Nat.card T = Nat.card G 
goal: Nat.card ↑S * Nat.card ↑T = Nat.card G

full_name: AddSubgroup.isComplement'_top_bot
code: @[to_additive]
theorem isComplement'_top_bot : IsComplement' (⊤ : Subgroup G) ⊥ 
goal: ⊤.IsComplement' ⊥

full_name: Subgroup.isComplement'_top_bot
code: @[to_additive]
theorem isComplement'_top_bot : IsComplement' (⊤ : Subgroup G) ⊥ 
goal: ⊤.IsComplement' ⊥

full_name: Subgroup.isComplement'_bot_top
code: @[to_additive]
theorem isComplement'_bot_top : IsComplement' (⊥ : Subgroup G) ⊤ 
goal: ⊥.IsComplement' ⊤

full_name: AddSubgroup.isComplement'_bot_top
code: @[to_additive]
theorem isComplement'_bot_top : IsComplement' (⊥ : Subgroup G) ⊤ 
goal: ⊥.IsComplement' ⊤

full_name: Subgroup.isComplement'_bot_left
code: @[to_additive (attr := simp)]
theorem isComplement'_bot_left : IsComplement' ⊥ H ↔ H = ⊤ 
goal: ⊥.IsComplement' H ↔ H = ⊤

full_name: AddSubgroup.isComplement'_bot_left
code: @[to_additive (attr := simp)]
theorem isComplement'_bot_left : IsComplement' ⊥ H ↔ H = ⊤ 
goal: ⊥.IsComplement' H ↔ H = ⊤

full_name: AddSubgroup.isComplement'_bot_right
code: @[to_additive (attr := simp)]
theorem isComplement'_bot_right : IsComplement' H ⊥ ↔ H = ⊤ 
goal: H.IsComplement' ⊥ ↔ H = ⊤

full_name: Subgroup.isComplement'_bot_right
code: @[to_additive (attr := simp)]
theorem isComplement'_bot_right : IsComplement' H ⊥ ↔ H = ⊤ 
goal: H.IsComplement' ⊥ ↔ H = ⊤

full_name: Subgroup.isComplement'_top_left
code: @[to_additive (attr := simp)]
theorem isComplement'_top_left : IsComplement' ⊤ H ↔ H = ⊥ 
goal: ⊤.IsComplement' H ↔ H = ⊥

full_name: AddSubgroup.isComplement'_top_left
code: @[to_additive (attr := simp)]
theorem isComplement'_top_left : IsComplement' ⊤ H ↔ H = ⊥ 
goal: ⊤.IsComplement' H ↔ H = ⊥

full_name: AddSubgroup.isComplement'_top_right
code: @[to_additive (attr := simp)]
theorem isComplement'_top_right : IsComplement' H ⊤ ↔ H = ⊥ 
goal: H.IsComplement' ⊤ ↔ H = ⊥

full_name: Subgroup.isComplement'_top_right
code: @[to_additive (attr := simp)]
theorem isComplement'_top_right : IsComplement' H ⊤ ↔ H = ⊥ 
goal: H.IsComplement' ⊤ ↔ H = ⊥

full_name: Subgroup.mem_leftTransversals_iff_existsUnique_inv_mul_mem
code: @[to_additive]
theorem mem_leftTransversals_iff_existsUnique_inv_mul_mem :
    S ∈ leftTransversals T ↔ ∀ g : G, ∃! s : S, (s : G)⁻¹ * g ∈ T 
goal: S ∈ Subgroup.leftTransversals T ↔ ∀ (g : G), ∃! s, (↑s)⁻¹ * g ∈ T

full_name: AddSubgroup.mem_leftTransversals_iff_existsUnique_neg_add_mem
code: @[to_additive]
theorem mem_leftTransversals_iff_existsUnique_inv_mul_mem :
    S ∈ leftTransversals T ↔ ∀ g : G, ∃! s : S, (s : G)⁻¹ * g ∈ T 
goal: S ∈ AddSubgroup.leftTransversals T ↔ ∀ (g : G), ∃! s, -↑s + g ∈ T

full_name: AddSubgroup.mem_rightTransversals_iff_existsUnique_add_neg_mem
code: @[to_additive]
theorem mem_rightTransversals_iff_existsUnique_mul_inv_mem :
    S ∈ rightTransversals T ↔ ∀ g : G, ∃! s : S, g * (s : G)⁻¹ ∈ T 
goal: S ∈ AddSubgroup.rightTransversals T ↔ ∀ (g : G), ∃! s, g + -↑s ∈ T

full_name: Subgroup.mem_rightTransversals_iff_existsUnique_mul_inv_mem
code: @[to_additive]
theorem mem_rightTransversals_iff_existsUnique_mul_inv_mem :
    S ∈ rightTransversals T ↔ ∀ g : G, ∃! s : S, g * (s : G)⁻¹ ∈ T 
goal: S ∈ Subgroup.rightTransversals T ↔ ∀ (g : G), ∃! s, g * (↑s)⁻¹ ∈ T

full_name: Subgroup.mem_leftTransversals_iff_existsUnique_quotient_mk''_eq
code: @[to_additive]
theorem mem_leftTransversals_iff_existsUnique_quotient_mk''_eq :
    S ∈ leftTransversals (H : Set G) ↔
      ∀ q : Quotient (QuotientGroup.leftRel H), ∃! s : S, Quotient.mk'' s.1 = q 
goal: S ∈ Subgroup.leftTransversals ↑H ↔ ∀ (q : Quotient (QuotientGroup.leftRel H)), ∃! s, Quotient.mk'' ↑s = q

full_name: AddSubgroup.mem_leftTransversals_iff_existsUnique_quotient_mk''_eq
code: @[to_additive]
theorem mem_leftTransversals_iff_existsUnique_quotient_mk''_eq :
    S ∈ leftTransversals (H : Set G) ↔
      ∀ q : Quotient (QuotientGroup.leftRel H), ∃! s : S, Quotient.mk'' s.1 = q 
goal: S ∈ AddSubgroup.leftTransversals ↑H ↔ ∀ (q : Quotient (QuotientAddGroup.leftRel H)), ∃! s, Quotient.mk'' ↑s = q

full_name: Subgroup.mem_rightTransversals_iff_existsUnique_quotient_mk''_eq
code: @[to_additive]
theorem mem_rightTransversals_iff_existsUnique_quotient_mk''_eq :
    S ∈ rightTransversals (H : Set G) ↔
      ∀ q : Quotient (QuotientGroup.rightRel H), ∃! s : S, Quotient.mk'' s.1 = q 
goal: S ∈ Subgroup.rightTransversals ↑H ↔ ∀ (q : Quotient (QuotientGroup.rightRel H)), ∃! s, Quotient.mk'' ↑s = q

full_name: AddSubgroup.mem_rightTransversals_iff_existsUnique_quotient_mk''_eq
code: @[to_additive]
theorem mem_rightTransversals_iff_existsUnique_quotient_mk''_eq :
    S ∈ rightTransversals (H : Set G) ↔
      ∀ q : Quotient (QuotientGroup.rightRel H), ∃! s : S, Quotient.mk'' s.1 = q 
goal: S ∈ AddSubgroup.rightTransversals ↑H ↔ ∀ (q : Quotient (QuotientAddGroup.rightRel H)), ∃! s, Quotient.mk'' ↑s = q

full_name: Subgroup.mem_leftTransversals_iff_bijective
code: @[to_additive]
theorem mem_leftTransversals_iff_bijective :
    S ∈ leftTransversals (H : Set G) ↔
      Function.Bijective (S.restrict (Quotient.mk'' : G → Quotient (QuotientGroup.leftRel H))) 
goal: S ∈ Subgroup.leftTransversals ↑H ↔ Function.Bijective (S.restrict Quotient.mk'')

full_name: AddSubgroup.mem_leftTransversals_iff_bijective
code: @[to_additive]
theorem mem_leftTransversals_iff_bijective :
    S ∈ leftTransversals (H : Set G) ↔
      Function.Bijective (S.restrict (Quotient.mk'' : G → Quotient (QuotientGroup.leftRel H))) 
goal: S ∈ AddSubgroup.leftTransversals ↑H ↔ Function.Bijective (S.restrict Quotient.mk'')

full_name: AddSubgroup.mem_rightTransversals_iff_bijective
code: @[to_additive]
theorem mem_rightTransversals_iff_bijective :
    S ∈ rightTransversals (H : Set G) ↔
      Function.Bijective (S.restrict (Quotient.mk'' : G → Quotient (QuotientGroup.rightRel H))) 
goal: S ∈ AddSubgroup.rightTransversals ↑H ↔ Function.Bijective (S.restrict Quotient.mk'')

full_name: Subgroup.mem_rightTransversals_iff_bijective
code: @[to_additive]
theorem mem_rightTransversals_iff_bijective :
    S ∈ rightTransversals (H : Set G) ↔
      Function.Bijective (S.restrict (Quotient.mk'' : G → Quotient (QuotientGroup.rightRel H))) 
goal: S ∈ Subgroup.rightTransversals ↑H ↔ Function.Bijective (S.restrict Quotient.mk'')

full_name: Subgroup.card_left_transversal
code: @[to_additive]
theorem card_left_transversal (h : S ∈ leftTransversals (H : Set G)) : Nat.card S = H.index 
goal: Nat.card ↑S = H.index

full_name: AddSubgroup.card_left_transversal
code: @[to_additive]
theorem card_left_transversal (h : S ∈ leftTransversals (H : Set G)) : Nat.card S = H.index 
goal: Nat.card ↑S = H.index

full_name: AddSubgroup.card_right_transversal
code: @[to_additive]
theorem card_right_transversal (h : S ∈ rightTransversals (H : Set G)) : Nat.card S = H.index 
goal: Nat.card ↑S = H.index

full_name: Subgroup.card_right_transversal
code: @[to_additive]
theorem card_right_transversal (h : S ∈ rightTransversals (H : Set G)) : Nat.card S = H.index 
goal: Nat.card ↑S = H.index

full_name: AddSubgroup.range_mem_leftTransversals
code: @[to_additive]
theorem range_mem_leftTransversals {f : G ⧸ H → G} (hf : ∀ q, ↑(f q) = q) :
    Set.range f ∈ leftTransversals (H : Set G) 
goal: Set.range f ∈ AddSubgroup.leftTransversals ↑H

full_name: Subgroup.range_mem_leftTransversals
code: @[to_additive]
theorem range_mem_leftTransversals {f : G ⧸ H → G} (hf : ∀ q, ↑(f q) = q) :
    Set.range f ∈ leftTransversals (H : Set G) 
goal: Set.range f ∈ Subgroup.leftTransversals ↑H

full_name: Subgroup.range_mem_rightTransversals
code: @[to_additive]
theorem range_mem_rightTransversals {f : Quotient (QuotientGroup.rightRel H) → G}
    (hf : ∀ q, Quotient.mk'' (f q) = q) : Set.range f ∈ rightTransversals (H : Set G) 
goal: Set.range f ∈ Subgroup.rightTransversals ↑H

full_name: AddSubgroup.range_mem_rightTransversals
code: @[to_additive]
theorem range_mem_rightTransversals {f : Quotient (QuotientGroup.rightRel H) → G}
    (hf : ∀ q, Quotient.mk'' (f q) = q) : Set.range f ∈ rightTransversals (H : Set G) 
goal: Set.range f ∈ AddSubgroup.rightTransversals ↑H

full_name: Subgroup.exists_left_transversal
code: @[to_additive]
lemma exists_left_transversal (H : Subgroup G) (g : G) :
    ∃ S ∈ leftTransversals (H : Set G), g ∈ S 
goal: ∃ S ∈ Subgroup.leftTransversals ↑H, g ∈ S

full_name: AddSubgroup.exists_left_transversal
code: @[to_additive]
lemma exists_left_transversal (H : Subgroup G) (g : G) :
    ∃ S ∈ leftTransversals (H : Set G), g ∈ S 
goal: ∃ S ∈ AddSubgroup.leftTransversals ↑H, g ∈ S

full_name: AddSubgroup.exists_right_transversal
code: @[to_additive]
lemma exists_right_transversal (H : Subgroup G) (g : G) :
    ∃ S ∈ rightTransversals (H : Set G), g ∈ S 
goal: ∃ S ∈ AddSubgroup.rightTransversals ↑H, g ∈ S

full_name: Subgroup.exists_right_transversal
code: @[to_additive]
lemma exists_right_transversal (H : Subgroup G) (g : G) :
    ∃ S ∈ rightTransversals (H : Set G), g ∈ S 
goal: ∃ S ∈ Subgroup.rightTransversals ↑H, g ∈ S

full_name: AddSubgroup.exists_left_transversal_of_le
code: /-- Given two subgroups `H' ⊆ H`, there exists a left transversal to `H'` inside `H`. -/
@[to_additive "Given two subgroups `H' ⊆ H`, there exists a transversal to `H'` inside `H`"]
lemma exists_left_transversal_of_le {H' H : Subgroup G} (h : H' ≤ H) :
    ∃ S : Set G, S * H' = H ∧ Nat.card S * Nat.card H' = Nat.card H 
goal: ∃ S, S + ↑H' = ↑H ∧ Nat.card ↑S * Nat.card ↥H' = Nat.card ↥H

full_name: Subgroup.exists_left_transversal_of_le
code: /-- Given two subgroups `H' ⊆ H`, there exists a left transversal to `H'` inside `H`. -/
@[to_additive "Given two subgroups `H' ⊆ H`, there exists a transversal to `H'` inside `H`"]
lemma exists_left_transversal_of_le {H' H : Subgroup G} (h : H' ≤ H) :
    ∃ S : Set G, S * H' = H ∧ Nat.card S * Nat.card H' = Nat.card H 
goal: ∃ S, S * ↑H' = ↑H ∧ Nat.card ↑S * Nat.card ↥H' = Nat.card ↥H

full_name: Subgroup.exists_right_transversal_of_le
code: /-- Given two subgroups `H' ⊆ H`, there exists a right transversal to `H'` inside `H`. -/
@[to_additive "Given two subgroups `H' ⊆ H`, there exists a transversal to `H'` inside `H`"]
lemma exists_right_transversal_of_le {H' H : Subgroup G} (h : H' ≤ H) :
    ∃ S : Set G, H' * S = H ∧ Nat.card H' * Nat.card S = Nat.card H 
goal: ∃ S, ↑H' * S = ↑H ∧ Nat.card ↥H' * Nat.card ↑S = Nat.card ↥H

full_name: AddSubgroup.exists_right_transversal_of_le
code: /-- Given two subgroups `H' ⊆ H`, there exists a right transversal to `H'` inside `H`. -/
@[to_additive "Given two subgroups `H' ⊆ H`, there exists a transversal to `H'` inside `H`"]
lemma exists_right_transversal_of_le {H' H : Subgroup G} (h : H' ≤ H) :
    ∃ S : Set G, H' * S = H ∧ Nat.card H' * Nat.card S = Nat.card H 
goal: ∃ S, ↑H' + S = ↑H ∧ Nat.card ↥H' * Nat.card ↑S = Nat.card ↥H

full_name: Subgroup.IsComplement.equiv
code: /-- The equivalence `G ≃ S × T`, such that the inverse is  `(*) : S × T → G` -/
noncomputable def equiv {S T : Set G} (hST : IsComplement S T) : G ≃ S × T 
goal: G ≃ ↑S × ↑T

full_name: Subgroup.IsComplement.equiv_symm_apply
code: @[simp] theorem equiv_symm_apply (x : S × T) : (hST.equiv.symm x : G) = x.1.1 * x.2.1 
goal: hST.equiv.symm x = ↑x.1 * ↑x.2

full_name: Subgroup.IsComplement.equiv_fst_mul_equiv_snd
code: @[simp]
theorem equiv_fst_mul_equiv_snd (g : G) : ↑(hST.equiv g).fst * (hST.equiv g).snd = g 
goal: ↑(hST.equiv g).1 * ↑(hST.equiv g).2 = g

full_name: Subgroup.IsComplement.equiv_fst_eq_mul_inv
code: theorem equiv_fst_eq_mul_inv (g : G) : ↑(hST.equiv g).fst = g * ((hST.equiv g).snd : G)⁻¹ 
goal: ↑(hST.equiv g).1 = g * (↑(hST.equiv g).2)⁻¹

full_name: Subgroup.IsComplement.equiv_snd_eq_inv_mul
code: theorem equiv_snd_eq_inv_mul (g : G) : ↑(hST.equiv g).snd = ((hST.equiv g).fst : G)⁻¹ * g 
goal: ↑(hST.equiv g).2 = (↑(hST.equiv g).1)⁻¹ * g

full_name: Subgroup.IsComplement.equiv_fst_eq_iff_leftCosetEquivalence
code: theorem equiv_fst_eq_iff_leftCosetEquivalence {g₁ g₂ : G} :
    (hSK.equiv g₁).fst = (hSK.equiv g₂).fst ↔ LeftCosetEquivalence K g₁ g₂ 
goal: (hSK.equiv g₁).1 = (hSK.equiv g₂).1 ↔ LeftCosetEquivalence (↑K) g₁ g₂

full_name: Subgroup.IsComplement.equiv_snd_eq_iff_rightCosetEquivalence
code: theorem equiv_snd_eq_iff_rightCosetEquivalence {g₁ g₂ : G} :
    (hHT.equiv g₁).snd = (hHT.equiv g₂).snd ↔ RightCosetEquivalence H g₁ g₂ 
goal: (hHT.equiv g₁).2 = (hHT.equiv g₂).2 ↔ RightCosetEquivalence (↑H) g₁ g₂

full_name: Subgroup.IsComplement.leftCosetEquivalence_equiv_fst
code: theorem leftCosetEquivalence_equiv_fst (g : G) :
    LeftCosetEquivalence K g ((hSK.equiv g).fst : G) 
goal: LeftCosetEquivalence (↑K) g ↑(hSK.equiv g).1

full_name: Subgroup.IsComplement.rightCosetEquivalence_equiv_snd
code: theorem rightCosetEquivalence_equiv_snd (g : G) :
    RightCosetEquivalence H g ((hHT.equiv g).snd : G) 
goal: RightCosetEquivalence (↑H) g ↑(hHT.equiv g).2

full_name: Subgroup.IsComplement.equiv_fst_eq_self_of_mem_of_one_mem
code: theorem equiv_fst_eq_self_of_mem_of_one_mem {g : G} (h1 : 1 ∈ T) (hg : g ∈ S) :
    (hST.equiv g).fst = ⟨g, hg⟩ 
goal: (hST.equiv g).1 = ⟨g, hg⟩

full_name: Subgroup.IsComplement.equiv_snd_eq_self_of_mem_of_one_mem
code: theorem equiv_snd_eq_self_of_mem_of_one_mem {g : G} (h1 : 1 ∈ S) (hg : g ∈ T) :
    (hST.equiv g).snd = ⟨g, hg⟩ 
goal: (hST.equiv g).2 = ⟨g, hg⟩

full_name: Subgroup.IsComplement.equiv_snd_eq_one_of_mem_of_one_mem
code: theorem equiv_snd_eq_one_of_mem_of_one_mem {g : G} (h1 : 1 ∈ T) (hg : g ∈ S) :
    (hST.equiv g).snd = ⟨1, h1⟩ 
goal: (hST.equiv g).2 = ⟨1, h1⟩

full_name: Subgroup.IsComplement.equiv_fst_eq_one_of_mem_of_one_mem
code: theorem equiv_fst_eq_one_of_mem_of_one_mem {g : G} (h1 : 1 ∈ S) (hg : g ∈ T) :
    (hST.equiv g).fst = ⟨1, h1⟩ 
goal: (hST.equiv g).1 = ⟨1, h1⟩

full_name: Subgroup.IsComplement.equiv_mul_right
code: @[simp, nolint simpNF]
theorem equiv_mul_right (g : G) (k : K) :
    hSK.equiv (g * k) = ((hSK.equiv g).fst, (hSK.equiv g).snd * k) 
goal: hSK.equiv (g * ↑k) = ((hSK.equiv g).1, (hSK.equiv g).2 * k)

full_name: Subgroup.IsComplement.equiv_mul_right_of_mem
code: theorem equiv_mul_right_of_mem {g k : G} (h : k ∈ K) :
    hSK.equiv (g * k) = ((hSK.equiv g).fst, (hSK.equiv g).snd * ⟨k, h⟩) 
goal: hSK.equiv (g * k) = ((hSK.equiv g).1, (hSK.equiv g).2 * ⟨k, h⟩)

full_name: Subgroup.IsComplement.equiv_mul_left
code: @[simp, nolint simpNF]
theorem equiv_mul_left (h : H) (g : G) :
    hHT.equiv (h * g) = (h * (hHT.equiv g).fst, (hHT.equiv g).snd) 
goal: hHT.equiv (↑h * g) = (h * (hHT.equiv g).1, (hHT.equiv g).2)

full_name: Subgroup.IsComplement.equiv_mul_left_of_mem
code: theorem equiv_mul_left_of_mem {h g : G} (hh : h ∈ H) :
    hHT.equiv (h * g) = (⟨h, hh⟩ * (hHT.equiv g).fst, (hHT.equiv g).snd) 
goal: hHT.equiv (h * g) = (⟨h, hh⟩ * (hHT.equiv g).1, (hHT.equiv g).2)

full_name: Subgroup.IsComplement.equiv_one
code: theorem equiv_one (hs1 : 1 ∈ S) (ht1 : 1 ∈ T) :
    hST.equiv 1 = (⟨1, hs1⟩, ⟨1, ht1⟩) 
goal: hST.equiv 1 = (⟨1, hs1⟩, ⟨1, ht1⟩)

full_name: Subgroup.IsComplement.equiv_fst_eq_self_iff_mem
code: theorem equiv_fst_eq_self_iff_mem {g : G} (h1 : 1 ∈ T) :
    ((hST.equiv g).fst : G) = g ↔ g ∈ S 
goal: ↑(hST.equiv g).1 = g ↔ g ∈ S

full_name: Subgroup.IsComplement.equiv_snd_eq_self_iff_mem
code: theorem equiv_snd_eq_self_iff_mem {g : G} (h1 : 1 ∈ S) :
    ((hST.equiv g).snd : G) = g ↔ g ∈ T 
goal: ↑(hST.equiv g).2 = g ↔ g ∈ T

full_name: Subgroup.IsComplement.coe_equiv_fst_eq_one_iff_mem
code: theorem coe_equiv_fst_eq_one_iff_mem {g : G} (h1 : 1 ∈ S) :
    ((hST.equiv g).fst : G) = 1 ↔ g ∈ T 
goal: ↑(hST.equiv g).1 = 1 ↔ g ∈ T

full_name: Subgroup.IsComplement.coe_equiv_snd_eq_one_iff_mem
code: theorem coe_equiv_snd_eq_one_iff_mem {g : G} (h1 : 1 ∈ T) :
    ((hST.equiv g).snd : G) = 1 ↔ g ∈ S 
goal: ↑(hST.equiv g).2 = 1 ↔ g ∈ S

full_name: AddSubgroup.MemLeftTransversals.toEquiv
code: /-- A left transversal is in bijection with left cosets. -/
@[to_additive "A left transversal is in bijection with left cosets."]
noncomputable def toEquiv (hS : S ∈ Subgroup.leftTransversals (H : Set G)) : G ⧸ H ≃ S 
goal: G ⧸ H ≃ ↑S

full_name: Subgroup.MemLeftTransversals.toEquiv
code: /-- A left transversal is in bijection with left cosets. -/
@[to_additive "A left transversal is in bijection with left cosets."]
noncomputable def toEquiv (hS : S ∈ Subgroup.leftTransversals (H : Set G)) : G ⧸ H ≃ S 
goal: G ⧸ H ≃ ↑S

full_name: Subgroup.MemLeftTransversals.finite_iff
code: @[to_additive "A left transversal is finite iff the subgroup has finite index"]
theorem finite_iff
    (h : S ∈ Subgroup.leftTransversals (H : Set G)) :
    Finite S ↔ H.FiniteIndex 
goal: Finite ↑S ↔ H.FiniteIndex

full_name: AddSubgroup.MemLeftTransversals.finite_iff
code: @[to_additive "A left transversal is finite iff the subgroup has finite index"]
theorem finite_iff
    (h : S ∈ Subgroup.leftTransversals (H : Set G)) :
    Finite S ↔ H.FiniteIndex 
goal: Finite ↑S ↔ H.FiniteIndex

full_name: AddSubgroup.MemLeftTransversals.mk''_toEquiv
code: @[to_additive]
theorem mk''_toEquiv (hS : S ∈ Subgroup.leftTransversals (H : Set G)) (q : G ⧸ H) :
    Quotient.mk'' (toEquiv hS q : G) = q 
goal: Quotient.mk'' ↑((AddSubgroup.MemLeftTransversals.toEquiv hS) q) = q

full_name: Subgroup.MemLeftTransversals.mk''_toEquiv
code: @[to_additive]
theorem mk''_toEquiv (hS : S ∈ Subgroup.leftTransversals (H : Set G)) (q : G ⧸ H) :
    Quotient.mk'' (toEquiv hS q : G) = q 
goal: Quotient.mk'' ↑((Subgroup.MemLeftTransversals.toEquiv hS) q) = q

full_name: AddSubgroup.MemLeftTransversals.toEquiv_apply
code: @[to_additive]
theorem toEquiv_apply {f : G ⧸ H → G} (hf : ∀ q, (f q : G ⧸ H) = q) (q : G ⧸ H) :
    (toEquiv (range_mem_leftTransversals hf) q : G) = f q 
goal: ↑((AddSubgroup.MemLeftTransversals.toEquiv ⋯) q) = f q

full_name: Subgroup.MemLeftTransversals.toEquiv_apply
code: @[to_additive]
theorem toEquiv_apply {f : G ⧸ H → G} (hf : ∀ q, (f q : G ⧸ H) = q) (q : G ⧸ H) :
    (toEquiv (range_mem_leftTransversals hf) q : G) = f q 
goal: ↑((Subgroup.MemLeftTransversals.toEquiv ⋯) q) = f q

full_name: Subgroup.MemLeftTransversals.toFun
code: /-- A left transversal can be viewed as a function mapping each element of the group
  to the chosen representative from that left coset. -/
@[to_additive "A left transversal can be viewed as a function mapping each element of the group
  to the chosen representative from that left coset."]
noncomputable def toFun (hS : S ∈ Subgroup.leftTransversals (H : Set G)) : G → S 
goal: G → ↑S

full_name: AddSubgroup.MemLeftTransversals.toFun
code: /-- A left transversal can be viewed as a function mapping each element of the group
  to the chosen representative from that left coset. -/
@[to_additive "A left transversal can be viewed as a function mapping each element of the group
  to the chosen representative from that left coset."]
noncomputable def toFun (hS : S ∈ Subgroup.leftTransversals (H : Set G)) : G → S 
goal: G → ↑S

full_name: AddSubgroup.MemLeftTransversals.neg_toFun_add_mem
code: @[to_additive]
theorem inv_toFun_mul_mem (hS : S ∈ Subgroup.leftTransversals (H : Set G)) (g : G) :
    (toFun hS g : G)⁻¹ * g ∈ H 
goal: -↑(AddSubgroup.MemLeftTransversals.toFun hS g) + g ∈ H

full_name: Subgroup.MemLeftTransversals.inv_toFun_mul_mem
code: @[to_additive]
theorem inv_toFun_mul_mem (hS : S ∈ Subgroup.leftTransversals (H : Set G)) (g : G) :
    (toFun hS g : G)⁻¹ * g ∈ H 
goal: (↑(Subgroup.MemLeftTransversals.toFun hS g))⁻¹ * g ∈ H

full_name: Subgroup.MemLeftTransversals.inv_mul_toFun_mem
code: @[to_additive]
theorem inv_mul_toFun_mem (hS : S ∈ Subgroup.leftTransversals (H : Set G)) (g : G) :
    g⁻¹ * toFun hS g ∈ H 
goal: g⁻¹ * ↑(Subgroup.MemLeftTransversals.toFun hS g) ∈ H

full_name: AddSubgroup.MemLeftTransversals.neg_add_toFun_mem
code: @[to_additive]
theorem inv_mul_toFun_mem (hS : S ∈ Subgroup.leftTransversals (H : Set G)) (g : G) :
    g⁻¹ * toFun hS g ∈ H 
goal: -g + ↑(AddSubgroup.MemLeftTransversals.toFun hS g) ∈ H

full_name: Subgroup.MemRightTransversals.toEquiv
code: /-- A right transversal is in bijection with right cosets. -/
@[to_additive "A right transversal is in bijection with right cosets."]
noncomputable def toEquiv (hS : S ∈ Subgroup.rightTransversals (H : Set G)) :
    Quotient (QuotientGroup.rightRel H) ≃ S 
goal: Quotient (QuotientGroup.rightRel H) ≃ ↑S

full_name: AddSubgroup.MemRightTransversals.toEquiv
code: /-- A right transversal is in bijection with right cosets. -/
@[to_additive "A right transversal is in bijection with right cosets."]
noncomputable def toEquiv (hS : S ∈ Subgroup.rightTransversals (H : Set G)) :
    Quotient (QuotientGroup.rightRel H) ≃ S 
goal: Quotient (QuotientAddGroup.rightRel H) ≃ ↑S

full_name: Subgroup.MemRightTransversals.finite_iff
code: @[to_additive "A right transversal is finite iff the subgroup has finite index"]
theorem finite_iff
    (h : S ∈ Subgroup.rightTransversals (H : Set G)) :
    Finite S ↔ H.FiniteIndex 
goal: Finite ↑S ↔ H.FiniteIndex

full_name: AddSubgroup.MemRightTransversals.finite_iff
code: @[to_additive "A right transversal is finite iff the subgroup has finite index"]
theorem finite_iff
    (h : S ∈ Subgroup.rightTransversals (H : Set G)) :
    Finite S ↔ H.FiniteIndex 
goal: Finite ↑S ↔ H.FiniteIndex

full_name: AddSubgroup.MemRightTransversals.mk''_toEquiv
code: @[to_additive]
theorem mk''_toEquiv (hS : S ∈ Subgroup.rightTransversals (H : Set G))
    (q : Quotient (QuotientGroup.rightRel H)) : Quotient.mk'' (toEquiv hS q : G) = q 
goal: Quotient.mk'' ↑((AddSubgroup.MemRightTransversals.toEquiv hS) q) = q

full_name: Subgroup.MemRightTransversals.mk''_toEquiv
code: @[to_additive]
theorem mk''_toEquiv (hS : S ∈ Subgroup.rightTransversals (H : Set G))
    (q : Quotient (QuotientGroup.rightRel H)) : Quotient.mk'' (toEquiv hS q : G) = q 
goal: Quotient.mk'' ↑((Subgroup.MemRightTransversals.toEquiv hS) q) = q

full_name: AddSubgroup.MemRightTransversals.toEquiv_apply
code: @[to_additive]
theorem toEquiv_apply {f : Quotient (QuotientGroup.rightRel H) → G}
    (hf : ∀ q, Quotient.mk'' (f q) = q) (q : Quotient (QuotientGroup.rightRel H)) :
    (toEquiv (range_mem_rightTransversals hf) q : G) = f q 
goal: ↑((AddSubgroup.MemRightTransversals.toEquiv ⋯) q) = f q

full_name: Subgroup.MemRightTransversals.toEquiv_apply
code: @[to_additive]
theorem toEquiv_apply {f : Quotient (QuotientGroup.rightRel H) → G}
    (hf : ∀ q, Quotient.mk'' (f q) = q) (q : Quotient (QuotientGroup.rightRel H)) :
    (toEquiv (range_mem_rightTransversals hf) q : G) = f q 
goal: ↑((Subgroup.MemRightTransversals.toEquiv ⋯) q) = f q

full_name: Subgroup.MemRightTransversals.toFun
code: /-- A right transversal can be viewed as a function mapping each element of the group
  to the chosen representative from that right coset. -/
@[to_additive "A right transversal can be viewed as a function mapping each element of the group
  to the chosen representative from that right coset."]
noncomputable def toFun (hS : S ∈ Subgroup.rightTransversals (H : Set G)) : G → S 
goal: G → ↑S

full_name: AddSubgroup.MemRightTransversals.toFun
code: /-- A right transversal can be viewed as a function mapping each element of the group
  to the chosen representative from that right coset. -/
@[to_additive "A right transversal can be viewed as a function mapping each element of the group
  to the chosen representative from that right coset."]
noncomputable def toFun (hS : S ∈ Subgroup.rightTransversals (H : Set G)) : G → S 
goal: G → ↑S

full_name: AddSubgroup.MemRightTransversals.add_neg_toFun_mem
code: @[to_additive]
theorem mul_inv_toFun_mem (hS : S ∈ Subgroup.rightTransversals (H : Set G)) (g : G) :
    g * (toFun hS g : G)⁻¹ ∈ H 
goal: g + -↑(AddSubgroup.MemRightTransversals.toFun hS g) ∈ H

full_name: Subgroup.MemRightTransversals.mul_inv_toFun_mem
code: @[to_additive]
theorem mul_inv_toFun_mem (hS : S ∈ Subgroup.rightTransversals (H : Set G)) (g : G) :
    g * (toFun hS g : G)⁻¹ ∈ H 
goal: g * (↑(Subgroup.MemRightTransversals.toFun hS g))⁻¹ ∈ H

full_name: AddSubgroup.MemRightTransversals.toFun_add_neg_mem
code: @[to_additive]
theorem toFun_mul_inv_mem (hS : S ∈ Subgroup.rightTransversals (H : Set G)) (g : G) :
    (toFun hS g : G) * g⁻¹ ∈ H 
goal: ↑(AddSubgroup.MemRightTransversals.toFun hS g) + -g ∈ H

full_name: Subgroup.MemRightTransversals.toFun_mul_inv_mem
code: @[to_additive]
theorem toFun_mul_inv_mem (hS : S ∈ Subgroup.rightTransversals (H : Set G)) (g : G) :
    (toFun hS g : G) * g⁻¹ ∈ H 
goal: ↑(Subgroup.MemRightTransversals.toFun hS g) * g⁻¹ ∈ H

full_name: AddSubgroup.instAddActionElemSetLeftTransversalsCoe
code: @[to_additive]
noncomputable instance : MulAction F (leftTransversals (H : Set G)) 
goal: AddAction F ↑(AddSubgroup.leftTransversals ↑H)

full_name: Subgroup.instMulActionElemSetLeftTransversalsCoe
code: @[to_additive]
noncomputable instance : MulAction F (leftTransversals (H : Set G)) 
goal: MulAction F ↑(Subgroup.leftTransversals ↑H)

full_name: Subgroup.smul_toFun
code: @[to_additive]
theorem smul_toFun (f : F) (T : leftTransversals (H : Set G)) (g : G) :
    (f • (toFun T.2 g : G)) = toFun (f • T).2 (f • g) 
goal: f • ↑(Subgroup.MemLeftTransversals.toFun ⋯ g) = ↑(Subgroup.MemLeftTransversals.toFun ⋯ (f • g))

full_name: AddSubgroup.vadd_toFun
code: @[to_additive]
theorem smul_toFun (f : F) (T : leftTransversals (H : Set G)) (g : G) :
    (f • (toFun T.2 g : G)) = toFun (f • T).2 (f • g) 
goal: f +ᵥ ↑(AddSubgroup.MemLeftTransversals.toFun ⋯ g) = ↑(AddSubgroup.MemLeftTransversals.toFun ⋯ (f +ᵥ g))

full_name: AddSubgroup.vadd_toEquiv
code: @[to_additive]
theorem smul_toEquiv (f : F) (T : leftTransversals (H : Set G)) (q : G ⧸ H) :
    f • (toEquiv T.2 q : G) = toEquiv (f • T).2 (f • q) 
goal: f +ᵥ ↑((AddSubgroup.MemLeftTransversals.toEquiv ⋯) q) = ↑((AddSubgroup.MemLeftTransversals.toEquiv ⋯) (f +ᵥ q))

full_name: Subgroup.smul_toEquiv
code: @[to_additive]
theorem smul_toEquiv (f : F) (T : leftTransversals (H : Set G)) (q : G ⧸ H) :
    f • (toEquiv T.2 q : G) = toEquiv (f • T).2 (f • q) 
goal: f • ↑((Subgroup.MemLeftTransversals.toEquiv ⋯) q) = ↑((Subgroup.MemLeftTransversals.toEquiv ⋯) (f • q))

full_name: Subgroup.smul_apply_eq_smul_apply_inv_smul
code: @[to_additive]
theorem smul_apply_eq_smul_apply_inv_smul (f : F) (T : leftTransversals (H : Set G)) (q : G ⧸ H) :
    (toEquiv (f • T).2 q : G) = f • (toEquiv T.2 (f⁻¹ • q) : G) 
goal: ↑((Subgroup.MemLeftTransversals.toEquiv ⋯) q) = f • ↑((Subgroup.MemLeftTransversals.toEquiv ⋯) (f⁻¹ • q))

full_name: AddSubgroup.vadd_apply_eq_vadd_apply_neg_vadd
code: @[to_additive]
theorem smul_apply_eq_smul_apply_inv_smul (f : F) (T : leftTransversals (H : Set G)) (q : G ⧸ H) :
    (toEquiv (f • T).2 q : G) = f • (toEquiv T.2 (f⁻¹ • q) : G) 
goal: ↑((AddSubgroup.MemLeftTransversals.toEquiv ⋯) q) = f +ᵥ ↑((AddSubgroup.MemLeftTransversals.toEquiv ⋯) (-f +ᵥ q))

full_name: AddSubgroup.instInhabitedElemSetLeftTransversalsCoe
code: @[to_additive]
instance : Inhabited (leftTransversals (H : Set G)) 
goal: Inhabited ↑(AddSubgroup.leftTransversals ↑H)

full_name: Subgroup.instInhabitedElemSetLeftTransversalsCoe
code: @[to_additive]
instance : Inhabited (leftTransversals (H : Set G)) 
goal: Inhabited ↑(Subgroup.leftTransversals ↑H)

full_name: Subgroup.instInhabitedElemSetRightTransversalsCoe
code: @[to_additive]
instance : Inhabited (rightTransversals (H : Set G)) 
goal: Inhabited ↑(Subgroup.rightTransversals ↑H)

full_name: AddSubgroup.instInhabitedElemSetRightTransversalsCoe
code: @[to_additive]
instance : Inhabited (rightTransversals (H : Set G)) 
goal: Inhabited ↑(AddSubgroup.rightTransversals ↑H)

full_name: Subgroup.IsComplement'.isCompl
code: theorem IsComplement'.isCompl (h : IsComplement' H K) : IsCompl H K 
goal: IsCompl H K

full_name: Subgroup.IsComplement'.sup_eq_top
code: theorem IsComplement'.sup_eq_top (h : IsComplement' H K) : H ⊔ K = ⊤ 
goal: H ⊔ K = ⊤

full_name: Subgroup.IsComplement'.disjoint
code: theorem IsComplement'.disjoint (h : IsComplement' H K) : Disjoint H K 
goal: Disjoint H K

full_name: Subgroup.IsComplement'.index_eq_card
code: theorem IsComplement'.index_eq_card (h : IsComplement' H K) : K.index = Nat.card H 
goal: K.index = Nat.card ↥H

full_name: Subgroup.IsComplement.card_mul
code: theorem IsComplement.card_mul (h : IsComplement S T) :
    Nat.card S * Nat.card T = Nat.card G 
goal: Nat.card ↑S * Nat.card ↑T = Nat.card G

full_name: Subgroup.IsComplement'.card_mul
code: theorem IsComplement'.card_mul (h : IsComplement' H K) :
    Nat.card H * Nat.card K = Nat.card G 
goal: Nat.card ↥H * Nat.card ↥K = Nat.card G

full_name: Subgroup.isComplement'_of_disjoint_and_mul_eq_univ
code: theorem isComplement'_of_disjoint_and_mul_eq_univ (h1 : Disjoint H K)
    (h2 : ↑H * ↑K = (Set.univ : Set G)) : IsComplement' H K 
goal: H.IsComplement' K

full_name: Subgroup.isComplement'_of_card_mul_and_disjoint
code: theorem isComplement'_of_card_mul_and_disjoint [Finite G]
    (h1 : Nat.card H * Nat.card K = Nat.card G) (h2 : Disjoint H K) :
    IsComplement' H K 
goal: H.IsComplement' K

full_name: Subgroup.isComplement'_iff_card_mul_and_disjoint
code: theorem isComplement'_iff_card_mul_and_disjoint [Finite G] :
    IsComplement' H K ↔ Nat.card H * Nat.card K = Nat.card G ∧ Disjoint H K 
goal: H.IsComplement' K ↔ Nat.card ↥H * Nat.card ↥K = Nat.card G ∧ Disjoint H K

full_name: Subgroup.isComplement'_of_coprime
code: theorem isComplement'_of_coprime [Finite G]
    (h1 : Nat.card H * Nat.card K = Nat.card G)
    (h2 : Nat.Coprime (Nat.card H) (Nat.card K)) : IsComplement' H K 
goal: H.IsComplement' K

full_name: Subgroup.isComplement'_stabilizer
code: theorem isComplement'_stabilizer {α : Type*} [MulAction G α] (a : α)
    (h1 : ∀ h : H, h • a = a → h = 1) (h2 : ∀ g : G, ∃ h : H, h • g • a = a) :
    IsComplement' H (MulAction.stabilizer G a) 
goal: H.IsComplement' (MulAction.stabilizer G a)

full_name: Subgroup.quotientEquivSigmaZMod
code: /-- Partition `G ⧸ H` into orbits of the action of `g : G`. -/
noncomputable def quotientEquivSigmaZMod :
    G ⧸ H ≃ Σq : orbitRel.Quotient (zpowers g) (G ⧸ H), ZMod (minimalPeriod (g • ·) q.out') 
goal: G ⧸ H ≃
  (q : MulAction.orbitRel.Quotient (↥(Subgroup.zpowers g)) (G ⧸ H)) ×
    ZMod (Function.minimalPeriod (fun x => g • x) (Quotient.out' q))

full_name: Subgroup.quotientEquivSigmaZMod_symm_apply
code: theorem quotientEquivSigmaZMod_symm_apply (q : orbitRel.Quotient (zpowers g) (G ⧸ H))
    (k : ZMod (minimalPeriod (g • ·) q.out')) :
    (quotientEquivSigmaZMod H g).symm ⟨q, k⟩ = g ^ (cast k : ℤ) • q.out' 
goal: (H.quotientEquivSigmaZMod g).symm ⟨q, k⟩ = g ^ k.cast • Quotient.out' q

full_name: Subgroup.quotientEquivSigmaZMod_apply
code: theorem quotientEquivSigmaZMod_apply (q : orbitRel.Quotient (zpowers g) (G ⧸ H)) (k : ℤ) :
    quotientEquivSigmaZMod H g (g ^ k • q.out') = ⟨q, k⟩ 
goal: (H.quotientEquivSigmaZMod g) (g ^ k • Quotient.out' q) = ⟨q, ↑k⟩

full_name: Subgroup.transferFunction
code: /-- The transfer transversal as a function. Given a `⟨g⟩`-orbit `q₀, g • q₀, ..., g ^ (m - 1) • q₀`
  in `G ⧸ H`, an element `g ^ k • q₀` is mapped to `g ^ k • g₀` for a fixed choice of
  representative `g₀` of `q₀`. -/
noncomputable def transferFunction : G ⧸ H → G 
goal: G ⧸ H → G

full_name: Subgroup.transferFunction_apply
code: theorem transferFunction_apply (q : G ⧸ H) :
    transferFunction H g q =
      g ^ (cast (quotientEquivSigmaZMod H g q).2 : ℤ) *
        (quotientEquivSigmaZMod H g q).1.out'.out' 
goal: H.transferFunction g q =
  g ^ ((H.quotientEquivSigmaZMod g) q).snd.cast * Quotient.out' (Quotient.out' ((H.quotientEquivSigmaZMod g) q).fst)

full_name: Subgroup.coe_transferFunction
code: theorem coe_transferFunction (q : G ⧸ H) : ↑(transferFunction H g q) = q 
goal: ↑(H.transferFunction g q) = q

full_name: Subgroup.transferSet
code: /-- The transfer transversal as a set. Contains elements of the form `g ^ k • g₀` for fixed choices
  of representatives `g₀` of fixed choices of representatives `q₀` of `⟨g⟩`-orbits in `G ⧸ H`. -/
def transferSet : Set G 
goal: Set G

full_name: Subgroup.mem_transferSet
code: theorem mem_transferSet (q : G ⧸ H) : transferFunction H g q ∈ transferSet H g 
goal: H.transferFunction g q ∈ H.transferSet g

full_name: Subgroup.transferTransversal
code: /-- The transfer transversal. Contains elements of the form `g ^ k • g₀` for fixed choices
  of representatives `g₀` of fixed choices of representatives `q₀` of `⟨g⟩`-orbits in `G ⧸ H`. -/
def transferTransversal : leftTransversals (H : Set G) 
goal: ↑(Subgroup.leftTransversals ↑H)

full_name: Subgroup.transferTransversal_apply
code: theorem transferTransversal_apply (q : G ⧸ H) :
    ↑(toEquiv (transferTransversal H g).2 q) = transferFunction H g q 
goal: ↑((Subgroup.MemLeftTransversals.toEquiv ⋯) q) = H.transferFunction g q

full_name: Subgroup.transferTransversal_apply'
code: theorem transferTransversal_apply' (q : orbitRel.Quotient (zpowers g) (G ⧸ H))
    (k : ZMod (minimalPeriod (g • ·) q.out')) :
    ↑(toEquiv (transferTransversal H g).2 (g ^ (cast k : ℤ) • q.out')) =
      g ^ (cast k : ℤ) * q.out'.out' 
goal: ↑((Subgroup.MemLeftTransversals.toEquiv ⋯) (g ^ k.cast • Quotient.out' q)) =
  g ^ k.cast * Quotient.out' (Quotient.out' q)

full_name: Subgroup.transferTransversal_apply''
code: theorem transferTransversal_apply'' (q : orbitRel.Quotient (zpowers g) (G ⧸ H))
    (k : ZMod (minimalPeriod (g • ·) q.out')) :
    ↑(toEquiv (g • transferTransversal H g).2 (g ^ (cast k : ℤ) • q.out')) =
      if k = 0 then g ^ minimalPeriod (g • ·) q.out' * q.out'.out'
      else g ^ (cast k : ℤ) * q.out'.out' 
goal: ↑((Subgroup.MemLeftTransversals.toEquiv ⋯) (g ^ k.cast • Quotient.out' q)) =
  if k = 0 then g ^ Function.minimalPeriod (fun x => g • x) (Quotient.out' q) * Quotient.out' (Quotient.out' q)
  else g ^ k.cast * Quotient.out' (Quotient.out' q)