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

Commit d002769

Browse files
committed
refactor(ring_theory): clean up algebraic_iff_integral (#11773)
The definitions `is_algebraic_iff_integral`, `is_algebraic_iff_integral'` and `algebra.is_algebraic_of_finite` have always been annoying me, so I decided to fix that: * The name `is_algebraic_iff_integral'` doesn't explain how it differs from `is_algebraic_iff_integral` (namely that the whole algebra is algebraic, rather than one element), so I renamed it to `algebra.is_algebraic_iff_integral`. * The two `is_algebraic_iff_integral` lemmas have an unnecessarily explicit parameter `K`, so I made that implicit * `is_algebraic_of_finite` has no explicit parameters (so we always have to use type ascriptions), so I made them explicit * Half of the usages of `is_algebraic_of_finite` are of the form `is_algebraic_iff_integral.mp is_algebraic_of_finite`, even though `is_algebraic_of_finite` is proved as `is_algebraic_iff_integral.mpr (some_proof_that_it_is_integral)`, so I split it up into a part showing it is integral, that we can use directly. As a result, I was able to golf a few proofs.
1 parent 07d6d17 commit d002769

File tree

13 files changed

+29
-28
lines changed

13 files changed

+29
-28
lines changed

src/field_theory/abel_ruffini.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -285,10 +285,10 @@ begin
285285
{ exact λ _ _, is_integral_mul },
286286
{ exact λ α hα, subalgebra.inv_mem_of_algebraic (integral_closure F (solvable_by_rad F E))
287287
(show is_algebraic F ↑(⟨α, hα⟩ : integral_closure F (solvable_by_rad F E)),
288-
by exact (is_algebraic_iff_is_integral F).mpr hα) },
288+
by exact is_algebraic_iff_is_integral.mpr hα) },
289289
{ intros α n hn hα,
290-
obtain ⟨p, h1, h2⟩ := (is_algebraic_iff_is_integral F).mpr hα,
291-
refine (is_algebraic_iff_is_integral F).mp ⟨p.comp (X ^ n),
290+
obtain ⟨p, h1, h2⟩ := is_algebraic_iff_is_integral.mpr hα,
291+
refine is_algebraic_iff_is_integral.mp ⟨p.comp (X ^ n),
292292
⟨λ h, h1 (leading_coeff_eq_zero.mp _), by rw [aeval_comp, aeval_X_pow, h2]⟩⟩,
293293
rwa [←leading_coeff_eq_zero, leading_coeff_comp, leading_coeff_X_pow, one_pow, mul_one] at h,
294294
rwa nat_degree_X_pow }

src/field_theory/adjoin.lean

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -824,11 +824,9 @@ begin
824824
exact (S1 ⊔ S2).zero_mem },
825825
{ obtain ⟨y, h⟩ := this.mul_inv_cancel hx',
826826
exact (congr_arg (∈ S1 ⊔ S2) (eq_inv_of_mul_right_eq_one (subtype.ext_iff.mp h))).mp y.2 } },
827-
refine is_field_of_is_integral_of_is_field' _ (field.to_is_field K),
828-
have h1 : algebra.is_algebraic K E1 := algebra.is_algebraic_of_finite,
829-
have h2 : algebra.is_algebraic K E2 := algebra.is_algebraic_of_finite,
830-
rw is_algebraic_iff_is_integral' at h1 h2,
831-
exact is_integral_sup.mpr ⟨h1, h2⟩,
827+
exact is_field_of_is_integral_of_is_field'
828+
(is_integral_sup.mpr ⟨algebra.is_integral_of_finite K E1, algebra.is_integral_of_finite K E2⟩)
829+
(field.to_is_field K),
832830
end
833831

834832
lemma finite_dimensional_sup {K L : Type*} [field K] [field L] [algebra K L]

src/field_theory/is_alg_closed/algebraic_closure.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ def of_step_hom (n) : step k n →ₐ[k] algebraic_closure k :=
256256
.. of_step k n }
257257

258258
theorem is_algebraic : algebra.is_algebraic k (algebraic_closure k) :=
259-
λ z, (is_algebraic_iff_is_integral _).2 $ let ⟨n, x, hx⟩ := exists_of_step k z in
259+
λ z, is_algebraic_iff_is_integral.2 $ let ⟨n, x, hx⟩ := exists_of_step k z in
260260
hx ▸ is_integral_alg_hom (of_step_hom k n) (step.is_integral k n x)
261261

262262
instance : is_alg_closure k (algebraic_closure k) :=

