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

Commit fd2c6c4

Browse files
committed
chore(data/polynomial/ring_division): remove nontrivial assumptions (#12984)
Additionally, this removes: * some `polynomial.monic` assumptions that can be handled by casing instead * the explicit `R` argument from `is_field.to_field R hR`
1 parent c0421e7 commit fd2c6c4

File tree

14 files changed

+76
-56
lines changed

14 files changed

+76
-56
lines changed

src/algebra/field/basic.lean

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,10 +243,16 @@ lemma field.to_is_field (R : Type u) [field R] : is_field R :=
243243
{ mul_inv_cancel := λ a ha, ⟨a⁻¹, field.mul_inv_cancel ha⟩,
244244
..‹field R› }
245245

246+
@[simp] lemma is_field.nontrivial {R : Type u} [ring R] (h : is_field R) : nontrivial R :=
247+
⟨h.exists_pair_ne⟩
248+
249+
@[simp] lemma not_is_field_of_subsingleton (R : Type u) [ring R] [subsingleton R] : ¬is_field R :=
250+
λ h, let ⟨x, y, h⟩ := h.exists_pair_ne in h (subsingleton.elim _ _)
251+
246252
open_locale classical
247253

248254
/-- Transferring from is_field to field -/
249-
noncomputable def is_field.to_field (R : Type u) [ring R] (h : is_field R) : field R :=
255+
noncomputable def is_field.to_field {R : Type u} [ring R] (h : is_field R) : field R :=
250256
{ inv := λ a, if ha : a = 0 then 0 else classical.some (is_field.mul_inv_cancel h ha),
251257
inv_zero := dif_pos rfl,
252258
mul_inv_cancel := λ a ha,

src/algebraic_geometry/prime_spectrum/basic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,7 @@ begin
417417
(is_closed_singleton_iff_is_maximal _).1 (t1_space.t1 ⟨⊥, hbot⟩)) (not_not.2 rfl)) },
418418
{ refine ⟨λ x, (is_closed_singleton_iff_is_maximal x).2 _⟩,
419419
by_cases hx : x.as_ideal = ⊥,
420-
{ exact hx.symm ▸ @ideal.bot_is_maximal R (@field.to_division_ring _ $ is_field.to_field R h) },
420+
{ exact hx.symm ▸ @ideal.bot_is_maximal R (@field.to_division_ring _ h.to_field) },
421421
{ exact absurd h (ring.not_is_field_iff_exists_prime.2 ⟨x.as_ideal, ⟨hx, x.2⟩⟩) } }
422422
end
423423

src/data/polynomial/basic.lean

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -397,8 +397,8 @@ lemma coeff_C_ne_zero (h : n ≠ 0) : (C a).coeff n = 0 :=
397397
by rw [coeff_C, if_neg h]
398398

399399
theorem nontrivial.of_polynomial_ne (h : p ≠ q) : nontrivial R :=
400-
⟨⟨0, 1, λ h01 : 0 = 1, h $
401-
by rw [← mul_one p, ← mul_one q, ← C_1, ← h01, C_0, mul_zero, mul_zero] ⟩⟩
400+
nontrivial_of_ne 0 1 $ λ h01, h $
401+
by rw [← mul_one p, ← mul_one q, ← C_1, ← h01, C_0, mul_zero, mul_zero]
402402

403403
lemma monomial_eq_C_mul_X : ∀{n}, monomial n a = C a * X^n
404404
| 0 := (mul_one _).symm
@@ -710,6 +710,10 @@ mt (congr_arg (λ p, coeff p 1)) (by simp)
710710

711711
end nonzero_semiring
712712

713+
@[simp] lemma nontrivial_iff [semiring R] : nontrivial R[X] ↔ nontrivial R :=
714+
⟨λ h, let ⟨r, s, hrs⟩ := @exists_pair_ne _ h in nontrivial.of_polynomial_ne hrs,
715+
λ h, @polynomial.nontrivial _ _ h⟩
716+
713717
section repr
714718
variables [semiring R]
715719
open_locale classical

src/data/polynomial/div.lean

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ variables [comm_semiring R] {p q : R[X]}
3939

4040
lemma multiplicity_finite_of_degree_pos_of_monic (hp : (0 : with_bot ℕ) < degree p)
4141
(hmp : monic p) (hq : q ≠ 0) : multiplicity.finite p q :=
42-
have zn0 : (0 : R) ≠ 1, from λ h, by haveI := subsingleton_of_zero_eq_one h;
43-
exact hq (subsingleton.elim _ _),
42+
have zn0 : (0 : R) ≠ 1, by haveI := nontrivial.of_polynomial_ne hq; exact zero_ne_one,
4443
⟨nat_degree q, λ ⟨r, hr⟩,
4544
have hp0 : p ≠ 0, from λ hp0, by simp [hp0] at hp; contradiction,
4645
have hr0 : r ≠ 0, from λ hr0, by simp * at *,
@@ -405,17 +404,20 @@ begin
405404
... = p.sum f : p.sum_def _
406405
end
407406

