@@ -209,6 +209,22 @@ lemma isComplement_iff_existsUnique_mul_inv_mem :
209209 · exact ⟨(⟨_, hx⟩, x), by simp, by aesop⟩
210210 · exact ⟨x.2 , by simp [← hx], fun y hy ↦ (Prod.ext_iff.1 <| by simpa using hx' (⟨_, hy⟩, y)).2 ⟩
211211
212+ @[to_additive]
213+ theorem IsComplement'.subgroupOf {N A U : Subgroup G} (hA : IsComplement' N A) (hAU : A ≤ U) :
214+ IsComplement' (N.subgroupOf U) (A.subgroupOf U) := by
215+ -- The unique factor `a ∈ A` of `u ∈ U` lies in `U`, so it factors `u` inside `U` as well.
216+ refine isComplement_iff_existsUnique_mul_inv_mem.mpr fun u => ?_
217+ obtain ⟨a, ha, hu⟩ := isComplement_iff_existsUnique_mul_inv_mem.mp hA (u : G)
218+ refine ⟨⟨⟨a, hAU a.2 ⟩, a.2 ⟩, ha, fun b hb => ?_⟩
219+ simpa [Subtype.ext_iff] using hu ⟨b, b.2 ⟩ hb
220+
221+ theorem IsComplement'.smul {α : Type *} [Group α] [MulDistribMulAction α G]
222+ (h : IsComplement' H K) (a : α) : IsComplement' (a • H) (a • K) := by
223+ refine isComplement_iff_existsUnique_mul_inv_mem.mpr fun g => ?_
224+ refine ((equivSMul a K).toEquiv.existsUnique_congr fun k => ?_).mp
225+ (isComplement_iff_existsUnique_mul_inv_mem.mp h (a⁻¹ • g))
226+ simp [Set.mem_smul_set_iff_inv_smul_mem]
227+
212228@[to_additive]
213229lemma isComplement_subgroup_right_iff_existsUnique_quotientGroupMk :
214230 IsComplement S H ↔ ∀ q : G ⧸ H, ∃! s : S, QuotientGroup.mk s.1 = q := by
@@ -642,6 +658,12 @@ theorem IsComplement'.disjoint (h : IsComplement' H K) : Disjoint H K :=
642658theorem IsComplement'.index_eq_card (h : IsComplement' H K) : K.index = Nat.card H :=
643659 h.card_left.symm
644660
661+ /-- A complement to a central subgroup is normal. -/
662+ theorem IsComplement'.normal_of_le_center (hc : H.IsComplement' K) (hZ : H ≤ center G) :
663+ K.Normal := by
664+ rw [← normalizer_eq_top_iff, ← top_le_iff, ← hc.sup_eq_top]
665+ exact sup_le (hZ.trans (center_le_normalizer (K : Set G))) K.le_normalizer
666+
645667#adaptation_note
646668/-- `respectTransparency.types true` changes the auto-generated lemmas' signature -/
647669set_option backward.isDefEq.respectTransparency.types false in
@@ -669,6 +691,33 @@ theorem isComplement'_of_disjoint_and_mul_eq_univ (h1 : Disjoint H K)
669691 obtain ⟨h, hh, k, hk, hg⟩ := Set.eq_univ_iff_forall.mp h2 g
670692 exact ⟨(⟨h, hh⟩, ⟨k, hk⟩), hg⟩
671693
694+ theorem _root_.IsCompl.isComplement' [H.Normal] (h : IsCompl H K) : IsComplement' H K :=
695+ isComplement'_of_disjoint_and_mul_eq_univ h.disjoint <| by
696+ rw [← normal_mul, codisjoint_iff.mp h.codisjoint, coe_top]
697+
698+ /-- For `H` normal, being complements in the group sense is equivalent to being lattice
699+ complements. -/
700+ theorem isComplement'_iff_isCompl [H.Normal] : IsComplement' H K ↔ IsCompl H K :=
701+ ⟨IsComplement'.isCompl, IsCompl.isComplement'⟩
702+
703+ /-- If `K` is conjugate to `L`, then it is conjugate to `L` by an element of its
704+ complement `H`. -/
705+ theorem IsComplement'.exists_smul_eq_of_conj_smul_eq (h : IsComplement' H K) {L : Subgroup G}
706+ {g : G} (hg : MulAut.conj g • K = L) : ∃ x : H, MulAut.conj (x : G) • K = L := by
707+ obtain ⟨⟨a, b⟩, rfl⟩ := (h.existsUnique g).exists
708+ exact ⟨a, by rw [← hg, map_mul, mul_smul, conj_smul_eq_self_of_mem b.2 ]⟩
709+
710+ theorem IsComplement'.map {G' : Type *} [Group G'] (h : IsComplement' H K)
711+ {f : G →* G'} (hf : Function.Surjective f) (hker : f.ker ≤ K) :
712+ IsComplement' (H.map f) (K.map f) := by
713+ refine isComplement'_of_disjoint_and_mul_eq_univ ?_ ?_
714+ · rw [disjoint_iff, ← (comap_injective hf).eq_iff, MonoidHom.comap_bot]
715+ calc comap f (H.map f ⊓ K.map f)
716+ = (f.ker ⊔ H) ⊓ K := by rw [comap_inf, comap_map_eq, comap_map_eq_self hker, sup_comm]
717+ _ = f.ker ⊔ H ⊓ K := sup_inf_assoc_of_le H hker
718+ _ = f.ker := by rw [disjoint_iff.mp h.disjoint, sup_bot_eq]
719+ · simp [← Set.image_mul, IsComplement.mul_eq h, hf.range_eq]
720+
672721theorem isComplement'_of_card_mul_and_disjoint [Finite G]
673722 (h1 : Nat.card H * Nat.card K = Nat.card G) (h2 : Disjoint H K) :
674723 IsComplement' H K :=
@@ -684,6 +733,29 @@ theorem isComplement'_of_coprime [Finite G]
684733 (h2 : Nat.Coprime (Nat.card H) (Nat.card K)) : IsComplement' H K :=
685734 isComplement'_of_card_mul_and_disjoint h1 <| disjoint_of_coprime_natCard h2
686735
736+ /-- A subgroup `H` of order coprime to a normal subgroup `N` is a complement of `N` inside the
737+ join `H ⊔ N`. -/
738+ theorem isComplement'_subgroupOf_sup {N : Subgroup G} [N.Normal]
739+ (h : Nat.Coprime (Nat.card N) (Nat.card H)) :
740+ IsComplement' (N.subgroupOf (H ⊔ N)) (H.subgroupOf (H ⊔ N)) := by
741+ by_cases hN : Nat.card N = 0
742+ · obtain rfl : H = ⊥ := by simpa [hN] using h
743+ simp
744+ by_cases hH : Nat.card H = 0
745+ · obtain rfl : N = ⊥ := by simpa [hH] using h
746+ simp
747+ have hcardN : Nat.card (N.subgroupOf (H ⊔ N)) = Nat.card N :=
748+ Nat.card_congr (subgroupOfEquivOfLe le_sup_right).toEquiv
749+ have hcardH : Nat.card (H.subgroupOf (H ⊔ N)) = Nat.card H :=
750+ Nat.card_congr (subgroupOfEquivOfLe le_sup_left).toEquiv
751+ have hidx : (N.subgroupOf (H ⊔ N)).index = Nat.card H := by
752+ rw [← relIndex, relIndex_sup_right, relIndex,
753+ subgroupOf_eq_bot.mpr (disjoint_of_coprime_natCard h), index_bot]
754+ have hcard : Nat.card ↥(H ⊔ N) = Nat.card N * Nat.card H := by
755+ rw [← (N.subgroupOf (H ⊔ N)).card_mul_index, hidx, hcardN]
756+ have : Finite ↥(H ⊔ N) := Nat.finite_of_card_ne_zero (hcard.trans_ne (mul_ne_zero hN hH))
757+ exact isComplement'_of_coprime (by rw [hcardN, hcardH, hcard]) (by rw [hcardN, hcardH]; exact h)
758+
687759theorem isComplement'_stabilizer {α : Type *} [MulAction G α] (a : α)
688760 (h1 : ∀ h : H, h • a = a → h = 1 ) (h2 : ∀ g : G, ∃ h : H, h • g • a = a) :
689761 IsComplement' H (MulAction.stabilizer G a) := by
0 commit comments