Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 179dcde

Browse files
committed
refactor(group_theory/order_of_element): Remove fintype hypothesis from pow_coprime (#16989)
This PR removes the `[fintype G]` hypothesis from `pow_coprime (h : coprime (card G) n) : G ≃ G` (the bijection given by the `n`th power map).
1 parent ec3c1f2 commit 179dcde

File tree

2 files changed

+29
-21
lines changed

2 files changed

+29
-21
lines changed

src/group_theory/order_of_element.lean

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -624,7 +624,6 @@ lemma order_eq_card_zpowers : order_of x = fintype.card (zpowers x) :=
624624

625625
open quotient_group
626626

627-
/- TODO: use cardinal theory, introduce `card : set G → ℕ`, or setup decidability for cosets -/
628627
@[to_additive add_order_of_dvd_card_univ]
629628
lemma order_of_dvd_card_univ : order_of x ∣ fintype.card G :=
630629
begin
@@ -649,15 +648,25 @@ begin
649648
(by rw [eq₁, eq₂, mul_comm])
650649
end
651650

651+
@[to_additive add_order_of_dvd_nat_card]
652+
lemma order_of_dvd_nat_card {G : Type*} [group G] {x : G} : order_of x ∣ nat.card G :=
653+
begin
654+
casesI fintype_or_infinite G with h h,
655+
{ simp only [nat.card_eq_fintype_card, order_of_dvd_card_univ] },
656+
{ simp only [card_eq_zero_of_infinite, dvd_zero] },
657+
end
658+
659+
@[simp, to_additive card_nsmul_eq_zero']
660+
lemma pow_card_eq_one' {G : Type*} [group G] {x : G} : x ^ nat.card G = 1 :=
661+
order_of_dvd_iff_pow_eq_one.mp order_of_dvd_nat_card
662+
652663
@[simp, to_additive card_nsmul_eq_zero]
653664
lemma pow_card_eq_one : x ^ fintype.card G = 1 :=
654-
let ⟨m, hm⟩ := @order_of_dvd_card_univ _ x _ _ in
655-
by simp [hm, pow_mul, pow_order_of_eq_one]
665+
by rw [←nat.card_eq_fintype_card, pow_card_eq_one']
656666

657667
@[to_additive] lemma subgroup.pow_index_mem {G : Type*} [group G] (H : subgroup G)
658-
[finite (G ⧸ H)] [normal H] (g : G) : g ^ index H ∈ H :=
659-
by { casesI nonempty_fintype (G ⧸ H),
660-
rw [←eq_one_iff, quotient_group.coe_pow H, index_eq_card, pow_card_eq_one] }
668+
[normal H] (g : G) : g ^ index H ∈ H :=
669+
by rw [←eq_one_iff, quotient_group.coe_pow H, index, pow_card_eq_one']
661670

662671
@[to_additive] lemma pow_eq_mod_card (n : ℕ) :
663672
x ^ n = x ^ (n % fintype.card G) :=
@@ -671,23 +680,23 @@ by rw [zpow_eq_mod_order_of, ← int.mod_mod_of_dvd n (int.coe_nat_dvd.2 order_o
671680

672681
/-- If `gcd(|G|,n)=1` then the `n`th power map is a bijection -/
673682
@[to_additive "If `gcd(|G|,n)=1` then the smul by `n` is a bijection", simps]
674-
def pow_coprime (h : nat.coprime (fintype.card G) n) : G ≃ G :=
683+
noncomputable def pow_coprime {G : Type*} [group G] (h : (nat.card G).coprime n) : G ≃ G :=
675684
{ to_fun := λ g, g ^ n,
676-
inv_fun := λ g, g ^ (nat.gcd_b (fintype.card G) n),
685+
inv_fun := λ g, g ^ ((nat.card G).gcd_b n),
677686
left_inv := λ g, by
678-
{ have key : g ^ _ = g ^ _ := congr_arg (λ n : ℤ, g ^ n) (nat.gcd_eq_gcd_ab (fintype.card G) n),
687+
{ have key := congr_arg ((^) g) ((nat.card G).gcd_eq_gcd_ab n),
679688
rwa [zpow_add, zpow_mul, zpow_mul, zpow_coe_nat, zpow_coe_nat, zpow_coe_nat,
680-
h.gcd_eq_one, pow_one, pow_card_eq_one, one_zpow, one_mul, eq_comm] at key },
689+
h.gcd_eq_one, pow_one, pow_card_eq_one', one_zpow, one_mul, eq_comm] at key },
681690
right_inv := λ g, by
682-
{ have key : g ^ _ = g ^ _ := congr_arg (λ n : ℤ, g ^ n) (nat.gcd_eq_gcd_ab (fintype.card G) n),
691+
{ have key := congr_arg ((^) g) ((nat.card G).gcd_eq_gcd_ab n),
683692
rwa [zpow_add, zpow_mul, zpow_mul', zpow_coe_nat, zpow_coe_nat, zpow_coe_nat,
684-
h.gcd_eq_one, pow_one, pow_card_eq_one, one_zpow, one_mul, eq_comm] at key } }
693+
h.gcd_eq_one, pow_one, pow_card_eq_one', one_zpow, one_mul, eq_comm] at key } }
685694

686-
@[simp, to_additive] lemma pow_coprime_one (h : nat.coprime (fintype.card G) n) :
695+
@[simp, to_additive] lemma pow_coprime_one {G : Type*} [group G] (h : (nat.card G).coprime n) :
687696
pow_coprime h 1 = 1 := one_pow n
688697

689-
@[simp, to_additive] lemma pow_coprime_inv (h : nat.coprime (fintype.card G) n) {g : G} :
690-
pow_coprime h g⁻¹ = (pow_coprime h g)⁻¹ := inv_pow g n
698+
@[simp, to_additive] lemma pow_coprime_inv {G : Type*} [group G] (h : (nat.card G).coprime n)
699+
{g : G} : pow_coprime h g⁻¹ = (pow_coprime h g)⁻¹ := inv_pow g n
691700

692701
@[to_additive add_inf_eq_bot_of_coprime]
693702
lemma inf_eq_bot_of_coprime {G : Type*} [group G] {H K : subgroup G} [fintype H] [fintype K]

src/group_theory/schur_zassenhaus.lean

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -78,29 +78,27 @@ begin
7878
exact self_eq_mul_right.mpr ((quotient_group.eq_one_iff _).mpr h.2),
7979
end
8080

81-
variables [fintype H]
82-
83-
lemma eq_one_of_smul_eq_one (hH : nat.coprime (fintype.card H) H.index)
81+
lemma eq_one_of_smul_eq_one (hH : nat.coprime (nat.card H) H.index)
8482
(α : H.quotient_diff) (h : H) : h • α = α → h = 1 :=
8583
quotient.induction_on' α $ λ α hα, (pow_coprime hH).injective $
8684
calc h ^ H.index = diff (monoid_hom.id H) ((op ((h⁻¹ : H) : G)) • α) α :
8785
by rw [←diff_inv, smul_diff', diff_self, one_mul, inv_pow, inv_inv]
8886
... = 1 ^ H.index : (quotient.exact' hα).trans (one_pow H.index).symm
8987

90-
lemma exists_smul_eq (hH : nat.coprime (fintype.card H) H.index)
88+
lemma exists_smul_eq (hH : nat.coprime (nat.card H) H.index)
9189
(α β : H.quotient_diff) : ∃ h : H, h • α = β :=
9290
quotient.induction_on' α (quotient.induction_on' β (λ β α, exists_imp_exists (λ n, quotient.sound')
9391
⟨(pow_coprime hH).symm (diff (monoid_hom.id H) β α), (diff_inv _ _ _).symm.trans
9492
(inv_eq_one.mpr ((smul_diff' β α ((pow_coprime hH).symm (diff (monoid_hom.id H) β α))⁻¹).trans
9593
(by rw [inv_pow, ←pow_coprime_apply hH, equiv.apply_symm_apply, mul_inv_self])))⟩))
9694

9795
lemma is_complement'_stabilizer_of_coprime {α : H.quotient_diff}
98-
(hH : nat.coprime (fintype.card H) H.index) : is_complement' H (stabilizer G α) :=
96+
(hH : nat.coprime (nat.card H) H.index) : is_complement' H (stabilizer G α) :=
9997
is_complement'_stabilizer α (eq_one_of_smul_eq_one hH α) (λ g, exists_smul_eq hH (g • α) α)
10098

10199
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
102100
private lemma exists_right_complement'_of_coprime_aux
103-
(hH : nat.coprime (fintype.card H) H.index) : ∃ K : subgroup G, is_complement' H K :=
101+
(hH : nat.coprime (nat.card H) H.index) : ∃ K : subgroup G, is_complement' H K :=
104102
nonempty_of_inhabited.elim (λ α, ⟨stabilizer G α, is_complement'_stabilizer_of_coprime hH⟩)
105103

106104
end schur_zassenhaus_abelian
@@ -256,6 +254,7 @@ begin
256254
refine not_forall_not.mp (λ h3, _),
257255
haveI := by exactI
258256
schur_zassenhaus_induction.step7 hN (λ G' _ _ hG', by { apply ih _ hG', refl }) h3,
257+
rw ← nat.card_eq_fintype_card at hN,
259258
exact not_exists_of_forall_not h3 (exists_right_complement'_of_coprime_aux hN),
260259
end
261260

0 commit comments

Comments
 (0)