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

Commit ee0c179

Browse files
feat(number_theory/number_field/norm): add file (#17672)
We add `norm' : (π“ž L) β†’* (π“ž K)`, that is `algebra.norm K` as a morphism between the rings of integers. From flt-regular
1 parent f721cdc commit ee0c179

2 files changed

Lines changed: 72 additions & 1 deletion

File tree

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/-
2+
Copyright (c) 2022 Riccardo Brasca. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Riccardo Brasca, Eric Rodriguez
5+
-/
6+
7+
import number_theory.number_field.basic
8+
import ring_theory.norm
9+
10+
/-!
11+
# Norm in number fields
12+
Given a finite extension of number fields, we define the norm morphism as a function between the
13+
rings of integers.
14+
15+
## Main definitions
16+
* `ring_of_integers.norm K` : `algebra.norm` as a morphism `(π“ž L) β†’* (π“ž K)`.
17+
## Main results
18+
* `algebra.dvd_norm` : if `L/K` is a finite Galois extension of fields, then, for all `(x : π“ž L)`
19+
we have that `x ∣ algebra_map (π“ž K) (π“ž L) (norm K x)`.
20+
21+
-/
22+
23+
open_locale number_field big_operators
24+
25+
open finset number_field algebra
26+
27+
namespace ring_of_integers
28+
29+
variables {L : Type*} (K : Type*) [field K] [field L] [algebra K L] [finite_dimensional K L]
30+
31+
/-- `algebra.norm` as a morphism betwen the rings of integers. -/
32+
@[simps] noncomputable def norm [is_separable K L] : (π“ž L) β†’* (π“ž K) :=
33+
((algebra.norm K).restrict (π“ž L)).cod_restrict (π“ž K) (Ξ» x, is_integral_norm K x.2)
34+
35+
local attribute [instance] number_field.ring_of_integers_algebra
36+
37+
lemma coe_algebra_map_norm [is_separable K L] (x : π“ž L) :
38+
(algebra_map (π“ž K) (π“ž L) (norm K x) : L) = algebra_map K L (algebra.norm K (x : L)) := rfl
39+
40+
lemma is_unit_norm [is_galois K L] {x : π“ž L} :
41+
is_unit (norm K x) ↔ is_unit x :=
42+
begin
43+
classical,
44+
refine ⟨λ hx, _, is_unit.map _⟩,
45+
replace hx : is_unit (algebra_map (π“ž K) (π“ž L) $ norm K x) := hx.map (algebra_map (π“ž K) $ π“ž L),
46+
refine @is_unit_of_mul_is_unit_right (π“ž L) _
47+
⟨(univ \ { alg_equiv.refl }).prod (Ξ» (Οƒ : L ≃ₐ[K] L), Οƒ x),
48+
prod_mem (Ξ» Οƒ hΟƒ, map_is_integral (Οƒ : L β†’+* L).to_int_alg_hom x.2)⟩ _ _,
49+
convert hx using 1,
50+
ext,
51+
push_cast,
52+
convert_to (univ \ { alg_equiv.refl }).prod (Ξ» (Οƒ : L ≃ₐ[K] L), Οƒ x) * (∏ (Οƒ : L ≃ₐ[K] L) in
53+
{alg_equiv.refl}, Οƒ (x : L)) = _,
54+
{ rw [prod_singleton, alg_equiv.coe_refl, id] },
55+
{ rw [prod_sdiff $ subset_univ _, ←norm_eq_prod_automorphisms, coe_algebra_map_norm] }
56+
end
57+
58+
/-- If `L/K` is a finite Galois extension of fields, then, for all `(x : π“ž L)` we have that
59+
`x ∣ algebra_map (π“ž K) (π“ž L) (norm K x)`. -/
60+
lemma dvd_norm [is_galois K L] (x : π“ž L) : x ∣ algebra_map (π“ž K) (π“ž L) (norm K x) :=
61+
begin
62+
classical,
63+
have hint : (∏ (Οƒ : L ≃ₐ[K] L) in univ.erase alg_equiv.refl, Οƒ x) ∈ π“ž L :=
64+
subalgebra.prod_mem _ (λ σ hσ, (mem_ring_of_integers _ _).2
65+
(map_is_integral Οƒ (ring_of_integers.is_integral_coe x))),
66+
refine ⟨⟨_, hint⟩, subtype.ext _⟩,
67+
rw [coe_algebra_map_norm K x, norm_eq_prod_automorphisms],
68+
simp [← finset.mul_prod_erase _ _ (mem_univ alg_equiv.refl)]
69+
end
70+
71+
end ring_of_integers

β€Žsrc/ring_theory/norm.leanβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ begin
287287
exact is_separable.separable K _ }
288288
end
289289

290-
lemma norm_eq_prod_automorphisms [finite_dimensional K L] [is_galois K L] {x : L}:
290+
lemma norm_eq_prod_automorphisms [finite_dimensional K L] [is_galois K L] (x : L) :
291291
algebra_map K L (norm K x) = ∏ (Οƒ : L ≃ₐ[K] L), Οƒ x :=
292292
begin
293293
apply no_zero_smul_divisors.algebra_map_injective L (algebraic_closure L),

0 commit comments

Comments
Β (0)