group_theory.transfer
⟷
Mathlib.GroupTheory.Transfer
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
centralizer
from subgroup G
to set G
(#18965)
This is consistent with all the other sub<foo>.centralizer
definitions.
This generalization reveals that a lot of downstream results are rather strangely stated about zpowers
.
This does not attempt to change these, instead leaving the work for a follow up (either in a later mathlib3 PR or in mathlib4).
@@ -172,7 +172,7 @@ rfl
section burnside_transfer
-variables {p : ℕ} (P : sylow p G) (hP : (P : subgroup G).normalizer ≤ (P : subgroup G).centralizer)
+variables {p : ℕ} (P : sylow p G) (hP : (P : subgroup G).normalizer ≤ centralizer (P : set G))
include hP
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -191,7 +191,7 @@ theorem transfer_eq_pow [FiniteIndex H] (g : G)
transfer ϕ g = ϕ ⟨g ^ H.index, transfer_eq_pow_aux g key⟩ := by
classical
letI := H.fintype_quotient_of_finite_index
- change ∀ (k g₀) (hk : g₀⁻¹ * g ^ k * g₀ ∈ H), ↑(⟨g₀⁻¹ * g ^ k * g₀, hk⟩ : H) = g ^ k at key
+ change ∀ (k g₀) (hk : g₀⁻¹ * g ^ k * g₀ ∈ H), ↑(⟨g₀⁻¹ * g ^ k * g₀, hk⟩ : H) = g ^ k at key
rw [transfer_eq_prod_quotient_orbit_rel_zpowers_quot, ← Finset.prod_to_list, List.prod_map_hom]
refine' congr_arg ϕ (Subtype.coe_injective _)
rw [H.coe_mk, ← (zpowers g).coe_mk g (mem_zpowers g), ← (zpowers g).coe_pow, (zpowers g).coe_mk,
@@ -287,11 +287,11 @@ theorem ker_transferSylow_isComplement' : IsComplement' (transferSylow P hP).ker
(P.2.powEquiv'
(not_dvd_index_sylow P
(mt index_eq_zero_of_relindex_eq_zero index_ne_zero_of_finite))).Bijective
- rw [Function.Bijective, ← range_top_iff_surjective, restrict_range] at hf
+ rw [Function.Bijective, ← range_top_iff_surjective, restrict_range] at hf
have := range_top_iff_surjective.mp (top_le_iff.mp (hf.2.ge.trans (map_le_range _ P)))
rw [← (comap_injective this).eq_iff, comap_top, comap_map_eq, sup_comm, SetLike.ext'_iff,
normal_mul, ← ker_eq_bot_iff, ← (map_injective (P : Subgroup G).subtype_injective).eq_iff,
- ker_restrict, subgroup_of_map_subtype, Subgroup.map_bot, coe_top] at hf
+ ker_restrict, subgroup_of_map_subtype, Subgroup.map_bot, coe_top] at hf
exact is_complement'_of_disjoint_and_mul_eq_univ (disjoint_iff.2 hf.1) hf.2
#align monoid_hom.ker_transfer_sylow_is_complement' MonoidHom.ker_transferSylow_isComplement'
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -254,8 +254,7 @@ variable [Fact p.Prime] [Finite (Sylow p G)]
theorem transferSylow_eq_pow_aux (g : G) (hg : g ∈ P) (k : ℕ) (g₀ : G) (h : g₀⁻¹ * g ^ k * g₀ ∈ P) :
g₀⁻¹ * g ^ k * g₀ = g ^ k :=
by
- haveI : (P : Subgroup G).IsCommutativeₓ :=
- ⟨⟨fun a b => Subtype.ext (hP (le_normalizer b.2) a a.2)⟩⟩
+ haveI : (P : Subgroup G).Commutative := ⟨⟨fun a b => Subtype.ext (hP (le_normalizer b.2) a a.2)⟩⟩
replace hg := (P : Subgroup G).pow_mem hg k
obtain ⟨n, hn, h⟩ := P.conj_eq_normalizer_conj_of_mem (g ^ k) g₀ hg h
exact h.trans (Commute.inv_mul_cancel (hP hn (g ^ k) hg).symm)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -254,7 +254,7 @@ variable [Fact p.Prime] [Finite (Sylow p G)]
theorem transferSylow_eq_pow_aux (g : G) (hg : g ∈ P) (k : ℕ) (g₀ : G) (h : g₀⁻¹ * g ^ k * g₀ ∈ P) :
g₀⁻¹ * g ^ k * g₀ = g ^ k :=
by
- haveI : (P : Subgroup G).IsCommutative :=
+ haveI : (P : Subgroup G).IsCommutativeₓ :=
⟨⟨fun a b => Subtype.ext (hP (le_normalizer b.2) a a.2)⟩⟩
replace hg := (P : Subgroup G).pow_mem hg k
obtain ⟨n, hn, h⟩ := P.conj_eq_normalizer_conj_of_mem (g ^ k) g₀ hg h
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -144,7 +144,20 @@ theorem transfer_eq_prod_quotient_orbitRel_zpowers_quot [FiniteIndex H] (g : G)
ϕ
⟨q.out'.out'⁻¹ * g ^ Function.minimalPeriod ((· • ·) g) q.out' * q.out'.out',
QuotientGroup.out'_conj_pow_minimalPeriod_mem H g q.out'⟩ :=
- by classical
+ by
+ classical
+ letI := H.fintype_quotient_of_finite_index
+ calc
+ transfer ϕ g = ∏ q : G ⧸ H, _ := transfer_def ϕ (transfer_transversal H g) g
+ _ = _ := ((quotient_equiv_sigma_zmod H g).symm.prod_comp _).symm
+ _ = _ := (Finset.prod_sigma _ _ _)
+ _ = _ := Fintype.prod_congr _ _ fun q => _
+ simp only [quotient_equiv_sigma_zmod_symm_apply, transfer_transversal_apply',
+ transfer_transversal_apply'']
+ rw [Fintype.prod_eq_single (0 : ZMod (Function.minimalPeriod ((· • ·) g) q.out')) fun k hk => _]
+ · simp only [if_pos, ZMod.cast_zero, zpow_zero, one_mul, mul_assoc]
+ · simp only [if_neg hk, inv_mul_self]
+ exact map_one ϕ
#align monoid_hom.transfer_eq_prod_quotient_orbit_rel_zpowers_quot MonoidHom.transfer_eq_prod_quotient_orbitRel_zpowers_quot
-/
@@ -158,13 +171,36 @@ theorem transfer_eq_pow_aux (g : G)
exact H.one_mem
letI := fintype_of_index_ne_zero hH
classical
+ replace key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g ^ k ∈ H := fun k g₀ hk =>
+ (_root_.congr_arg (· ∈ H) (key k g₀ hk)).mp hk
+ replace key : ∀ q : G ⧸ H, g ^ Function.minimalPeriod ((· • ·) g) q ∈ H := fun q =>
+ key (Function.minimalPeriod ((· • ·) g) q) q.out'
+ (QuotientGroup.out'_conj_pow_minimalPeriod_mem H g q)
+ let f : Quotient (orbit_rel (zpowers g) (G ⧸ H)) → zpowers g := fun q =>
+ (⟨g, mem_zpowers g⟩ : zpowers g) ^ Function.minimalPeriod ((· • ·) g) q.out'
+ have hf : ∀ q, f q ∈ H.subgroup_of (zpowers g) := fun q => key q.out'
+ replace key := Subgroup.prod_mem (H.subgroup_of (zpowers g)) fun q (hq : q ∈ Finset.univ) => hf q
+ simpa only [minimal_period_eq_card, Finset.prod_pow_eq_pow_sum, Fintype.card_sigma,
+ Fintype.card_congr (self_equiv_sigma_orbits (zpowers g) (G ⧸ H)), index_eq_card] using key
#align monoid_hom.transfer_eq_pow_aux MonoidHom.transfer_eq_pow_aux
-/
#print MonoidHom.transfer_eq_pow /-
theorem transfer_eq_pow [FiniteIndex H] (g : G)
(key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g₀⁻¹ * g ^ k * g₀ = g ^ k) :
- transfer ϕ g = ϕ ⟨g ^ H.index, transfer_eq_pow_aux g key⟩ := by classical
+ transfer ϕ g = ϕ ⟨g ^ H.index, transfer_eq_pow_aux g key⟩ := by
+ classical
+ letI := H.fintype_quotient_of_finite_index
+ change ∀ (k g₀) (hk : g₀⁻¹ * g ^ k * g₀ ∈ H), ↑(⟨g₀⁻¹ * g ^ k * g₀, hk⟩ : H) = g ^ k at key
+ rw [transfer_eq_prod_quotient_orbit_rel_zpowers_quot, ← Finset.prod_to_list, List.prod_map_hom]
+ refine' congr_arg ϕ (Subtype.coe_injective _)
+ rw [H.coe_mk, ← (zpowers g).coe_mk g (mem_zpowers g), ← (zpowers g).coe_pow, (zpowers g).coe_mk,
+ index_eq_card, Fintype.card_congr (self_equiv_sigma_orbits (zpowers g) (G ⧸ H)),
+ Fintype.card_sigma, ← Finset.prod_pow_eq_pow_sum, ← Finset.prod_to_list]
+ simp only [coe_list_prod, List.map_map, ← minimal_period_eq_card]
+ congr 2
+ funext
+ apply key
#align monoid_hom.transfer_eq_pow MonoidHom.transfer_eq_pow
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -144,20 +144,7 @@ theorem transfer_eq_prod_quotient_orbitRel_zpowers_quot [FiniteIndex H] (g : G)
ϕ
⟨q.out'.out'⁻¹ * g ^ Function.minimalPeriod ((· • ·) g) q.out' * q.out'.out',
QuotientGroup.out'_conj_pow_minimalPeriod_mem H g q.out'⟩ :=
- by
- classical
- letI := H.fintype_quotient_of_finite_index
- calc
- transfer ϕ g = ∏ q : G ⧸ H, _ := transfer_def ϕ (transfer_transversal H g) g
- _ = _ := ((quotient_equiv_sigma_zmod H g).symm.prod_comp _).symm
- _ = _ := (Finset.prod_sigma _ _ _)
- _ = _ := Fintype.prod_congr _ _ fun q => _
- simp only [quotient_equiv_sigma_zmod_symm_apply, transfer_transversal_apply',
- transfer_transversal_apply'']
- rw [Fintype.prod_eq_single (0 : ZMod (Function.minimalPeriod ((· • ·) g) q.out')) fun k hk => _]
- · simp only [if_pos, ZMod.cast_zero, zpow_zero, one_mul, mul_assoc]
- · simp only [if_neg hk, inv_mul_self]
- exact map_one ϕ
+ by classical
#align monoid_hom.transfer_eq_prod_quotient_orbit_rel_zpowers_quot MonoidHom.transfer_eq_prod_quotient_orbitRel_zpowers_quot
-/
@@ -171,36 +158,13 @@ theorem transfer_eq_pow_aux (g : G)
exact H.one_mem
letI := fintype_of_index_ne_zero hH
classical
- replace key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g ^ k ∈ H := fun k g₀ hk =>
- (_root_.congr_arg (· ∈ H) (key k g₀ hk)).mp hk
- replace key : ∀ q : G ⧸ H, g ^ Function.minimalPeriod ((· • ·) g) q ∈ H := fun q =>
- key (Function.minimalPeriod ((· • ·) g) q) q.out'
- (QuotientGroup.out'_conj_pow_minimalPeriod_mem H g q)
- let f : Quotient (orbit_rel (zpowers g) (G ⧸ H)) → zpowers g := fun q =>
- (⟨g, mem_zpowers g⟩ : zpowers g) ^ Function.minimalPeriod ((· • ·) g) q.out'
- have hf : ∀ q, f q ∈ H.subgroup_of (zpowers g) := fun q => key q.out'
- replace key := Subgroup.prod_mem (H.subgroup_of (zpowers g)) fun q (hq : q ∈ Finset.univ) => hf q
- simpa only [minimal_period_eq_card, Finset.prod_pow_eq_pow_sum, Fintype.card_sigma,
- Fintype.card_congr (self_equiv_sigma_orbits (zpowers g) (G ⧸ H)), index_eq_card] using key
#align monoid_hom.transfer_eq_pow_aux MonoidHom.transfer_eq_pow_aux
-/
#print MonoidHom.transfer_eq_pow /-
theorem transfer_eq_pow [FiniteIndex H] (g : G)
(key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g₀⁻¹ * g ^ k * g₀ = g ^ k) :
- transfer ϕ g = ϕ ⟨g ^ H.index, transfer_eq_pow_aux g key⟩ := by
- classical
- letI := H.fintype_quotient_of_finite_index
- change ∀ (k g₀) (hk : g₀⁻¹ * g ^ k * g₀ ∈ H), ↑(⟨g₀⁻¹ * g ^ k * g₀, hk⟩ : H) = g ^ k at key
- rw [transfer_eq_prod_quotient_orbit_rel_zpowers_quot, ← Finset.prod_to_list, List.prod_map_hom]
- refine' congr_arg ϕ (Subtype.coe_injective _)
- rw [H.coe_mk, ← (zpowers g).coe_mk g (mem_zpowers g), ← (zpowers g).coe_pow, (zpowers g).coe_mk,
- index_eq_card, Fintype.card_congr (self_equiv_sigma_orbits (zpowers g) (G ⧸ H)),
- Fintype.card_sigma, ← Finset.prod_pow_eq_pow_sum, ← Finset.prod_to_list]
- simp only [coe_list_prod, List.map_map, ← minimal_period_eq_card]
- congr 2
- funext
- apply key
+ transfer ϕ g = ϕ ⟨g ^ H.index, transfer_eq_pow_aux g key⟩ := by classical
#align monoid_hom.transfer_eq_pow MonoidHom.transfer_eq_pow
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2022 Thomas Browning. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Thomas Browning
-/
-import Mathbin.GroupTheory.Complement
-import Mathbin.GroupTheory.Sylow
+import GroupTheory.Complement
+import GroupTheory.Sylow
#align_import group_theory.transfer from "leanprover-community/mathlib"@"4be589053caf347b899a494da75410deb55fb3ef"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -64,7 +64,7 @@ noncomputable def diff : A :=
theorem diff_mul_diff : diff ϕ R S * diff ϕ S T = diff ϕ R T :=
prod_mul_distrib.symm.trans
(prod_congr rfl fun q hq =>
- (ϕ.map_mul _ _).symm.trans
+ (ϕ.map_hMul _ _).symm.trans
(congr_arg ϕ
(by simp_rw [Subtype.ext_iff, coe_mul, coe_mk, mul_assoc, mul_inv_cancel_left])))
#align subgroup.left_transversals.diff_mul_diff Subgroup.leftTransversals.diff_mul_diff
mathlib commit https://github.com/leanprover-community/mathlib/commit/c0c52abb75074ed8b73a948341f50521fbf43b4c
@@ -6,7 +6,7 @@ Authors: Thomas Browning
import Mathbin.GroupTheory.Complement
import Mathbin.GroupTheory.Sylow
-#align_import group_theory.transfer from "leanprover-community/mathlib"@"36938f775671ff28bea1c0310f1608e4afbb22e0"
+#align_import group_theory.transfer from "leanprover-community/mathlib"@"4be589053caf347b899a494da75410deb55fb3ef"
/-!
# The Transfer Homomorphism
@@ -235,7 +235,7 @@ theorem transferCenterPow_apply [FiniteIndex (center G)] (g : G) :
section BurnsideTransfer
-variable {p : ℕ} (P : Sylow p G) (hP : (P : Subgroup G).normalizer ≤ (P : Subgroup G).centralizer)
+variable {p : ℕ} (P : Sylow p G) (hP : (P : Subgroup G).normalizer ≤ centralizer (P : Set G))
#print MonoidHom.transferSylow /-
/-- The homomorphism `G →* P` in Burnside's transfer theorem. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2022 Thomas Browning. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Thomas Browning
-
-! This file was ported from Lean 3 source module group_theory.transfer
-! leanprover-community/mathlib commit 36938f775671ff28bea1c0310f1608e4afbb22e0
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.GroupTheory.Complement
import Mathbin.GroupTheory.Sylow
+#align_import group_theory.transfer from "leanprover-community/mathlib"@"36938f775671ff28bea1c0310f1608e4afbb22e0"
+
/-!
# The Transfer Homomorphism
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -252,17 +252,17 @@ noncomputable def transferSylow [FiniteIndex (P : Subgroup G)] : G →* (P : Sub
variable [Fact p.Prime] [Finite (Sylow p G)]
-#print MonoidHom.transfer_sylow_eq_pow_aux /-
+#print MonoidHom.transferSylow_eq_pow_aux /-
/-- Auxillary lemma in order to state `transfer_sylow_eq_pow`. -/
-theorem transfer_sylow_eq_pow_aux (g : G) (hg : g ∈ P) (k : ℕ) (g₀ : G)
- (h : g₀⁻¹ * g ^ k * g₀ ∈ P) : g₀⁻¹ * g ^ k * g₀ = g ^ k :=
+theorem transferSylow_eq_pow_aux (g : G) (hg : g ∈ P) (k : ℕ) (g₀ : G) (h : g₀⁻¹ * g ^ k * g₀ ∈ P) :
+ g₀⁻¹ * g ^ k * g₀ = g ^ k :=
by
haveI : (P : Subgroup G).IsCommutative :=
⟨⟨fun a b => Subtype.ext (hP (le_normalizer b.2) a a.2)⟩⟩
replace hg := (P : Subgroup G).pow_mem hg k
obtain ⟨n, hn, h⟩ := P.conj_eq_normalizer_conj_of_mem (g ^ k) g₀ hg h
exact h.trans (Commute.inv_mul_cancel (hP hn (g ^ k) hg).symm)
-#align monoid_hom.transfer_sylow_eq_pow_aux MonoidHom.transfer_sylow_eq_pow_aux
+#align monoid_hom.transfer_sylow_eq_pow_aux MonoidHom.transferSylow_eq_pow_aux
-/
variable [FiniteIndex (P : Subgroup G)]
@@ -270,7 +270,7 @@ variable [FiniteIndex (P : Subgroup G)]
#print MonoidHom.transferSylow_eq_pow /-
theorem transferSylow_eq_pow (g : G) (hg : g ∈ P) :
transferSylow P hP g =
- ⟨g ^ (P : Subgroup G).index, transfer_eq_pow_aux g (transfer_sylow_eq_pow_aux P hP g hg)⟩ :=
+ ⟨g ^ (P : Subgroup G).index, transfer_eq_pow_aux g (transferSylow_eq_pow_aux P hP g hg)⟩ :=
by apply transfer_eq_pow
#align monoid_hom.transfer_sylow_eq_pow MonoidHom.transferSylow_eq_pow
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -47,6 +47,7 @@ open scoped Pointwise
variable (R S T : leftTransversals (H : Set G)) [FiniteIndex H]
+#print Subgroup.leftTransversals.diff /-
/-- The difference of two left transversals -/
@[to_additive "The difference of two left transversals"]
noncomputable def diff : A :=
@@ -59,7 +60,9 @@ noncomputable def diff : A :=
Quotient.exact' ((α.symm_apply_apply q).trans (β.symm_apply_apply q).symm)⟩
#align subgroup.left_transversals.diff Subgroup.leftTransversals.diff
#align add_subgroup.left_transversals.diff AddSubgroup.leftTransversals.diff
+-/
+#print Subgroup.leftTransversals.diff_mul_diff /-
@[to_additive]
theorem diff_mul_diff : diff ϕ R S * diff ϕ S T = diff ϕ R T :=
prod_mul_distrib.symm.trans
@@ -69,19 +72,25 @@ theorem diff_mul_diff : diff ϕ R S * diff ϕ S T = diff ϕ R T :=
(by simp_rw [Subtype.ext_iff, coe_mul, coe_mk, mul_assoc, mul_inv_cancel_left])))
#align subgroup.left_transversals.diff_mul_diff Subgroup.leftTransversals.diff_mul_diff
#align add_subgroup.left_transversals.diff_add_diff AddSubgroup.leftTransversals.diff_add_diff
+-/
+#print Subgroup.leftTransversals.diff_self /-
@[to_additive]
theorem diff_self : diff ϕ T T = 1 :=
mul_right_eq_self.mp (diff_mul_diff ϕ T T T)
#align subgroup.left_transversals.diff_self Subgroup.leftTransversals.diff_self
#align add_subgroup.left_transversals.diff_self AddSubgroup.leftTransversals.diff_self
+-/
+#print Subgroup.leftTransversals.diff_inv /-
@[to_additive]
theorem diff_inv : (diff ϕ S T)⁻¹ = diff ϕ T S :=
inv_eq_of_mul_eq_one_right <| (diff_mul_diff ϕ S T S).trans <| diff_self ϕ S
#align subgroup.left_transversals.diff_inv Subgroup.leftTransversals.diff_inv
#align add_subgroup.left_transversals.diff_neg AddSubgroup.leftTransversals.diff_neg
+-/
+#print Subgroup.leftTransversals.smul_diff_smul /-
@[to_additive]
theorem smul_diff_smul (g : G) : diff ϕ (g • S) (g • T) = diff ϕ S T :=
let h := H.fintypeQuotientOfFiniteIndex
@@ -95,6 +104,7 @@ theorem smul_diff_smul (g : G) : diff ϕ (g • S) (g • T) = diff ϕ S T :=
inv_smul_smul g q
#align subgroup.left_transversals.smul_diff_smul Subgroup.leftTransversals.smul_diff_smul
#align add_subgroup.left_transversals.vadd_diff_vadd AddSubgroup.leftTransversals.vadd_diff_vadd
+-/
end LeftTransversals
@@ -104,6 +114,7 @@ namespace MonoidHom
open MulAction Subgroup Subgroup.leftTransversals
+#print MonoidHom.transfer /-
/-- Given `ϕ : H →* A` from `H : subgroup G` to a commutative group `A`,
the transfer homomorphism is `transfer ϕ : G →* A`. -/
@[to_additive
@@ -115,15 +126,19 @@ noncomputable def transfer [FiniteIndex H] : G →* A :=
map_mul' := fun g h => by rw [mul_smul, ← diff_mul_diff, smul_diff_smul] }
#align monoid_hom.transfer MonoidHom.transfer
#align add_monoid_hom.transfer AddMonoidHom.transfer
+-/
variable (T : leftTransversals (H : Set G))
+#print MonoidHom.transfer_def /-
@[to_additive]
theorem transfer_def [FiniteIndex H] (g : G) : transfer ϕ g = diff ϕ T (g • T) := by
rw [transfer, ← diff_mul_diff, ← smul_diff_smul, mul_comm, diff_mul_diff] <;> rfl
#align monoid_hom.transfer_def MonoidHom.transfer_def
#align add_monoid_hom.transfer_def AddMonoidHom.transfer_def
+-/
+#print MonoidHom.transfer_eq_prod_quotient_orbitRel_zpowers_quot /-
/-- Explicit computation of the transfer homomorphism. -/
theorem transfer_eq_prod_quotient_orbitRel_zpowers_quot [FiniteIndex H] (g : G)
[Fintype (Quotient (orbitRel (zpowers g) (G ⧸ H)))] :
@@ -147,7 +162,9 @@ theorem transfer_eq_prod_quotient_orbitRel_zpowers_quot [FiniteIndex H] (g : G)
· simp only [if_neg hk, inv_mul_self]
exact map_one ϕ
#align monoid_hom.transfer_eq_prod_quotient_orbit_rel_zpowers_quot MonoidHom.transfer_eq_prod_quotient_orbitRel_zpowers_quot
+-/
+#print MonoidHom.transfer_eq_pow_aux /-
/-- Auxillary lemma in order to state `transfer_eq_pow`. -/
theorem transfer_eq_pow_aux (g : G)
(key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g₀⁻¹ * g ^ k * g₀ = g ^ k) :
@@ -169,7 +186,9 @@ theorem transfer_eq_pow_aux (g : G)
simpa only [minimal_period_eq_card, Finset.prod_pow_eq_pow_sum, Fintype.card_sigma,
Fintype.card_congr (self_equiv_sigma_orbits (zpowers g) (G ⧸ H)), index_eq_card] using key
#align monoid_hom.transfer_eq_pow_aux MonoidHom.transfer_eq_pow_aux
+-/
+#print MonoidHom.transfer_eq_pow /-
theorem transfer_eq_pow [FiniteIndex H] (g : G)
(key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g₀⁻¹ * g ^ k * g₀ = g ^ k) :
transfer ϕ g = ϕ ⟨g ^ H.index, transfer_eq_pow_aux g key⟩ := by
@@ -186,14 +205,18 @@ theorem transfer_eq_pow [FiniteIndex H] (g : G)
funext
apply key
#align monoid_hom.transfer_eq_pow MonoidHom.transfer_eq_pow
+-/
+#print MonoidHom.transfer_center_eq_pow /-
theorem transfer_center_eq_pow [FiniteIndex (center G)] (g : G) :
transfer (MonoidHom.id (center G)) g = ⟨g ^ (center G).index, (center G).pow_index_mem g⟩ :=
transfer_eq_pow (id (center G)) g fun k _ hk => by rw [← mul_right_inj, hk, mul_inv_cancel_right]
#align monoid_hom.transfer_center_eq_pow MonoidHom.transfer_center_eq_pow
+-/
variable (G)
+#print MonoidHom.transferCenterPow /-
/-- The transfer homomorphism `G →* center G`. -/
noncomputable def transferCenterPow [FiniteIndex (center G)] : G →* center G
where
@@ -201,21 +224,23 @@ noncomputable def transferCenterPow [FiniteIndex (center G)] : G →* center G
map_one' := Subtype.ext (one_pow (center G).index)
map_mul' a b := by simp_rw [← show ∀ g, (_ : center G) = _ from transfer_center_eq_pow, map_mul]
#align monoid_hom.transfer_center_pow MonoidHom.transferCenterPow
+-/
variable {G}
+#print MonoidHom.transferCenterPow_apply /-
@[simp]
theorem transferCenterPow_apply [FiniteIndex (center G)] (g : G) :
↑(transferCenterPow G g) = g ^ (center G).index :=
rfl
#align monoid_hom.transfer_center_pow_apply MonoidHom.transferCenterPow_apply
+-/
section BurnsideTransfer
variable {p : ℕ} (P : Sylow p G) (hP : (P : Subgroup G).normalizer ≤ (P : Subgroup G).centralizer)
-include hP
-
+#print MonoidHom.transferSylow /-
/-- The homomorphism `G →* P` in Burnside's transfer theorem. -/
noncomputable def transferSylow [FiniteIndex (P : Subgroup G)] : G →* (P : Subgroup G) :=
@transfer G _ P P
@@ -223,9 +248,11 @@ noncomputable def transferSylow [FiniteIndex (P : Subgroup G)] : G →* (P : Sub
⟨⟨fun a b => Subtype.ext (hP (le_normalizer b.2) a a.2)⟩⟩)
(MonoidHom.id P) _
#align monoid_hom.transfer_sylow MonoidHom.transferSylow
+-/
variable [Fact p.Prime] [Finite (Sylow p G)]
+#print MonoidHom.transfer_sylow_eq_pow_aux /-
/-- Auxillary lemma in order to state `transfer_sylow_eq_pow`. -/
theorem transfer_sylow_eq_pow_aux (g : G) (hg : g ∈ P) (k : ℕ) (g₀ : G)
(h : g₀⁻¹ * g ^ k * g₀ ∈ P) : g₀⁻¹ * g ^ k * g₀ = g ^ k :=
@@ -236,20 +263,26 @@ theorem transfer_sylow_eq_pow_aux (g : G) (hg : g ∈ P) (k : ℕ) (g₀ : G)
obtain ⟨n, hn, h⟩ := P.conj_eq_normalizer_conj_of_mem (g ^ k) g₀ hg h
exact h.trans (Commute.inv_mul_cancel (hP hn (g ^ k) hg).symm)
#align monoid_hom.transfer_sylow_eq_pow_aux MonoidHom.transfer_sylow_eq_pow_aux
+-/
variable [FiniteIndex (P : Subgroup G)]
+#print MonoidHom.transferSylow_eq_pow /-
theorem transferSylow_eq_pow (g : G) (hg : g ∈ P) :
transferSylow P hP g =
⟨g ^ (P : Subgroup G).index, transfer_eq_pow_aux g (transfer_sylow_eq_pow_aux P hP g hg)⟩ :=
by apply transfer_eq_pow
#align monoid_hom.transfer_sylow_eq_pow MonoidHom.transferSylow_eq_pow
+-/
+#print MonoidHom.transferSylow_restrict_eq_pow /-
theorem transferSylow_restrict_eq_pow :
⇑((transferSylow P hP).restrict (P : Subgroup G)) = (· ^ (P : Subgroup G).index) :=
funext fun g => transferSylow_eq_pow P hP g g.2
#align monoid_hom.transfer_sylow_restrict_eq_pow MonoidHom.transferSylow_restrict_eq_pow
+-/
+#print MonoidHom.ker_transferSylow_isComplement' /-
/-- Burnside's normal p-complement theorem: If `N(P) ≤ C(P)`, then `P` has a normal complement. -/
theorem ker_transferSylow_isComplement' : IsComplement' (transferSylow P hP).ker P :=
by
@@ -265,12 +298,16 @@ theorem ker_transferSylow_isComplement' : IsComplement' (transferSylow P hP).ker
ker_restrict, subgroup_of_map_subtype, Subgroup.map_bot, coe_top] at hf
exact is_complement'_of_disjoint_and_mul_eq_univ (disjoint_iff.2 hf.1) hf.2
#align monoid_hom.ker_transfer_sylow_is_complement' MonoidHom.ker_transferSylow_isComplement'
+-/
+#print MonoidHom.not_dvd_card_ker_transferSylow /-
theorem not_dvd_card_ker_transferSylow : ¬p ∣ Nat.card (transferSylow P hP).ker :=
(ker_transferSylow_isComplement' P hP).index_eq_card ▸ not_dvd_index_sylow P <|
mt index_eq_zero_of_relindex_eq_zero index_ne_zero_of_finite
#align monoid_hom.not_dvd_card_ker_transfer_sylow MonoidHom.not_dvd_card_ker_transferSylow
+-/
+#print MonoidHom.ker_transferSylow_disjoint /-
theorem ker_transferSylow_disjoint (Q : Subgroup G) (hQ : IsPGroup p Q) :
Disjoint (transferSylow P hP).ker Q :=
disjoint_iff.mpr <|
@@ -278,6 +315,7 @@ theorem ker_transferSylow_disjoint (Q : Subgroup G) (hQ : IsPGroup p Q) :
(hQ.to_le inf_le_right).card_eq_or_dvd.resolve_right fun h =>
not_dvd_card_ker_transferSylow P hP <| h.trans <| nat_card_dvd_of_le _ _ inf_le_left
#align monoid_hom.ker_transfer_sylow_disjoint MonoidHom.ker_transferSylow_disjoint
+-/
end BurnsideTransfer
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -140,7 +140,6 @@ theorem transfer_eq_prod_quotient_orbitRel_zpowers_quot [FiniteIndex H] (g : G)
_ = _ := ((quotient_equiv_sigma_zmod H g).symm.prod_comp _).symm
_ = _ := (Finset.prod_sigma _ _ _)
_ = _ := Fintype.prod_congr _ _ fun q => _
-
simp only [quotient_equiv_sigma_zmod_symm_apply, transfer_transversal_apply',
transfer_transversal_apply'']
rw [Fintype.prod_eq_single (0 : ZMod (Function.minimalPeriod ((· • ·) g) q.out')) fun k hk => _]
mathlib commit https://github.com/leanprover-community/mathlib/commit/58a272265b5e05f258161260dd2c5d247213cbd3
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Thomas Browning
! This file was ported from Lean 3 source module group_theory.transfer
-! leanprover-community/mathlib commit 56489b558d42c30f6aac5947cafc9a594f60813b
+! leanprover-community/mathlib commit 36938f775671ff28bea1c0310f1608e4afbb22e0
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -14,6 +14,9 @@ import Mathbin.GroupTheory.Sylow
/-!
# The Transfer Homomorphism
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
In this file we construct the transfer homomorphism.
## Main definitions
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -131,19 +131,19 @@ theorem transfer_eq_prod_quotient_orbitRel_zpowers_quot [FiniteIndex H] (g : G)
QuotientGroup.out'_conj_pow_minimalPeriod_mem H g q.out'⟩ :=
by
classical
- letI := H.fintype_quotient_of_finite_index
- calc
- transfer ϕ g = ∏ q : G ⧸ H, _ := transfer_def ϕ (transfer_transversal H g) g
- _ = _ := ((quotient_equiv_sigma_zmod H g).symm.prod_comp _).symm
- _ = _ := (Finset.prod_sigma _ _ _)
- _ = _ := Fintype.prod_congr _ _ fun q => _
-
- simp only [quotient_equiv_sigma_zmod_symm_apply, transfer_transversal_apply',
- transfer_transversal_apply'']
- rw [Fintype.prod_eq_single (0 : ZMod (Function.minimalPeriod ((· • ·) g) q.out')) fun k hk => _]
- · simp only [if_pos, ZMod.cast_zero, zpow_zero, one_mul, mul_assoc]
- · simp only [if_neg hk, inv_mul_self]
- exact map_one ϕ
+ letI := H.fintype_quotient_of_finite_index
+ calc
+ transfer ϕ g = ∏ q : G ⧸ H, _ := transfer_def ϕ (transfer_transversal H g) g
+ _ = _ := ((quotient_equiv_sigma_zmod H g).symm.prod_comp _).symm
+ _ = _ := (Finset.prod_sigma _ _ _)
+ _ = _ := Fintype.prod_congr _ _ fun q => _
+
+ simp only [quotient_equiv_sigma_zmod_symm_apply, transfer_transversal_apply',
+ transfer_transversal_apply'']
+ rw [Fintype.prod_eq_single (0 : ZMod (Function.minimalPeriod ((· • ·) g) q.out')) fun k hk => _]
+ · simp only [if_pos, ZMod.cast_zero, zpow_zero, one_mul, mul_assoc]
+ · simp only [if_neg hk, inv_mul_self]
+ exact map_one ϕ
#align monoid_hom.transfer_eq_prod_quotient_orbit_rel_zpowers_quot MonoidHom.transfer_eq_prod_quotient_orbitRel_zpowers_quot
/-- Auxillary lemma in order to state `transfer_eq_pow`. -/
@@ -155,35 +155,34 @@ theorem transfer_eq_pow_aux (g : G)
exact H.one_mem
letI := fintype_of_index_ne_zero hH
classical
- replace key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g ^ k ∈ H := fun k g₀ hk =>
- (_root_.congr_arg (· ∈ H) (key k g₀ hk)).mp hk
- replace key : ∀ q : G ⧸ H, g ^ Function.minimalPeriod ((· • ·) g) q ∈ H := fun q =>
- key (Function.minimalPeriod ((· • ·) g) q) q.out'
- (QuotientGroup.out'_conj_pow_minimalPeriod_mem H g q)
- let f : Quotient (orbit_rel (zpowers g) (G ⧸ H)) → zpowers g := fun q =>
- (⟨g, mem_zpowers g⟩ : zpowers g) ^ Function.minimalPeriod ((· • ·) g) q.out'
- have hf : ∀ q, f q ∈ H.subgroup_of (zpowers g) := fun q => key q.out'
- replace key :=
- Subgroup.prod_mem (H.subgroup_of (zpowers g)) fun q (hq : q ∈ Finset.univ) => hf q
- simpa only [minimal_period_eq_card, Finset.prod_pow_eq_pow_sum, Fintype.card_sigma,
- Fintype.card_congr (self_equiv_sigma_orbits (zpowers g) (G ⧸ H)), index_eq_card] using key
+ replace key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g ^ k ∈ H := fun k g₀ hk =>
+ (_root_.congr_arg (· ∈ H) (key k g₀ hk)).mp hk
+ replace key : ∀ q : G ⧸ H, g ^ Function.minimalPeriod ((· • ·) g) q ∈ H := fun q =>
+ key (Function.minimalPeriod ((· • ·) g) q) q.out'
+ (QuotientGroup.out'_conj_pow_minimalPeriod_mem H g q)
+ let f : Quotient (orbit_rel (zpowers g) (G ⧸ H)) → zpowers g := fun q =>
+ (⟨g, mem_zpowers g⟩ : zpowers g) ^ Function.minimalPeriod ((· • ·) g) q.out'
+ have hf : ∀ q, f q ∈ H.subgroup_of (zpowers g) := fun q => key q.out'
+ replace key := Subgroup.prod_mem (H.subgroup_of (zpowers g)) fun q (hq : q ∈ Finset.univ) => hf q
+ simpa only [minimal_period_eq_card, Finset.prod_pow_eq_pow_sum, Fintype.card_sigma,
+ Fintype.card_congr (self_equiv_sigma_orbits (zpowers g) (G ⧸ H)), index_eq_card] using key
#align monoid_hom.transfer_eq_pow_aux MonoidHom.transfer_eq_pow_aux
theorem transfer_eq_pow [FiniteIndex H] (g : G)
(key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g₀⁻¹ * g ^ k * g₀ = g ^ k) :
transfer ϕ g = ϕ ⟨g ^ H.index, transfer_eq_pow_aux g key⟩ := by
classical
- letI := H.fintype_quotient_of_finite_index
- change ∀ (k g₀) (hk : g₀⁻¹ * g ^ k * g₀ ∈ H), ↑(⟨g₀⁻¹ * g ^ k * g₀, hk⟩ : H) = g ^ k at key
- rw [transfer_eq_prod_quotient_orbit_rel_zpowers_quot, ← Finset.prod_to_list, List.prod_map_hom]
- refine' congr_arg ϕ (Subtype.coe_injective _)
- rw [H.coe_mk, ← (zpowers g).coe_mk g (mem_zpowers g), ← (zpowers g).coe_pow, (zpowers g).coe_mk,
- index_eq_card, Fintype.card_congr (self_equiv_sigma_orbits (zpowers g) (G ⧸ H)),
- Fintype.card_sigma, ← Finset.prod_pow_eq_pow_sum, ← Finset.prod_to_list]
- simp only [coe_list_prod, List.map_map, ← minimal_period_eq_card]
- congr 2
- funext
- apply key
+ letI := H.fintype_quotient_of_finite_index
+ change ∀ (k g₀) (hk : g₀⁻¹ * g ^ k * g₀ ∈ H), ↑(⟨g₀⁻¹ * g ^ k * g₀, hk⟩ : H) = g ^ k at key
+ rw [transfer_eq_prod_quotient_orbit_rel_zpowers_quot, ← Finset.prod_to_list, List.prod_map_hom]
+ refine' congr_arg ϕ (Subtype.coe_injective _)
+ rw [H.coe_mk, ← (zpowers g).coe_mk g (mem_zpowers g), ← (zpowers g).coe_pow, (zpowers g).coe_mk,
+ index_eq_card, Fintype.card_congr (self_equiv_sigma_orbits (zpowers g) (G ⧸ H)),
+ Fintype.card_sigma, ← Finset.prod_pow_eq_pow_sum, ← Finset.prod_to_list]
+ simp only [coe_list_prod, List.map_map, ← minimal_period_eq_card]
+ congr 2
+ funext
+ apply key
#align monoid_hom.transfer_eq_pow MonoidHom.transfer_eq_pow
theorem transfer_center_eq_pow [FiniteIndex (center G)] (g : G) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -174,7 +174,7 @@ theorem transfer_eq_pow [FiniteIndex H] (g : G)
transfer ϕ g = ϕ ⟨g ^ H.index, transfer_eq_pow_aux g key⟩ := by
classical
letI := H.fintype_quotient_of_finite_index
- change ∀ (k g₀) (hk : g₀⁻¹ * g ^ k * g₀ ∈ H), ↑(⟨g₀⁻¹ * g ^ k * g₀, hk⟩ : H) = g ^ k at key
+ change ∀ (k g₀) (hk : g₀⁻¹ * g ^ k * g₀ ∈ H), ↑(⟨g₀⁻¹ * g ^ k * g₀, hk⟩ : H) = g ^ k at key
rw [transfer_eq_prod_quotient_orbit_rel_zpowers_quot, ← Finset.prod_to_list, List.prod_map_hom]
refine' congr_arg ϕ (Subtype.coe_injective _)
rw [H.coe_mk, ← (zpowers g).coe_mk g (mem_zpowers g), ← (zpowers g).coe_pow, (zpowers g).coe_mk,
@@ -257,11 +257,11 @@ theorem ker_transferSylow_isComplement' : IsComplement' (transferSylow P hP).ker
(P.2.powEquiv'
(not_dvd_index_sylow P
(mt index_eq_zero_of_relindex_eq_zero index_ne_zero_of_finite))).Bijective
- rw [Function.Bijective, ← range_top_iff_surjective, restrict_range] at hf
+ rw [Function.Bijective, ← range_top_iff_surjective, restrict_range] at hf
have := range_top_iff_surjective.mp (top_le_iff.mp (hf.2.ge.trans (map_le_range _ P)))
rw [← (comap_injective this).eq_iff, comap_top, comap_map_eq, sup_comm, SetLike.ext'_iff,
normal_mul, ← ker_eq_bot_iff, ← (map_injective (P : Subgroup G).subtype_injective).eq_iff,
- ker_restrict, subgroup_of_map_subtype, Subgroup.map_bot, coe_top] at hf
+ ker_restrict, subgroup_of_map_subtype, Subgroup.map_bot, coe_top] at hf
exact is_complement'_of_disjoint_and_mul_eq_univ (disjoint_iff.2 hf.1) hf.2
#align monoid_hom.ker_transfer_sylow_is_complement' MonoidHom.ker_transferSylow_isComplement'
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -30,7 +30,7 @@ In this file we construct the transfer homomorphism.
-/
-open BigOperators
+open scoped BigOperators
variable {G : Type _} [Group G] {H : Subgroup G} {A : Type _} [CommGroup A] (ϕ : H →* A)
@@ -40,7 +40,7 @@ namespace LeftTransversals
open Finset MulAction
-open Pointwise
+open scoped Pointwise
variable (R S T : leftTransversals (H : Set G)) [FiniteIndex H]
mathlib commit https://github.com/leanprover-community/mathlib/commit/1a313d8bba1bad05faba71a4a4e9742ab5bd9efd
@@ -177,10 +177,9 @@ theorem transfer_eq_pow [FiniteIndex H] (g : G)
change ∀ (k g₀) (hk : g₀⁻¹ * g ^ k * g₀ ∈ H), ↑(⟨g₀⁻¹ * g ^ k * g₀, hk⟩ : H) = g ^ k at key
rw [transfer_eq_prod_quotient_orbit_rel_zpowers_quot, ← Finset.prod_to_list, List.prod_map_hom]
refine' congr_arg ϕ (Subtype.coe_injective _)
- rw [H.coe_mk, ← (zpowers g).coe_mk g (mem_zpowers g), ← (zpowers g).val_pow_eq_pow_val,
- (zpowers g).coe_mk, index_eq_card,
- Fintype.card_congr (self_equiv_sigma_orbits (zpowers g) (G ⧸ H)), Fintype.card_sigma, ←
- Finset.prod_pow_eq_pow_sum, ← Finset.prod_to_list]
+ rw [H.coe_mk, ← (zpowers g).coe_mk g (mem_zpowers g), ← (zpowers g).coe_pow, (zpowers g).coe_mk,
+ index_eq_card, Fintype.card_congr (self_equiv_sigma_orbits (zpowers g) (G ⧸ H)),
+ Fintype.card_sigma, ← Finset.prod_pow_eq_pow_sum, ← Finset.prod_to_list]
simp only [coe_list_prod, List.map_map, ← minimal_period_eq_card]
congr 2
funext
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -135,7 +135,7 @@ theorem transfer_eq_prod_quotient_orbitRel_zpowers_quot [FiniteIndex H] (g : G)
calc
transfer ϕ g = ∏ q : G ⧸ H, _ := transfer_def ϕ (transfer_transversal H g) g
_ = _ := ((quotient_equiv_sigma_zmod H g).symm.prod_comp _).symm
- _ = _ := Finset.prod_sigma _ _ _
+ _ = _ := (Finset.prod_sigma _ _ _)
_ = _ := Fintype.prod_congr _ _ fun q => _
simp only [quotient_equiv_sigma_zmod_symm_apply, transfer_transversal_apply',
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
This is a far from a complete success at the PR title, but it makes a fair bit of progress, and then guards this with appropriate assert_not_exists Ring
statements.
It also breaks apart the Mathlib.GroupTheory.Subsemigroup.[Center|Centralizer]
files, to pull the Set.center
and Set.centralizer
declarations into their own files not depending on Subsemigroup
.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>
@@ -5,6 +5,7 @@ Authors: Thomas Browning
-/
import Mathlib.GroupTheory.Complement
import Mathlib.GroupTheory.Sylow
+import Mathlib.GroupTheory.Subgroup.Center
#align_import group_theory.transfer from "leanprover-community/mathlib"@"4be589053caf347b899a494da75410deb55fb3ef"
@@ -100,7 +100,9 @@ the transfer homomorphism is `transfer ϕ : G →+ A`."]
noncomputable def transfer [FiniteIndex H] : G →* A :=
let T : leftTransversals (H : Set G) := Inhabited.default
{ toFun := fun g => diff ϕ T (g • T)
- map_one' := by simp only; rw [one_smul, diff_self] -- Porting note: added `simp only`
+ -- Porting note(#12129): additional beta reduction needed
+ map_one' := by beta_reduce; rw [one_smul, diff_self]
+ -- Porting note: added `simp only` (not just beta reduction)
map_mul' := fun g h => by simp only; rw [mul_smul, ← diff_mul_diff, smul_diff_smul] }
#align monoid_hom.transfer MonoidHom.transfer
#align add_monoid_hom.transfer AddMonoidHom.transfer
@@ -126,7 +126,7 @@ theorem transfer_eq_prod_quotient_orbitRel_zpowers_quot [FiniteIndex H] (g : G)
calc
transfer ϕ g = ∏ q : G ⧸ H, _ := transfer_def ϕ (transferTransversal H g) g
_ = _ := ((quotientEquivSigmaZMod H g).symm.prod_comp _).symm
- _ = _ := (Finset.prod_sigma _ _ _)
+ _ = _ := Finset.prod_sigma _ _ _
_ = _ := by
refine' Fintype.prod_congr _ _ (fun q => _)
simp only [quotientEquivSigmaZMod_symm_apply, transferTransversal_apply',
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -100,7 +100,7 @@ the transfer homomorphism is `transfer ϕ : G →+ A`."]
noncomputable def transfer [FiniteIndex H] : G →* A :=
let T : leftTransversals (H : Set G) := Inhabited.default
{ toFun := fun g => diff ϕ T (g • T)
- map_one' := by simp only; rw [one_smul, diff_self] -- porting note: added `simp only`
+ map_one' := by simp only; rw [one_smul, diff_self] -- Porting note: added `simp only`
map_mul' := fun g h => by simp only; rw [mul_smul, ← diff_mul_diff, smul_diff_smul] }
#align monoid_hom.transfer MonoidHom.transfer
#align add_monoid_hom.transfer AddMonoidHom.transfer
@@ -168,9 +168,9 @@ theorem transfer_eq_pow [FiniteIndex H] (g : G)
letI := H.fintypeQuotientOfFiniteIndex
change ∀ (k g₀) (hk : g₀⁻¹ * g ^ k * g₀ ∈ H), ↑(⟨g₀⁻¹ * g ^ k * g₀, hk⟩ : H) = g ^ k at key
rw [transfer_eq_prod_quotient_orbitRel_zpowers_quot, ← Finset.prod_to_list]
- refine' (List.prod_map_hom _ _ _).trans _ -- porting note: this used to be in the `rw`
+ refine' (List.prod_map_hom _ _ _).trans _ -- Porting note: this used to be in the `rw`
refine' congrArg ϕ (Subtype.coe_injective _)
- simp only -- porting note: added `simp only`
+ simp only -- Porting note: added `simp only`
rw [H.coe_mk, ← (zpowers g).coe_mk g (mem_zpowers g), ← (zpowers g).coe_pow,
index_eq_card, Fintype.card_congr (selfEquivSigmaOrbits (zpowers g) (G ⧸ H)),
Fintype.card_sigma, ← Finset.prod_pow_eq_pow_sum, ← Finset.prod_to_list]
@@ -234,7 +234,7 @@ theorem transferSylow_eq_pow (g : G) (hg : g ∈ P) :
⟨g ^ (P : Subgroup G).index, transfer_eq_pow_aux g (transferSylow_eq_pow_aux P hP g hg)⟩ :=
@transfer_eq_pow G _ P P (@Subgroup.IsCommutative.commGroup G _ P
⟨⟨fun a b => Subtype.ext (hP (le_normalizer b.2) a a.2)⟩⟩) _ _ g
- (transferSylow_eq_pow_aux P hP g hg) -- porting note: apply used to do this automatically
+ (transferSylow_eq_pow_aux P hP g hg) -- Porting note: apply used to do this automatically
#align monoid_hom.transfer_sylow_eq_pow MonoidHom.transferSylow_eq_pow
theorem transferSylow_restrict_eq_pow : ⇑((transferSylow P hP).restrict (P : Subgroup G)) =
@@ -157,7 +157,7 @@ theorem transfer_eq_pow_aux (g : G)
have hf : ∀ q, f q ∈ H.subgroupOf (zpowers g) := fun q => key q.out'
replace key :=
Subgroup.prod_mem (H.subgroupOf (zpowers g)) fun q (_ : q ∈ Finset.univ) => hf q
- simpa only [minimalPeriod_eq_card, Finset.prod_pow_eq_pow_sum, Fintype.card_sigma,
+ simpa only [f, minimalPeriod_eq_card, Finset.prod_pow_eq_pow_sum, Fintype.card_sigma,
Fintype.card_congr (selfEquivSigmaOrbits (zpowers g) (G ⧸ H)), index_eq_card] using key
#align monoid_hom.transfer_eq_pow_aux MonoidHom.transfer_eq_pow_aux
@@ -79,7 +79,7 @@ theorem diff_inv : (diff ϕ S T)⁻¹ = diff ϕ T S :=
@[to_additive]
theorem smul_diff_smul (g : G) : diff ϕ (g • S) (g • T) = diff ϕ S T :=
let _ := H.fintypeQuotientOfFiniteIndex
- Fintype.prod_equiv (MulAction.toPerm g).symm _ _ $ fun _ ↦ by
+ Fintype.prod_equiv (MulAction.toPerm g).symm _ _ fun _ ↦ by
simp only [smul_apply_eq_smul_apply_inv_smul, smul_eq_mul, mul_inv_rev, mul_assoc,
inv_mul_cancel_left, toPerm_symm_apply]
#align subgroup.left_transversals.smul_diff_smul Subgroup.leftTransversals.smul_diff_smul
Lemmas around this were a mess, throth in terms of names, statement and location. This PR standardises everything to be in Algebra.BigOperators.Basic
and changes the lemmas to take in InjOn
and SurjOn
assumptions where possible (and where impossible make sure the hypotheses are taken in the correct order) and moves the equality of functions hypothesis last.
Also add a few lemmas that help fix downstream uses by golfing.
From LeanAPAP and LeanCamCombi
@@ -79,14 +79,9 @@ theorem diff_inv : (diff ϕ S T)⁻¹ = diff ϕ T S :=
@[to_additive]
theorem smul_diff_smul (g : G) : diff ϕ (g • S) (g • T) = diff ϕ S T :=
let _ := H.fintypeQuotientOfFiniteIndex
- prod_bij' (fun q _ => g⁻¹ • q) (fun _ _ => mem_univ _)
- (fun _ _ =>
- congr_arg ϕ
- (by
- simp_rw [smul_apply_eq_smul_apply_inv_smul, smul_eq_mul, mul_inv_rev, mul_assoc,
- inv_mul_cancel_left]))
- (fun q _ => g • q) (fun _ _ => mem_univ _) (fun q _ => smul_inv_smul g q) fun q _ =>
- inv_smul_smul g q
+ Fintype.prod_equiv (MulAction.toPerm g).symm _ _ $ fun _ ↦ by
+ simp only [smul_apply_eq_smul_apply_inv_smul, smul_eq_mul, mul_inv_rev, mul_assoc,
+ inv_mul_cancel_left, toPerm_symm_apply]
#align subgroup.left_transversals.smul_diff_smul Subgroup.leftTransversals.smul_diff_smul
#align add_subgroup.left_transversals.vadd_diff_vadd AddSubgroup.leftTransversals.vadd_diff_vadd
(· op ·) a
by (a op ·)
(#8843)
I used the regex \(\(· (.) ·\) (.)\)
, replacing with ($2 $1 ·)
.
@@ -124,7 +124,7 @@ theorem transfer_eq_prod_quotient_orbitRel_zpowers_quot [FiniteIndex H] (g : G)
transfer ϕ g =
∏ q : Quotient (orbitRel (zpowers g) (G ⧸ H)),
ϕ
- ⟨q.out'.out'⁻¹ * g ^ Function.minimalPeriod ((· • ·) g) q.out' * q.out'.out',
+ ⟨q.out'.out'⁻¹ * g ^ Function.minimalPeriod (g • ·) q.out' * q.out'.out',
QuotientGroup.out'_conj_pow_minimalPeriod_mem H g q.out'⟩ := by
classical
letI := H.fintypeQuotientOfFiniteIndex
@@ -136,7 +136,7 @@ theorem transfer_eq_prod_quotient_orbitRel_zpowers_quot [FiniteIndex H] (g : G)
refine' Fintype.prod_congr _ _ (fun q => _)
simp only [quotientEquivSigmaZMod_symm_apply, transferTransversal_apply',
transferTransversal_apply'']
- rw [Fintype.prod_eq_single (0 : ZMod (Function.minimalPeriod ((· • ·) g) q.out')) _]
+ rw [Fintype.prod_eq_single (0 : ZMod (Function.minimalPeriod (g • ·) q.out')) _]
· simp only [if_pos, ZMod.cast_zero, zpow_zero, one_mul, mul_assoc]
· intro k hk
simp only [if_neg hk, inv_mul_self]
@@ -154,11 +154,11 @@ theorem transfer_eq_pow_aux (g : G)
classical
replace key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g ^ k ∈ H := fun k g₀ hk =>
(_root_.congr_arg (· ∈ H) (key k g₀ hk)).mp hk
- replace key : ∀ q : G ⧸ H, g ^ Function.minimalPeriod ((· • ·) g) q ∈ H := fun q =>
- key (Function.minimalPeriod ((· • ·) g) q) q.out'
+ replace key : ∀ q : G ⧸ H, g ^ Function.minimalPeriod (g • ·) q ∈ H := fun q =>
+ key (Function.minimalPeriod (g • ·) q) q.out'
(QuotientGroup.out'_conj_pow_minimalPeriod_mem H g q)
let f : Quotient (orbitRel (zpowers g) (G ⧸ H)) → zpowers g := fun q =>
- (⟨g, mem_zpowers g⟩ : zpowers g) ^ Function.minimalPeriod ((· • ·) g) q.out'
+ (⟨g, mem_zpowers g⟩ : zpowers g) ^ Function.minimalPeriod (g • ·) q.out'
have hf : ∀ q, f q ∈ H.subgroupOf (zpowers g) := fun q => key q.out'
replace key :=
Subgroup.prod_mem (H.subgroupOf (zpowers g)) fun q (_ : q ∈ Finset.univ) => hf q
@@ -247,7 +247,8 @@ theorem transferSylow_restrict_eq_pow : ⇑((transferSylow P hP).restrict (P : S
funext fun g => transferSylow_eq_pow P hP g g.2
#align monoid_hom.transfer_sylow_restrict_eq_pow MonoidHom.transferSylow_restrict_eq_pow
-/-- Burnside's normal p-complement theorem: If `N(P) ≤ C(P)`, then `P` has a normal complement. -/
+/-- **Burnside's normal p-complement theorem**: If `N(P) ≤ C(P)`, then `P` has a normal
+complement. -/
theorem ker_transferSylow_isComplement' : IsComplement' (transferSylow P hP).ker P := by
have hf : Function.Bijective ((transferSylow P hP).restrict (P : Subgroup G)) :=
(transferSylow_restrict_eq_pow P hP).symm ▸
@@ -187,7 +187,7 @@ theorem transfer_eq_pow [FiniteIndex H] (g : G)
theorem transfer_center_eq_pow [FiniteIndex (center G)] (g : G) :
transfer (MonoidHom.id (center G)) g = ⟨g ^ (center G).index, (center G).pow_index_mem g⟩ :=
- transfer_eq_pow (id (center G)) g fun k _ hk => by rw [← mul_right_inj, ←hk.comm,
+ transfer_eq_pow (id (center G)) g fun k _ hk => by rw [← mul_right_inj, ← hk.comm,
mul_inv_cancel_right]
#align monoid_hom.transfer_center_eq_pow MonoidHom.transfer_center_eq_pow
For a sensible theory, we require that the centre of an algebra is closed under multiplication. The definition currently in Mathlib works for associative algebras, but not non-associative algebras. This PR uses the definition from Cabrera García and Rodríguez Palacios, which works for any multiplication (addition) and which coincides with the current definition in the associative case.
I did consider whether the centralizer should also be re-defined in terms of operator commutation, but this still results in a centralizer which is not closed under multiplication in the non-associative case. I have therefore retained the current definition, but changed centralizer_eq_top_iff_subset
and centralizer_univ
to only work in the associative case.
Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Christopher Hoskin <mans0954@users.noreply.github.com> Co-authored-by: Christopher Hoskin <christopher.hoskin@overleaf.com>
@@ -187,7 +187,8 @@ theorem transfer_eq_pow [FiniteIndex H] (g : G)
theorem transfer_center_eq_pow [FiniteIndex (center G)] (g : G) :
transfer (MonoidHom.id (center G)) g = ⟨g ^ (center G).index, (center G).pow_index_mem g⟩ :=
- transfer_eq_pow (id (center G)) g fun k _ hk => by rw [← mul_right_inj, hk, mul_inv_cancel_right]
+ transfer_eq_pow (id (center G)) g fun k _ hk => by rw [← mul_right_inj, ←hk.comm,
+ mul_inv_cancel_right]
#align monoid_hom.transfer_center_eq_pow MonoidHom.transfer_center_eq_pow
variable (G)
@@ -242,7 +242,7 @@ theorem transferSylow_eq_pow (g : G) (hg : g ∈ P) :
#align monoid_hom.transfer_sylow_eq_pow MonoidHom.transferSylow_eq_pow
theorem transferSylow_restrict_eq_pow : ⇑((transferSylow P hP).restrict (P : Subgroup G)) =
- (fun x : P => x ^ (P : Subgroup G).index) :=
+ (fun x : P => x ^ (P : Subgroup G).index) :=
funext fun g => transferSylow_eq_pow P hP g g.2
#align monoid_hom.transfer_sylow_restrict_eq_pow MonoidHom.transferSylow_restrict_eq_pow
@@ -60,7 +60,7 @@ theorem diff_mul_diff : diff ϕ R S * diff ϕ S T = diff ϕ R T :=
(prod_congr rfl fun q _ =>
(ϕ.map_mul _ _).symm.trans
(congr_arg ϕ
- (by simp_rw [Subtype.ext_iff, coe_mul, coe_mk, mul_assoc, mul_inv_cancel_left])))
+ (by simp_rw [Subtype.ext_iff, coe_mul, mul_assoc, mul_inv_cancel_left])))
#align subgroup.left_transversals.diff_mul_diff Subgroup.leftTransversals.diff_mul_diff
#align add_subgroup.left_transversals.diff_add_diff AddSubgroup.leftTransversals.diff_add_diff
@@ -83,7 +83,7 @@ theorem smul_diff_smul (g : G) : diff ϕ (g • S) (g • T) = diff ϕ S T :=
(fun _ _ =>
congr_arg ϕ
(by
- simp_rw [coe_mk, smul_apply_eq_smul_apply_inv_smul, smul_eq_mul, mul_inv_rev, mul_assoc,
+ simp_rw [smul_apply_eq_smul_apply_inv_smul, smul_eq_mul, mul_inv_rev, mul_assoc,
inv_mul_cancel_left]))
(fun q _ => g • q) (fun _ _ => mem_univ _) (fun q _ => smul_inv_smul g q) fun q _ =>
inv_smul_smul g q
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -29,7 +29,7 @@ In this file we construct the transfer homomorphism.
open scoped BigOperators
-variable {G : Type _} [Group G] {H : Subgroup G} {A : Type _} [CommGroup A] (ϕ : H →* A)
+variable {G : Type*} [Group G] {H : Subgroup G} {A : Type*} [CommGroup A] (ϕ : H →* A)
namespace Subgroup
@@ -6,7 +6,7 @@ Authors: Thomas Browning
import Mathlib.GroupTheory.Complement
import Mathlib.GroupTheory.Sylow
-#align_import group_theory.transfer from "leanprover-community/mathlib"@"56489b558d42c30f6aac5947cafc9a594f60813b"
+#align_import group_theory.transfer from "leanprover-community/mathlib"@"4be589053caf347b899a494da75410deb55fb3ef"
/-!
# The Transfer Homomorphism
@@ -209,7 +209,7 @@ theorem transferCenterPow_apply [FiniteIndex (center G)] (g : G) :
section BurnsideTransfer
-variable {p : ℕ} (P : Sylow p G) (hP : (P : Subgroup G).normalizer ≤ (P : Subgroup G).centralizer)
+variable {p : ℕ} (P : Sylow p G) (hP : (P : Subgroup G).normalizer ≤ centralizer (P : Set G))
/-- The homomorphism `G →* P` in Burnside's transfer theorem. -/
noncomputable def transferSylow [FiniteIndex (P : Subgroup G)] : G →* (P : Subgroup G) :=
@@ -2,15 +2,12 @@
Copyright (c) 2022 Thomas Browning. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Thomas Browning
-
-! This file was ported from Lean 3 source module group_theory.transfer
-! leanprover-community/mathlib commit 56489b558d42c30f6aac5947cafc9a594f60813b
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.GroupTheory.Complement
import Mathlib.GroupTheory.Sylow
+#align_import group_theory.transfer from "leanprover-community/mathlib"@"56489b558d42c30f6aac5947cafc9a594f60813b"
+
/-!
# The Transfer Homomorphism
@@ -144,8 +144,7 @@ theorem transfer_eq_prod_quotient_orbitRel_zpowers_quot [FiniteIndex H] (g : G)
· intro k hk
simp only [if_neg hk, inv_mul_self]
exact map_one ϕ
-#align monoid_hom.transfer_eq_prod_quotient_orbit_rel_zpowers_quot
- MonoidHom.transfer_eq_prod_quotient_orbitRel_zpowers_quot
+#align monoid_hom.transfer_eq_prod_quotient_orbit_rel_zpowers_quot MonoidHom.transfer_eq_prod_quotient_orbitRel_zpowers_quot
/-- Auxiliary lemma in order to state `transfer_eq_pow`. -/
theorem transfer_eq_pow_aux (g : G)
@@ -20,12 +20,12 @@ In this file we construct the transfer homomorphism.
- `diff ϕ S T` : The difference of two left transversals `S` and `T` under the homomorphism `ϕ`.
- `transfer ϕ` : The transfer homomorphism induced by `ϕ`.
-- `transfer_center_pow`: The transfer homomorphism `G →* center G`.
+- `transferCenterPow`: The transfer homomorphism `G →* center G`.
## Main results
-- `transfer_center_pow_apply`:
+- `transferCenterPow_apply`:
The transfer homomorphism `G →* center G` is given by `g ↦ g ^ (center G).index`.
-- `ker_transfer_sylow_is_complement'`: Burnside's transfer (or normal `p`-complement) theorem:
+- `ker_transferSylow_isComplement'`: Burnside's transfer (or normal `p`-complement) theorem:
If `hP : N(P) ≤ C(P)`, then `(transfer P hP).ker` is a normal `p`-complement.
-/
@@ -225,24 +225,24 @@ noncomputable def transferSylow [FiniteIndex (P : Subgroup G)] : G →* (P : Sub
variable [Fact p.Prime] [Finite (Sylow p G)]
-/-- Auxiliary lemma in order to state `transfer_sylow_eq_pow`. -/
-theorem transfer_sylow_eq_pow_aux (g : G) (hg : g ∈ P) (k : ℕ) (g₀ : G)
+/-- Auxiliary lemma in order to state `transferSylow_eq_pow`. -/
+theorem transferSylow_eq_pow_aux (g : G) (hg : g ∈ P) (k : ℕ) (g₀ : G)
(h : g₀⁻¹ * g ^ k * g₀ ∈ P) : g₀⁻¹ * g ^ k * g₀ = g ^ k := by
haveI : (P : Subgroup G).IsCommutative :=
⟨⟨fun a b => Subtype.ext (hP (le_normalizer b.2) a a.2)⟩⟩
replace hg := (P : Subgroup G).pow_mem hg k
obtain ⟨n, hn, h⟩ := P.conj_eq_normalizer_conj_of_mem (g ^ k) g₀ hg h
exact h.trans (Commute.inv_mul_cancel (hP hn (g ^ k) hg).symm)
-#align monoid_hom.transfer_sylow_eq_pow_aux MonoidHom.transfer_sylow_eq_pow_aux
+#align monoid_hom.transfer_sylow_eq_pow_aux MonoidHom.transferSylow_eq_pow_aux
variable [FiniteIndex (P : Subgroup G)]
theorem transferSylow_eq_pow (g : G) (hg : g ∈ P) :
transferSylow P hP g =
- ⟨g ^ (P : Subgroup G).index, transfer_eq_pow_aux g (transfer_sylow_eq_pow_aux P hP g hg)⟩ :=
+ ⟨g ^ (P : Subgroup G).index, transfer_eq_pow_aux g (transferSylow_eq_pow_aux P hP g hg)⟩ :=
@transfer_eq_pow G _ P P (@Subgroup.IsCommutative.commGroup G _ P
⟨⟨fun a b => Subtype.ext (hP (le_normalizer b.2) a a.2)⟩⟩) _ _ g
- (transfer_sylow_eq_pow_aux P hP g hg) -- porting note: apply used to do this automatically
+ (transferSylow_eq_pow_aux P hP g hg) -- porting note: apply used to do this automatically
#align monoid_hom.transfer_sylow_eq_pow MonoidHom.transferSylow_eq_pow
theorem transferSylow_restrict_eq_pow : ⇑((transferSylow P hP).restrict (P : Subgroup G)) =
@@ -147,7 +147,7 @@ theorem transfer_eq_prod_quotient_orbitRel_zpowers_quot [FiniteIndex H] (g : G)
#align monoid_hom.transfer_eq_prod_quotient_orbit_rel_zpowers_quot
MonoidHom.transfer_eq_prod_quotient_orbitRel_zpowers_quot
-/-- Auxillary lemma in order to state `transfer_eq_pow`. -/
+/-- Auxiliary lemma in order to state `transfer_eq_pow`. -/
theorem transfer_eq_pow_aux (g : G)
(key : ∀ (k : ℕ) (g₀ : G), g₀⁻¹ * g ^ k * g₀ ∈ H → g₀⁻¹ * g ^ k * g₀ = g ^ k) :
g ^ H.index ∈ H := by
@@ -225,7 +225,7 @@ noncomputable def transferSylow [FiniteIndex (P : Subgroup G)] : G →* (P : Sub
variable [Fact p.Prime] [Finite (Sylow p G)]
-/-- Auxillary lemma in order to state `transfer_sylow_eq_pow`. -/
+/-- Auxiliary lemma in order to state `transfer_sylow_eq_pow`. -/
theorem transfer_sylow_eq_pow_aux (g : G) (hg : g ∈ P) (k : ℕ) (g₀ : G)
(h : g₀⁻¹ * g ^ k * g₀ ∈ P) : g₀⁻¹ * g ^ k * g₀ = g ^ k := by
haveI : (P : Subgroup G).IsCommutative :=
@@ -133,11 +133,11 @@ theorem transfer_eq_prod_quotient_orbitRel_zpowers_quot [FiniteIndex H] (g : G)
letI := H.fintypeQuotientOfFiniteIndex
calc
transfer ϕ g = ∏ q : G ⧸ H, _ := transfer_def ϕ (transferTransversal H g) g
- _ = _ := ((quotientEquivSigmaZmod H g).symm.prod_comp _).symm
+ _ = _ := ((quotientEquivSigmaZMod H g).symm.prod_comp _).symm
_ = _ := (Finset.prod_sigma _ _ _)
_ = _ := by
refine' Fintype.prod_congr _ _ (fun q => _)
- simp only [quotientEquivSigmaZmod_symm_apply, transferTransversal_apply',
+ simp only [quotientEquivSigmaZMod_symm_apply, transferTransversal_apply',
transferTransversal_apply'']
rw [Fintype.prod_eq_single (0 : ZMod (Function.minimalPeriod ((· • ·) g) q.out')) _]
· simp only [if_pos, ZMod.cast_zero, zpow_zero, one_mul, mul_assoc]
@@ -263,7 +263,7 @@ theorem ker_transferSylow_isComplement' : IsComplement' (transferSylow P hP).ker
rw [← (comap_injective this).eq_iff, comap_top, comap_map_eq, sup_comm, SetLike.ext'_iff,
normal_mul, ← ker_eq_bot_iff, ← (map_injective (P : Subgroup G).subtype_injective).eq_iff,
ker_restrict, subgroupOf_map_subtype, Subgroup.map_bot, coe_top] at hf
- exact IsComplement'_of_disjoint_and_mul_eq_univ (disjoint_iff.2 hf.1) hf.2
+ exact isComplement'_of_disjoint_and_mul_eq_univ (disjoint_iff.2 hf.1) hf.2
#align monoid_hom.ker_transfer_sylow_is_complement' MonoidHom.ker_transferSylow_isComplement'
theorem not_dvd_card_ker_transferSylow : ¬p ∣ Nat.card (transferSylow P hP).ker :=
The unported dependencies are