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

Commit 1c2ddbc

Browse files
committed
feat(field_theory/fixed): dimension over fixed field is order of group (#4125)
```lean theorem dim_fixed_points (G : Type u) (F : Type v) [group G] [field F] [fintype G] [faithful_mul_semiring_action G F] : findim (fixed_points G F) F = fintype.card G ````
1 parent b1e5a6b commit 1c2ddbc

File tree

12 files changed

+426
-74
lines changed

12 files changed

+426
-74
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/-
2+
Copyright (c) 2020 Kenny Lau. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Kenny Lau
5+
-/
6+
7+
import algebra.big_operators.pi
8+
import data.finsupp
9+
10+
/-!
11+
# Big operators for finsupps
12+
13+
This file contains theorems relevant to big operators in finitely supported functions.
14+
-/
15+
16+
universes u v w u₁ v₁ w₁
17+
18+
open_locale big_operators
19+
20+
variables {α : Type u} {ι : Type v} {β : Type w} [add_comm_monoid β]
21+
variables {s : finset α} {f : α → (ι →₀ β)} (i : ι)
22+
23+
theorem finset.sum_apply' : (∑ k in s, f k) i = ∑ k in s, f k i :=
24+
(s.sum_hom $ finsupp.eval_add_hom i).symm
25+
26+
variables {γ : Type u₁} {δ : Type v₁} [add_comm_monoid δ]
27+
variables (g : ι →₀ β) (k : ι → β → γ → δ) (x : γ)
28+
29+
theorem finsupp.sum_apply' : g.sum k x = g.sum (λ i b, k i b x) :=
30+
finset.sum_apply _ _ _
31+
32+
variables {ε : Type w₁} [add_comm_monoid ε]
33+
variables {t : ι → β → ε} (h0 : ∀ i, t i 0 = 0) (h1 : ∀ i x y, t i (x + y) = t i x + t i y)
34+
include h0 h1
35+
36+
open_locale classical
37+
38+
theorem finsupp.sum_sum_index' : (∑ x in s, f x).sum t = ∑ x in s, (f x).sum t :=
39+
finset.induction_on s rfl $ λ a s has ih,
40+
by simp_rw [finset.sum_insert has, finsupp.sum_add_index h0 h1, ih]

src/algebra/group_ring_action.lean

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ class mul_semiring_action (M : Type u) [monoid M] (R : Type v) [semiring R]
3838

3939
export mul_semiring_action (smul_one)
4040

41+
/-- Typeclass for faithful multiplicative actions by monoids on semirings. -/
42+
class faithful_mul_semiring_action (M : Type u) [monoid M] (R : Type v) [semiring R]
43+
extends mul_semiring_action M R :=
44+
(eq_of_smul_eq_smul' : ∀ {m₁ m₂ : M}, (∀ r : R, m₁ • r = m₂ • r) → m₁ = m₂)
45+
4146
section semiring
4247

4348
variables (M G : Type u) [monoid M] [group G]
@@ -48,6 +53,11 @@ lemma smul_mul' [mul_semiring_action M R] (g : M) (x y : R) :
4853
g • (x * y) = (g • x) * (g • y) :=
4954
mul_semiring_action.smul_mul g x y
5055

56+
variables {M} (R)
57+
theorem eq_of_smul_eq_smul [faithful_mul_semiring_action M R] {m₁ m₂ : M} :
58+
(∀ r : R, m₁ • r = m₂ • r) → m₁ = m₂ :=
59+
faithful_mul_semiring_action.eq_of_smul_eq_smul'
60+
5161
variables (M R)
5262

5363
/-- Each element of the monoid defines a additive monoid homomorphism. -/
@@ -73,6 +83,10 @@ def mul_semiring_action.to_semiring_hom [mul_semiring_action M R] (x : M) : R
7383
map_mul' := smul_mul' x,
7484
.. distrib_mul_action.to_add_monoid_hom M R x }
7585

86+
theorem injective_to_semiring_hom [faithful_mul_semiring_action M R] :
87+
function.injective (mul_semiring_action.to_semiring_hom M R) :=
88+
λ m₁ m₂ h, eq_of_smul_eq_smul R $ λ r, ring_hom.ext_iff.1 h r
89+
7690
/-- Each element of the group defines a semiring isomorphism. -/
7791
def mul_semiring_action.to_semiring_equiv [mul_semiring_action G R] (x : G) : R ≃+* R :=
7892
{ .. distrib_mul_action.to_add_equiv G R x,
@@ -110,9 +124,7 @@ end simp_lemmas
110124

111125
namespace polynomial
112126

113-
variables [mul_semiring_action M S]
114-
115-
noncomputable instance : mul_semiring_action M (polynomial S) :=
127+
noncomputable instance [mul_semiring_action M S] : mul_semiring_action M (polynomial S) :=
116128
{ smul := λ m, map $ mul_semiring_action.to_semiring_hom M S m,
117129
one_smul := λ p, by { ext n, erw coeff_map, exact one_smul M (p.coeff n) },
118130
mul_smul := λ m n p, by { ext i,
@@ -123,6 +135,17 @@ noncomputable instance : mul_semiring_action M (polynomial S) :=
123135
smul_one := λ m, map_one (mul_semiring_action.to_semiring_hom M S m),
124136
smul_mul := λ m p q, map_mul (mul_semiring_action.to_semiring_hom M S m), }
125137

138+
noncomputable instance [faithful_mul_semiring_action M S] :
139+
faithful_mul_semiring_action M (polynomial S) :=
140+
{ eq_of_smul_eq_smul' := λ m₁ m₂ h, eq_of_smul_eq_smul S $ λ s, C_inj.1 $
141+
calc C (m₁ • s)
142+
= m₁ • C s : (map_C $ mul_semiring_action.to_semiring_hom M S m₁).symm
143+
... = m₂ • C s : h (C s)
144+
... = C (m₂ • s) : map_C _,
145+
.. polynomial.mul_semiring_action M S }
146+
147+
variables [mul_semiring_action M S]
148+
126149
@[simp] lemma coeff_smul' (m : M) (p : polynomial S) (n : ℕ) :
127150
(m • p).coeff n = m • p.coeff n :=
128151
coeff_map _ _

src/data/set/function.lean

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,18 @@ theorem eq_on.inj_on_iff (H : eq_on f₁ f₂ s) : inj_on f₁ s ↔ inj_on f₂
187187
theorem inj_on.mono (h : s₁ ⊆ s₂) (ht : inj_on f s₂) : inj_on f s₁ :=
188188
λ x hx y hy H, ht (h hx) (h hy) H
189189

190+
theorem inj_on_insert {f : α → β} {s : set α} {a : α} (has : a ∉ s) :
191+
set.inj_on f (insert a s) ↔ set.inj_on f s ∧ f a ∉ f '' s :=
192+
⟨λ hf, ⟨hf.mono $ subset_insert a s,
193+
λ ⟨x, hxs, hx⟩, has $ mem_of_eq_of_mem (hf (or.inl rfl) (or.inr hxs) hx.symm) hxs⟩,
194+
λ ⟨h1, h2⟩ x hx y hy hfxy, or.cases_on hx
195+
(λ hxa : x = a, or.cases_on hy
196+
(λ hya : y = a, hxa.trans hya.symm)
197+
(λ hys : y ∈ s, h2.elim ⟨y, hys, hxa ▸ hfxy.symm⟩))
198+
(λ hxs : x ∈ s, or.cases_on hy
199+
(λ hya : y = a, h2.elim ⟨x, hxs, hya ▸ hfxy⟩)
200+
(λ hys : y ∈ s, h1 hxs hys hfxy))⟩
201+
190202
lemma injective_iff_inj_on_univ : injective f ↔ inj_on f univ :=
191203
⟨λ h x hx y hy hxy, h hxy, λ h _ _ heq, h trivial trivial heq⟩
192204

0 commit comments

Comments
 (0)