408-
lemma sum_mod_by_monic_coeff [nontrivial R] (hq : q.monic)
409-
{n : ℕ} (hn : q.degree ≤ n) :
407+
lemma sum_mod_by_monic_coeff (hq : q.monic) {n : ℕ} (hn : q.degree ≤ n) :
410408
∑ (i : fin n), monomial i ((p %ₘ q).coeff i) = p %ₘ q :=
411-
(sum_fin (λ i c, monomial i c) (by simp)
412-
((degree_mod_by_monic_lt _ hq).trans_le hn)).trans
413-
(sum_monomial_eq _)
409+
begin
410+
nontriviality R,
411+
exact (sum_fin (λ i c, monomial i c) (by simp)
412+
((degree_mod_by_monic_lt _ hq).trans_le hn)).trans
413+
(sum_monomial_eq _)
414+
end
414415

415416
variable (R)
416417

417-
lemma not_is_field [nontrivial R] : ¬ is_field R[X] :=
418+
lemma not_is_field : ¬ is_field R[X] :=
418419
begin
420+
nontriviality R,
419421
rw ring.not_is_field_iff_exists_ideal_bot_lt_and_lt_top,
420422
use ideal.span {polynomial.X},
421423
split,
@@ -440,11 +442,13 @@ open_locale classical
440442

441443
lemma multiplicity_X_sub_C_finite (a : R) (h0 : p ≠ 0) :
442444
multiplicity.finite (X - C a) p :=
443-
multiplicity_finite_of_degree_pos_of_monic
444-
(have (0 : R) ≠ 1, from (λ h, by haveI := subsingleton_of_zero_eq_one h;
445-
exact h0 (subsingleton.elim _ _)),
446-
by haveI : nontrivial R := ⟨⟨0, 1, this⟩⟩; rw degree_X_sub_C; exact dec_trivial)
447-
(monic_X_sub_C _) h0
445+
begin
446+
haveI := nontrivial.of_polynomial_ne h0,
447+
refine multiplicity_finite_of_degree_pos_of_monic _ (monic_X_sub_C _) h0,
448+
rw degree_X_sub_C,
449+
dec_trivial,
450+
end
451+
448452
/-- The largest power of `X - C a` which divides `p`.
449453
This is computable via the divisibility algorithm `decidable_dvd_monic`. -/
450454
def root_multiplicity (a : R) (p : R[X]) : ℕ :=

src/data/polynomial/ring_division.lean

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -43,39 +43,45 @@ lemma aeval_mod_by_monic_eq_self_of_root [algebra R S]
4343
aeval x (p %ₘ q) = aeval x p :=
4444
eval₂_mod_by_monic_eq_self_of_root hq hx
4545

46-
lemma mod_by_monic_eq_of_dvd_sub [nontrivial R] (hq : q.monic) {p₁ p₂ : R[X]}
46+
lemma mod_by_monic_eq_of_dvd_sub (hq : q.monic) {p₁ p₂ : R[X]}
4747
(h : q ∣ (p₁ - p₂)) :
4848
p₁ %ₘ q = p₂ %ₘ q :=
4949
begin
50+
nontriviality R,
5051
obtain ⟨f, sub_eq⟩ := h,
5152
refine (div_mod_by_monic_unique (p₂ /ₘ q + f) _ hq
5253
⟨_, degree_mod_by_monic_lt _ hq⟩).2,
5354
rw [sub_eq_iff_eq_add.mp sub_eq, mul_add, ← add_assoc, mod_by_monic_add_div _ hq, add_comm]
5455
end
5556

56-
lemma add_mod_by_monic [nontrivial R] (hq : q.monic)
57-
(p₁ p₂ : R[X]) : (p₁ + p₂) %ₘ q = p₁ %ₘ q + p₂ %ₘ q :=
58-
(div_mod_by_monic_unique (p₁ /ₘ q + p₂ /ₘ q) _ hq
59-
by rw [mul_add, add_left_comm, add_assoc, mod_by_monic_add_div _ hq, ← add_assoc,
60-
add_comm (q * _), mod_by_monic_add_div _ hq],
61-
(degree_add_le _ _).trans_lt (max_lt (degree_mod_by_monic_lt _ hq)
62-
(degree_mod_by_monic_lt _ hq))⟩).2
57+
lemma add_mod_by_monic (p₁ p₂ : R[X]) : (p₁ + p₂) %ₘ q = p₁ %ₘ q + p₂ %ₘ q :=
58+
begin
59+
by_cases hq : q.monic,
60+
{ nontriviality R,
61+
exact (div_mod_by_monic_unique (p₁ /ₘ q + p₂ /ₘ q) _ hq
62+
by rw [mul_add, add_left_comm, add_assoc, mod_by_monic_add_div _ hq, ← add_assoc,
63+
add_comm (q * _), mod_by_monic_add_div _ hq],
64+
(degree_add_le _ _).trans_lt (max_lt (degree_mod_by_monic_lt _ hq)
65+
(degree_mod_by_monic_lt _ hq))⟩).2 },
66+
{ simp_rw mod_by_monic_eq_of_not_monic _ hq }
67+
end
6368

