Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Merged by Bors] - feat(field_theory/finite): Chevalley–Warning #1564

Closed
wants to merge 81 commits into from
Closed
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
792cde8
Start on Chevalley-Warning
jcommelin Oct 16, 2019
74ff642
WIP
jcommelin Oct 16, 2019
804912a
WIP
jcommelin Oct 16, 2019
867eb00
Fix two sorries
jcommelin Oct 17, 2019
68bef93
Annoying stuff is left
jcommelin Oct 17, 2019
3cfe90e
Finish proof of Chevalley-Warning
jcommelin Oct 17, 2019
0f0b1b1
Fix build, and clean up
jcommelin Oct 17, 2019
6603845
Little change
jcommelin Oct 17, 2019
12a306c
Remove commented code
jcommelin Oct 17, 2019
b900b0b
Undo renaming
jcommelin Oct 17, 2019
60da8ea
Oops, forgot one
jcommelin Oct 17, 2019
95b3382
Reorganise files
jcommelin Oct 17, 2019
4f7e38a
Fix build
jcommelin Oct 17, 2019
8d5f72a
Merge branch 'master' into chev-warn
jcommelin Apr 25, 2020
d2944ee
Fix build
jcommelin Apr 25, 2020
ca43045
WIP
jcommelin Apr 25, 2020
7a1afbd
Fix build
jcommelin Apr 26, 2020
a9b7dcf
Implement some suggestions by Reid
jcommelin Apr 26, 2020
1ed8801
Remove field_theory/finite/
jcommelin Apr 26, 2020
be84c3d
Use fact
jcommelin Apr 26, 2020
2450959
Refactoring a bunch of proofs, and linting
jcommelin Apr 27, 2020
00c1756
Minor cleanups
jcommelin Apr 27, 2020
4e1c410
Refactor
jcommelin Apr 27, 2020
49de949
Prove a version of Chev-Warn for 1 polynomial
jcommelin Apr 27, 2020
8e8c871
Linting
jcommelin Apr 27, 2020
57dbc1a
Linting
jcommelin Apr 28, 2020
26c6a07
More refactoring
jcommelin Apr 28, 2020
a242ea1
Move things to proper place
jcommelin Apr 28, 2020
88a5f98
Remove some lemmas that are already there in greater generality
jcommelin Apr 28, 2020
3822558
fix build
jcommelin Apr 28, 2020
fa3dbd6
Minor tweak
jcommelin Apr 29, 2020
9b5d7b2
feat(*): small additions that prepare for Chevalley-Warning
jcommelin Apr 29, 2020
13821c0
Merge branch 'chev-warn-pre1' into chev-warn
jcommelin Apr 29, 2020
8b2cf7d
refactor proof
jcommelin Apr 29, 2020
d40e72f
More refactoring
jcommelin Apr 29, 2020
2fc68f8
Small change
jcommelin Apr 29, 2020
60f0110
More refactoring
jcommelin Apr 30, 2020
57e7847
don't use fintype.prod/sum
jcommelin Apr 30, 2020
f807947
Fix notation
jcommelin May 1, 2020
87c91cd
Merge branch 'master' into chev-warn
jcommelin May 1, 2020
910d679
Merge branch 'master' into chev-warn
jcommelin May 2, 2020
c78d943
refactor(field_theory): merge finite_card into finite
jcommelin May 2, 2020
ee590e2
Update src/field_theory/finite.lean
jcommelin May 2, 2020
5da96f0
Apply suggestions from code review
jcommelin May 3, 2020
b7c3111
Refactor proof
jcommelin May 4, 2020
1d1db80
Add docstring
jcommelin May 4, 2020
b84525f
Merge branch 'master' into finite-fields
jcommelin May 4, 2020
dceef1f
Use the fact that calc now refines
jcommelin May 4, 2020
3797267
Merge branch 'master' into finite-fields
jcommelin May 5, 2020
53c170e
WIP
jcommelin May 5, 2020
8bf853f
chore(field_theory/finite): meaningful variable names
jcommelin May 5, 2020
c81d602
refactor(field_theory): move finite_card.lean into finite.lean
jcommelin May 5, 2020
9734cc2
Ooops, forgot to actually delete the file
jcommelin May 5, 2020
4d24680
Merge branch 'finite-card' into finite-fields
jcommelin May 5, 2020
757475b
Merge branch 'master' into finite-fields
jcommelin May 6, 2020
234d57e
Merge branch 'master' into finite-fields
jcommelin May 13, 2020
e3792ec
Linting
jcommelin May 13, 2020
d34c69f
Slight golfing
jcommelin May 14, 2020
0816f6f
Merge branch 'finite-fields' into chev-warn
jcommelin May 14, 2020
12320ab
Merge branch 'master' into chev-warn
jcommelin May 18, 2020
dbcda17
Fix build
jcommelin May 18, 2020
15261ef
Undo open nat
jcommelin May 18, 2020
e49efc1
Minimise imports
jcommelin May 18, 2020
b46d997
Move code to correct place
jcommelin May 18, 2020
dbd5ce3
Restructure proof
jcommelin May 18, 2020
68e8f6a
Fix implicit/explicit variables and namespaces
jcommelin May 23, 2020
ca76a9b
Apply suggestions from code review
jcommelin May 23, 2020
7399607
Update src/field_theory/chevalley_warning.lean
jcommelin May 25, 2020
b394545
Process the easy comments
jcommelin May 25, 2020
3073980
Little fixes
jcommelin May 25, 2020
312fb08
Linting
jcommelin May 26, 2020
e23560b
Refactor an equiv
jcommelin May 26, 2020
6b47d22
Merge branch 'master' into chev-warn
jcommelin May 26, 2020
7946a32
Linting
jcommelin May 26, 2020
ff4a3fe
Remove deps on awkard instances
jcommelin May 27, 2020
b336013
Move files to correct place in mathlib
jcommelin May 27, 2020
8a79bb2
Merge branch 'community-master' into chev-warn
bryangingechen Jun 6, 2020
a423db5
Merge remote-tracking branch 'community/master' into chev-warn
bryangingechen Jun 6, 2020
02ec503
fix build
bryangingechen Jun 6, 2020
3e0d012
Merge branch 'community-master' into chev-warn
bryangingechen Jun 15, 2020
5fefb9c
fix build
bryangingechen Jun 15, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
15 changes: 15 additions & 0 deletions src/algebra/big_operators.lean
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,21 @@ begin
{ simp only [mem_image], rintro ⟨⟨_, hm⟩, _, rfl⟩, exact ha hm } }
end