src/field_theory/is_alg_closed/basic.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ lemma algebra_map_surjective_of_is_integral'
151151
lemma algebra_map_surjective_of_is_algebraic {k K : Type*} [field k] [ring K] [is_domain K]
152152
[hk : is_alg_closed k] [algebra k K] (hf : algebra.is_algebraic k K) :
153153
function.surjective (algebra_map k K) :=
154-
algebra_map_surjective_of_is_integral ((is_algebraic_iff_is_integral' k).mp hf)
154+
algebra_map_surjective_of_is_integral (algebra.is_algebraic_iff_is_integral.mp hf)
155155

156156
end is_alg_closed
157157

@@ -265,7 +265,7 @@ begin
265265
letI : algebra N M := (maximal_subfield_with_hom M hL).emb.to_ring_hom.to_algebra,
266266
cases is_alg_closed.exists_aeval_eq_zero M (minpoly N x)
267267
(ne_of_gt (minpoly.degree_pos
268-
((is_algebraic_iff_is_integral _).1
268+
(is_algebraic_iff_is_integral.1
269269
(algebra.is_algebraic_of_larger_base _ _ hL x)))) with y hy,
270270
let O : subalgebra N L := algebra.adjoin N {(x : L)},
271271
let larger_emb := ((adjoin_root.lift_hom (minpoly N x) y hy).comp

src/field_theory/polynomial_galois_group.lean

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -335,8 +335,7 @@ begin
335335
λ h, nat.prime.ne_zero p_deg (nat_degree_eq_zero_iff_degree_le_zero.mpr (le_of_eq h)),
336336
let α : p.splitting_field := root_of_splits (algebra_map F p.splitting_field)
337337
(splitting_field.splits p) hp,
338-
have hα : is_integral F α :=
339-
(is_algebraic_iff_is_integral F).mp (algebra.is_algebraic_of_finite α),
338+
have hα : is_integral F α := algebra.is_integral_of_finite _ _ α,
340339
use finite_dimensional.finrank F⟮α⟯ p.splitting_field,
341340
suffices : (minpoly F α).nat_degree = p.nat_degree,
342341
{ rw [←finite_dimensional.finrank_mul_finrank F F⟮α⟯ p.splitting_field,

src/field_theory/separable.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -699,7 +699,7 @@ instance is_separable_self (F : Type*) [field F] : is_separable F F :=
699699
instance is_separable.of_finite (F K : Type*) [field F] [field K] [algebra F K]
700700
[finite_dimensional F K] [char_zero F] : is_separable F K :=
701701
have ∀ (x : K), is_integral F x,
702-
from λ x, (is_algebraic_iff_is_integral _).mp (algebra.is_algebraic_of_finite _),
702+
from λ x, algebra.is_integral_of_finite _ _ _,
703703
this, λ x, (minpoly.irreducible (this x)).separable⟩
704704

705705
section is_separable_tower

src/field_theory/splitting_field.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -909,7 +909,7 @@ if hf0 : f = 0 then (algebra.of_id K F).comp $
909909
alg_hom.comp (by { rw ← adjoin_roots L f, exact classical.choice (lift_of_splits _ $ λ y hy,
910910
have aeval y f = 0, from (eval₂_eq_eval_map _).trans $
911911
(mem_roots $ by exact map_ne_zero hf0).1 (multiset.mem_to_finset.mp hy),
912-
(is_algebraic_iff_is_integral _).1 ⟨f, hf0, this⟩,
912+
⟨is_algebraic_iff_is_integral.1 ⟨f, hf0, this⟩,
913913
splits_of_splits_of_dvd _ hf0 hf $ minpoly.dvd _ _ this⟩) })
914914
algebra.to_top
915915

@@ -918,7 +918,7 @@ theorem finite_dimensional (f : polynomial K) [is_splitting_field K L f] : finit
918918
fg_adjoin_of_finite (set.finite_mem_finset _) (λ y hy,
919919
if hf : f = 0
920920
then by { rw [hf, map_zero, roots_zero] at hy, cases hy }
921-
else (is_algebraic_iff_is_integral _).1 ⟨f, hf, (eval₂_eq_eval_map _).trans $
921+
else is_algebraic_iff_is_integral.1 ⟨f, hf, (eval₂_eq_eval_map _).trans $
922922
(mem_roots $ by exact map_ne_zero hf).1 (multiset.mem_to_finset.mp hy)⟩)⟩
923923

924924
instance (f : polynomial K) : _root_.finite_dimensional K f.splitting_field :=

src/number_theory/class_number/finite.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ begin
391391
(is_integral_closure.range_le_span_dual_basis S b hb_int),
392392
let bS := b.map ((linear_map.quot_ker_equiv_range _).symm ≪≫ₗ _),
393393
refine fintype_of_admissible_of_algebraic L bS adm
394-
(λ x, (is_fraction_ring.is_algebraic_iff R K L).mpr (algebra.is_algebraic_of_finite x)),
394+
(λ x, (is_fraction_ring.is_algebraic_iff R K L).mpr (algebra.is_algebraic_of_finite _ _ x)),
395395
{ rw linear_map.ker_eq_bot.mpr,
396396
{ exact submodule.quot_equiv_of_eq_bot _ rfl },
397397
{ exact is_integral_closure.algebra_map_injective _ R _ } },

src/number_theory/number_field.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ include nf
5252
-- See note [lower instance priority]
5353
attribute [priority 100, instance] number_field.to_char_zero number_field.to_finite_dimensional
5454

55-
protected lemma is_algebraic : algebra.is_algebraic ℚ K := algebra.is_algebraic_of_finite
55+
protected lemma is_algebraic : algebra.is_algebraic ℚ K := algebra.is_algebraic_of_finite _ _
5656

5757
omit nf
5858

src/ring_theory/adjoin_root.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ where `g` is a monic polynomial of degree `d`. -/
297297
variables [field K] {f : polynomial K}
298298

299299
lemma is_integral_root (hf : f ≠ 0) : is_integral K (root f) :=
300-
(is_algebraic_iff_is_integral _).mp (is_algebraic_root hf)
300+
is_algebraic_iff_is_integral.mp (is_algebraic_root hf)
301301

302302
lemma minpoly_root (hf : f ≠ 0) : minpoly K (root f) = f * C (f.leading_coeff⁻¹) :=
303303
begin

0 commit comments

Comments
 (0)