64-
lemma smul_mod_by_monic [nontrivial R] (hq : q.monic)
65-
(c : R) (p : R[X]) : (c • p) %ₘ q = c • (p %ₘ q) :=
66-
(div_mod_by_monic_unique (c • (p /ₘ q)) (c • (p %ₘ q)) hq
67-
by rw [mul_smul_comm, ← smul_add, mod_by_monic_add_div p hq],
68-
(degree_smul_le _ _).trans_lt (degree_mod_by_monic_lt _ hq)⟩).2
69+
lemma smul_mod_by_monic (c : R) (p : R[X]) : (c • p) %ₘ q = c • (p %ₘ q) :=
70+
begin
71+
by_cases hq : q.monic,
72+
{ nontriviality R,
73+
exact (div_mod_by_monic_unique (c • (p /ₘ q)) (c • (p %ₘ q)) hq
74+
by rw [mul_smul_comm, ← smul_add, mod_by_monic_add_div p hq],
75+
(degree_smul_le _ _).trans_lt (degree_mod_by_monic_lt _ hq)⟩).2 },
76+
{ simp_rw mod_by_monic_eq_of_not_monic _ hq }
77+
end
6978

70-
/--
71-
`polynomial.mod_by_monic_hom (hq : monic (q : R[X]))` is `_ %ₘ q` as a `R`-linear map.
72-
-/
79+
/-- `_ %ₘ q` as an `R`-linear map. -/
7380
@[simps]
74-
def mod_by_monic_hom [nontrivial R] (hq : q.monic) :
75-
R[X] →ₗ[R] R[X] :=
81+
def mod_by_monic_hom (q : R[X]) : R[X] →ₗ[R] R[X] :=
7682
{ to_fun := λ p, p %ₘ q,
77-
map_add' := add_mod_by_monic hq,
78-
map_smul' := smul_mod_by_monic hq }
83+
map_add' := add_mod_by_monic,
84+
map_smul' := smul_mod_by_monic }
7985

8086
end comm_ring
8187

src/field_theory/cardinality.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ end
5555

5656
lemma fintype.not_is_field_of_card_not_prime_pow {α} [fintype α] [ring α] :
5757
¬ is_prime_pow (‖α‖) → ¬ is_field α :=
58-
mt $ λ h, fintype.nonempty_field_iff.mp ⟨h.to_field α
58+
mt $ λ h, fintype.nonempty_field_iff.mp ⟨h.to_field⟩
5959

6060
/-- Any infinite type can be endowed a field structure. -/
6161
lemma infinite.nonempty_field {α : Type u} [infinite α] : nonempty (field α) :=

src/field_theory/is_alg_closed/basic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ begin
265265
intros x _,
266266
let p := minpoly K x,
267267
let N : subalgebra K L := (maximal_subfield_with_hom M hL).carrier,
268-
letI : field N := is_field.to_field _ (subalgebra.is_field_of_algebraic N hL),
268+
letI : field N := (subalgebra.is_field_of_algebraic N hL).to_field,
269269
letI : algebra N M := (maximal_subfield_with_hom M hL).emb.to_ring_hom.to_algebra,
270270
cases is_alg_closed.exists_aeval_eq_zero M (minpoly N x)
271271
(ne_of_gt (minpoly.degree_pos

src/ring_theory/adjoin_root.lean

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -227,31 +227,31 @@ lemma is_integral_root' (hg : g.monic) : is_integral R (root g) :=
227227
/-- `adjoin_root.mod_by_monic_hom` sends the equivalence class of `f` mod `g` to `f %ₘ g`.
228228
229229
This is a well-defined right inverse to `adjoin_root.mk`, see `adjoin_root.mk_left_inverse`. -/
230-
def mod_by_monic_hom [nontrivial R] (hg : g.monic) :
230+
def mod_by_monic_hom (hg : g.monic) :
231231
adjoin_root g →ₗ[R] R[X] :=
232-
(submodule.liftq _ (polynomial.mod_by_monic_hom hg)
232+
(submodule.liftq _ (polynomial.mod_by_monic_hom g)
233233
(λ f (hf : f ∈ (ideal.span {g}).restrict_scalars R),
234234
(mem_ker_mod_by_monic hg).mpr (ideal.mem_span_singleton.mp hf))).comp $
235235
(submodule.quotient.restrict_scalars_equiv R (ideal.span {g} : ideal R[X]))
236236
.symm.to_linear_map
237237

238-
@[simp] lemma mod_by_monic_hom_mk [nontrivial R] (hg : g.monic) (f : R[X]) :
238+
@[simp] lemma mod_by_monic_hom_mk (hg : g.monic) (f : R[X]) :
239239
mod_by_monic_hom hg (mk g f) = f %ₘ g := rfl
240240

241-
lemma mk_left_inverse [nontrivial R] (hg : g.monic) :
241+
lemma mk_left_inverse (hg : g.monic) :
242242
function.left_inverse (mk g) (mod_by_monic_hom hg) :=
243243
λ f, induction_on g f $ λ f, begin
244244
rw [mod_by_monic_hom_mk hg, mk_eq_mk, mod_by_monic_eq_sub_mul_div _ hg,
245245
sub_sub_cancel_left, dvd_neg],
246246
apply dvd_mul_right
247247
end
248248

249-
lemma mk_surjective [nontrivial R] (hg : g.monic) : function.surjective (mk g) :=
249+
lemma mk_surjective (hg : g.monic) : function.surjective (mk g) :=
250250
(mk_left_inverse hg).surjective
251251

252252
/-- The elements `1, root g, ..., root g ^ (d - 1)` form a basis for `adjoin_root g`,
253253
where `g` is a monic polynomial of degree `d`. -/
254-
@[simps] def power_basis_aux' [nontrivial R] (hg : g.monic) :
254+
@[simps] def power_basis_aux' (hg : g.monic) :
255255
basis (fin g.nat_degree) R (adjoin_root g) :=
256256
basis.of_equiv_fun
257257
{ to_fun := λ f i, (mod_by_monic_hom hg f).coeff i,
@@ -265,6 +265,7 @@ basis.of_equiv_fun
265265
rw [mod_by_monic_eq_sub_mul_div _ hg, sub_sub_cancel],
266266
exact dvd_mul_right _ _ }),
267267
right_inv := λ x, funext $ λ i, begin
268+
nontriviality R,
268269
simp only [mod_by_monic_hom_mk],
269270
rw [(mod_by_monic_eq_self_iff hg).mpr, finset_sum_coeff, finset.sum_eq_single i];
270271
try { simp only [coeff_monomial, eq_self_iff_true, if_true] },
@@ -279,8 +280,7 @@ basis.of_equiv_fun
279280

280281
/-- The power basis `1, root g, ..., root g ^ (d - 1)` for `adjoin_root g`,
281282
where `g` is a monic polynomial of degree `d`. -/
282-
@[simps] def power_basis' [nontrivial R] (hg : g.monic) :
283-
power_basis R (adjoin_root g) :=
283+
@[simps] def power_basis' (hg : g.monic) : power_basis R (adjoin_root g) :=
284284
{ gen := root g,
285285
dim := g.nat_degree,
286286
basis := power_basis_aux' hg,

src/ring_theory/dedekind_domain/ideal.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ begin
430430
by_cases hI1 : I = ⊤,
431431
{ rw [hI1, coe_ideal_top, one_mul, fractional_ideal.one_inv] },
432432
by_cases hNF : is_field A,
433-
{ letI := hNF.to_field A, rcases hI1 (I.eq_bot_or_top.resolve_left hI0) },
433+
{ letI := hNF.to_field, rcases hI1 (I.eq_bot_or_top.resolve_left hI0) },
434434
-- We'll show a contradiction with `exists_not_mem_one_of_ne_bot`:
435435
-- `J⁻¹ = (I * I⁻¹)⁻¹` cannot have an element `x ∉ 1`, so it must equal `1`.
436436
obtain ⟨J, hJ⟩ : ∃ (J : ideal A), (J : fractional_ideal A⁰ K) = I * I⁻¹ :=

src/ring_theory/fractional_ideal.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -978,7 +978,7 @@ end
978978

979979
lemma eq_zero_or_one_of_is_field (hF : is_field R₁) (I : fractional_ideal R₁⁰ K) : I = 0 ∨ I = 1 :=
980980
begin
981-
letI : field R₁ := hF.to_field R₁,
981+
letI : field R₁ := hF.to_field,
982982
-- TODO can this be less ugly?
983983
exact @eq_zero_or_one R₁ K _ _ _ (by { unfreezingI {cases _inst_4}, convert _inst_9 }) I
984984
end

0 commit comments

Comments
 (0)