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

Commit b1bf390

Browse files
committed
feat(number_theory/function_field): the ring of integers of a function field is not a field (#12705)
1 parent c3ecf00 commit b1bf390

File tree

2 files changed

+45
-2
lines changed

2 files changed

+45
-2
lines changed

src/data/polynomial/div.lean

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,22 @@ lemma sum_mod_by_monic_coeff [nontrivial R] (hq : q.monic)
412412
((degree_mod_by_monic_lt _ hq).trans_le hn)).trans
413413
(sum_monomial_eq _)
414414

415+
variable (R)
416+
417+
lemma not_is_field [nontrivial R] : ¬ is_field R[X] :=
418+
begin
419+
rw ring.not_is_field_iff_exists_ideal_bot_lt_and_lt_top,
420+
use ideal.span {polynomial.X},
421+
split,
422+
{ rw [bot_lt_iff_ne_bot, ne.def, ideal.span_singleton_eq_bot],
423+
exact polynomial.X_ne_zero, },
424+
{ rw [lt_top_iff_ne_top, ne.def, ideal.eq_top_iff_one, ideal.mem_span_singleton,
425+
polynomial.X_dvd_iff, polynomial.coeff_one_zero],
426+
exact one_ne_zero, }
427+
end
428+
429+
variable {R}
430+
415431
section multiplicity
416432
/-- An algorithm for deciding polynomial divisibility.
417433
The algorithm is "compute `p %ₘ q` and compare to `0`". `

src/number_theory/function_field.lean

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,14 @@ begin
7474
intros c x, convert (this (e.symm c) x).symm, simp only [e.apply_symm_apply] },
7575
end
7676

77+
lemma algebra_map_injective [algebra Fq[X] F] [algebra (ratfunc Fq) F]
78+
[is_scalar_tower Fq[X] (ratfunc Fq) F] : function.injective ⇑(algebra_map Fq[X] F) :=
79+
begin
80+
rw is_scalar_tower.algebra_map_eq Fq[X] (ratfunc Fq) F,
81+
exact function.injective.comp ((algebra_map (ratfunc Fq) F).injective)
82+
(is_fraction_ring.injective Fq[X] (ratfunc Fq)),
83+
end
84+
7785
namespace function_field
7886

7987
/-- The function field analogue of `number_field.ring_of_integers`:
@@ -94,8 +102,27 @@ instance : is_domain (ring_of_integers Fq F) :=
94102
instance : is_integral_closure (ring_of_integers Fq F) Fq[X] F :=
95103
integral_closure.is_integral_closure _ _
96104

97-
variables [algebra (ratfunc Fq) F] [function_field Fq F]
98-
variables [is_scalar_tower Fq[X] (ratfunc Fq) F]
105+
variables [algebra (ratfunc Fq) F] [is_scalar_tower Fq[X] (ratfunc Fq) F]
106+
107+
lemma algebra_map_injective :
108+
function.injective ⇑(algebra_map Fq[X] (ring_of_integers Fq F)) :=
109+
begin
110+
have hinj : function.injective ⇑(algebra_map Fq[X] F),
111+
{ rw is_scalar_tower.algebra_map_eq Fq[X] (ratfunc Fq) F,
112+
exact function.injective.comp ((algebra_map (ratfunc Fq) F).injective)
113+
(is_fraction_ring.injective Fq[X] (ratfunc Fq)), },
114+
rw (algebra_map Fq[X] ↥(ring_of_integers Fq F)).injective_iff,
115+
intros p hp,
116+
rw [← subtype.coe_inj, subalgebra.coe_zero] at hp,
117+
rw (algebra_map Fq[X] F).injective_iff at hinj,
118+
exact hinj p hp,
119+
end
120+
121+
lemma not_is_field : ¬ is_field (ring_of_integers Fq F) :=
122+
by simpa [← (is_integral.is_field_iff_is_field (is_integral_closure.is_integral_algebra Fq[X] F)
123+
(algebra_map_injective Fq F))] using (polynomial.not_is_field Fq)
124+
125+
variables [function_field Fq F]
99126

100127
instance : is_fraction_ring (ring_of_integers Fq F) F :=
101128
integral_closure.is_fraction_ring_of_finite_extension (ratfunc Fq) F

0 commit comments

Comments
 (0)