lemma sum_mul_sum {ι₁ : Type*} {ι₂ : Type*} (s₁ : finset ι₁) (s₂ : finset ι₂)
(f₁ : ι₁ → β) (f₂ : ι₂ → β) :
s₁.sum f₁ * s₂.sum f₂ = (s₁.product s₂).sum (λ p, f₁ p.1 * f₂ p.2) :=
by { rw [sum_product, sum_mul, sum_congr rfl], intros, rw mul_sum }

@[move_cast]
lemma nat_cast_prod (f : α → ℕ) :
((s.prod f : ℕ) : β) = s.prod (λ i, (f i : β)) :=
(finset.prod_hom _).symm

@[move_cast]
lemma nat_cast_sum (f : α → ℕ) :
((s.sum f : ℕ) : β) = s.sum (λ i, (f i : β)) :=
(finset.sum_hom _).symm
jcommelin marked this conversation as resolved.
Show resolved Hide resolved

end comm_semiring

section integral_domain /- add integral_semi_domain to support nat and ennreal -/
Expand Down
14 changes: 14 additions & 0 deletions src/data/fintype.lean
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,20 @@ def of_subsingleton (a : α) [subsingleton α] : fintype α :=
lemma card_eq_sum_ones {α} [fintype α] : fintype.card α = (finset.univ : finset α).sum (λ _, 1) :=
finset.card_eq_sum_ones _

section
open_locale classical

@[to_additive]
lemma prod_extend_by_one [comm_monoid α] {ι} [fintype ι] (s : finset ι) (f : ι → α) :
jcommelin marked this conversation as resolved.
Show resolved Hide resolved
univ.prod (λ i, if i ∈ s then f i else 1) = s.prod f :=
begin
rw [← prod_sdiff (subset_univ s), prod_eq_one, one_mul, prod_congr rfl],
{ intros i hi, exact dif_pos hi },
{ intros i hi, rw mem_sdiff at hi, exact dif_neg hi.2 }
end

end

end fintype

lemma finset.card_univ [fintype α] : (finset.univ : finset α).card = fintype.card α :=
Expand Down
43 changes: 40 additions & 3 deletions src/data/mv_polynomial.lean
Original file line number Diff line number Diff line change
Expand Up @@ -380,6 +380,8 @@ def eval (f : σ → α) : mv_polynomial σ α → α := eval₂ id f

@[simp] lemma eval_zero : (0 : mv_polynomial σ α).eval f = 0 := eval₂_zero _ _

@[simp] lemma eval_one : (1 : mv_polynomial σ α).eval f = 1 := eval₂_one _ _

@[simp] lemma eval_add : (p + q).eval f = p.eval f + q.eval f := eval₂_add _ _

lemma eval_monomial : (monomial s a).eval f = a * s.prod (λn e, f n ^ e) :=
Expand All @@ -391,6 +393,8 @@ eval₂_monomial _ _

@[simp] lemma eval_mul : (p * q).eval f = p.eval f * q.eval f := eval₂_mul _ _

@[simp] lemma eval_pow (n:ℕ) : (p^n).eval f = (p.eval f)^n := eval₂_pow _ _

instance eval.is_semiring_hom : is_semiring_hom (eval f) :=
eval₂.is_semiring_hom _ _

Expand Down Expand Up @@ -621,7 +625,7 @@ begin
exact finset.sup_le (assume s hs, multiset.card_le_of_le $ finset.le_sup hs)
end

lemma total_degree_C (a : α) : (C a : mv_polynomial σ α).total_degree = 0 :=
@[simp] lemma total_degree_C (a : α) : (C a : mv_polynomial σ α).total_degree = 0 :=
nat.eq_zero_of_le_zero $ finset.sup_le $ assume n hn,
have _ := finsupp.support_single_subset hn,
begin
Expand All @@ -630,12 +634,20 @@ nat.eq_zero_of_le_zero $ finset.sup_le $ assume n hn,
exact le_refl _
end

lemma total_degree_zero : (0 : mv_polynomial σ α).total_degree = 0 :=
@[simp] lemma total_degree_zero : (0 : mv_polynomial σ α).total_degree = 0 :=
by rw [← C_0]; exact total_degree_C (0 : α)

lemma total_degree_one : (1 : mv_polynomial σ α).total_degree = 0 :=
@[simp] lemma total_degree_one : (1 : mv_polynomial σ α).total_degree = 0 :=
total_degree_C (1 : α)

@[simp] lemma total_degree_X {α} [nonzero_comm_ring α] (s : σ) :
(X s : mv_polynomial σ α).total_degree = 1 :=
begin
rw [total_degree, X, monomial, finsupp.support_single_ne_zero one_ne_zero],
simp only [finset.sup, sum_single_index, finset.insert_empty_eq_singleton,
finset.fold_singleton, lattice.sup_bot_eq],
end

lemma total_degree_add (a b : mv_polynomial σ α) :
(a + b).total_degree ≤ max a.total_degree b.total_degree :=
finset.sup_le $ assume n hn,
Expand All @@ -660,6 +672,17 @@ finset.sup_le $ assume n hn,
{ assume a b₁ b₂, refl }
end

lemma total_degree_pow (a : mv_polynomial σ α) (n : ℕ) :
(a^n).total_degree ≤ n * a.total_degree :=
begin
induction n with n ih,
{ simp only [nat.nat_zero_eq_zero, zero_mul, pow_zero, total_degree_one] },
rw pow_succ,
calc total_degree (a * a ^ n) ≤ a.total_degree + (a^n).total_degree : total_degree_mul _ _
... ≤ a.total_degree + n * a.total_degree : add_le_add_left ih _
... = (n+1) * a.total_degree : by rw [add_mul, one_mul, add_comm]
end

lemma total_degree_list_prod :
∀(s : list (mv_polynomial σ α)), s.prod.total_degree ≤ (s.map mv_polynomial.total_degree).sum
| [] := by rw [@list.prod_nil (mv_polynomial σ α) _, total_degree_one]; refl
Expand Down Expand Up @@ -811,6 +834,20 @@ lemma map_sub : (p - q).map f = p.map f - q.map f := is_ring_hom.map_sub _

end map

section total_degree

@[simp] lemma total_degree_neg (a : mv_polynomial σ α) :
(-a).total_degree = a.total_degree :=
by simp only [total_degree, finsupp.support_neg]

lemma total_degree_sub (a b : mv_polynomial σ α) :
(a - b).total_degree ≤ max a.total_degree b.total_degree :=
calc (a - b).total_degree = (a + -b).total_degree : by rw sub_eq_add_neg
... ≤ max a.total_degree (-b).total_degree : total_degree_add a (-b)
... = max a.total_degree b.total_degree : by rw total_degree_neg

end total_degree

end comm_ring

section rename
Expand Down
87 changes: 0 additions & 87 deletions src/field_theory/finite.lean

This file was deleted.