Module

RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.lean

Nyll.AlgebraicCurves.Places.Rational.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
23 declarations indexed from sourceView source ↗

Rational Function Field map Domain eq ord div map of primitive

Declarations

AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.ValuationSubring.inv_mem_maximalIdeal_of_not_mem
Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
theorem ValuationSubring.inv_mem_maximalIdeal_of_not_mem {L : Type*} [Field L]
    {A : ValuationSubring L} {β : L} (hβ : β ∉ A) :
    ∃ h : β⁻¹ ∈ A, (⟨β⁻¹, h⟩ : A) ∈ IsLocalRing.maximalIdeal A
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.mem_of_mem_roots_map_of_monic
Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
theorem mem_of_mem_roots_map_of_monic {L : Type*} [Field L] {A : ValuationSubring L}
    {P : Polynomial A} (hP : P.Monic) {r : L}
    (hr : r ∈ (P.map (algebraMap A L)).roots) : r ∈ A
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.exists_multiset_map_monic_eq_prod
Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
theorem exists_multiset_map_monic_eq_prod {L : Type*} [Field L] [IsAlgClosed L]
    {A : ValuationSubring L} {P : Polynomial A} (hP : P.Monic) :
    ∃ s : Multiset A, s.map (algebraMap A L) = (P.map (algebraMap A L)).roots ∧
      P = (s.map fun t => Polynomial.X - Polynomial.C t).prod := by
  classical
  have hinj : Function.Injective (algebraMap A L) := fun x y h => Subtype.ext h
  have hfact : ((P.map (algebraMap A L)).roots.map
      fun t => Polynomial.X - Polynomial.C t).prod = P.map (algebraMap A L) :=
    Polynomial.prod_multiset_X_sub_C_of_monic_of_roots_card_eq (hP.map _)
      (IsAlgClosed.splits _).natDegree_eq_card_roots.symm
  set s : Multiset A := ((P.map (algebraMap A L)).roots).attach.map
    (fun r => (⟨r.1, mem_of_mem_roots_map_of_monic hP r.2⟩ : A)) with hs
  have hsmap : s.map (algebraMap A L) = (P.map (algebraMap A L)).roots := by
    rw [hs, Multiset.map_map]
    conv_rhs => rw [← Multiset.attach_map_val ((P.map (algebraMap A L)).roots)]
    exact Multiset.map_congr rfl fun r _ => rfl
  refine ⟨s, hsmap, ?_⟩
  apply Polynomial.map_injective (algebraMap A L) hinj
  have hprodmap : (((s.map fun t => Polynomial.X - Polynomial.C t)).prod).map
      (algebraMap A L)
      = ((s.map fun t => Polynomial.X - Polynomial.C t).map
          (Polynomial.map (algebraMap A L))).prod := by
    rw [← Polynomial.coe_mapRingHom]
    exact map_multiset_prod (Polynomial.mapRingHom (algebraMap A L))
      (s.map fun t => Polynomial.X - Polynomial.C t)
  rw [hprodmap, Multiset.map_map,
    show (Polynomial.map (algebraMap A L) ∘ fun t : A => Polynomial.X - Polynomial.C t)
      = ((fun u : L => Polynomial.X - Polynomial.C u) ∘ (algebraMap A L)) from
      funext fun t => by simp [Polynomial.map_sub],
    ← Multiset.map_map, hsmap]
  exact hfact.symm
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.map_red_eq_of_factorisation
Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
theorem map_red_eq_of_factorisation {L : Type*} [Field L] {A : ValuationSubring L} {k : Type*}
  [Field k]
    (red : A →+* k) (hred : ∀ a : A, a ∈ IsLocalRing.maximalIdeal A → red a = 0)
    {P Pint Pout : Polynomial A} {c : A} (hfac : P = Polynomial.C c * Pint * Pout)
    (hPout : ∀ i : ℕ, Pout.coeff i - (if i = 0 then 1 else 0) ∈ IsLocalRing.maximalIdeal A) :
    P.map red = Polynomial.C (red c) * Pint.map red := by
  have hone : Pout.map red = 1 := by
    ext i
    rw [Polynomial.coeff_map, Polynomial.coeff_one]
    have h := hred _ (hPout i)
    rw [map_sub, sub_eq_zero] at h
    rw [h]
    split_ifs <;> simp
  rw [hfac, Polynomial.map_mul, Polynomial.map_mul, Polynomial.map_C, hone, mul_one]
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.red_ne_zero_of_not_mem
Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
theorem red_ne_zero_of_not_mem {L : Type*} [Field L] {A : ValuationSubring L} {k : Type*} [Field k]
    (red : A →+* k) {c : A} (hc : c ∉ IsLocalRing.maximalIdeal A) : red c ≠ 0
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.exists_eq_C_mul_monic_mul_of_valuationSubring
Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
theorem exists_eq_C_mul_monic_mul_of_valuationSubring
    {L : Type*} [Field L] [IsAlgClosed L] {A : ValuationSubring L}
    (P : Polynomial A) :
    ∃ (c : A) (Pint Pout : Polynomial A),
      P = Polynomial.C c * Pint * Pout ∧
      Pint.Monic ∧
      (∀ i : ℕ, Pout.coeff i - (if i = 0 then 1 else 0) ∈ IsLocalRing.maximalIdeal A) ∧
      (∀ β ∈ (Pout.map (algebraMap A L)).roots, β ∉ A) ∧
      (c ∈ IsLocalRing.maximalIdeal A ↔ ∀ i, P.coeff i ∈ IsLocalRing.maximalIdeal A) := by
  classical
  have hinj : Function.Injective (algebraMap A L) := fun x y h => Subtype.ext h
  set R : Multiset L := (P.map (algebraMap A L)).roots with hRdef
  set Rin : Multiset L := R.filter (· ∈ A) with hRin
  set Rout : Multiset L := R.filter (fun a => ¬ a ∈ A) with hRout
  have hR : R = Rin + Rout := (Multiset.filter_add_not _ R).symm
  have hin : ∀ α ∈ Rin, α ∈ A := fun α hα => (Multiset.mem_filter.mp hα).2
  have hout : ∀ β ∈ Rout, β ∉ A := fun β hβ => (Multiset.mem_filter.mp hβ).2
  set sin : Multiset A := Rin.attach.map fun r => (⟨r.1, hin r.1 r.2⟩ : A) with hsin
  set Pint : Polynomial A := (sin.map fun t => X - C t).prod with hPintdef
  have hPint_monic : Pint.Monic := monic_multisetProd_X_sub_C sin
  have hPint_map : Pint.map (algebraMap A L) = (Rin.map fun a => X - C a).prod := by
    rw [hPintdef, Polynomial.map_multiset_prod, Multiset.map_map, hsin, Multiset.map_map]
    conv_rhs => rw [← Multiset.attach_map_val' Rin]
    refine congrArg _ (Multiset.map_congr rfl fun r _ => ?_)
    simp [Polynomial.map_sub, ValuationSubring.algebraMap_apply]
  set sout : Multiset A := Rout.attach.map fun r =>
    (⟨r.1⁻¹, (ValuationSubring.inv_mem_maximalIdeal_of_not_mem (hout r.1 r.2)).1⟩ : A)
    with hsout
  have hsout_mem : ∀ t ∈ sout, t ∈ IsLocalRing.maximalIdeal A := by
    intro t ht
    obtain ⟨r, -, rfl⟩ := Multiset.mem_map.mp ht
    exact (ValuationSubring.inv_mem_maximalIdeal_of_not_mem (hout r.1 r.2)).2
  set Pout : Polynomial A := (sout.map fun t => 1 - C t * X).prod with hPoutdef
  have hPout_map : Pout.map (algebraMap A L) = (Rout.map fun b => (1 : L[X]) - C b⁻¹ * X).prod := by
    rw [hPoutdef, Polynomial.map_multiset_prod, Multiset.map_map, hsout, Multiset.map_map]
    conv_rhs => rw [← Multiset.attach_map_val' Rout]
    refine congrArg _ (Multiset.map_congr rfl fun r _ => ?_)
    simp [Polynomial.map_sub, Polynomial.map_mul, ValuationSubring.algebraMap_apply]
  have hPout_res : Pout.map (IsLocalRing.residue A) = 1 := by
    rw [hPoutdef, Polynomial.map_multiset_prod, Multiset.map_map]
    refine Multiset.prod_eq_one fun q hq => ?_
    obtain ⟨t, ht, rfl⟩ := Multiset.mem_map.mp hq
    have : IsLocalRing.residue A t = 0 := (IsLocalRing.residue_eq_zero_iff t).mpr (hsout_mem t ht)
    simp [Polynomial.map_sub, Polynomial.map_mul, this]
  set c' : L := (P.map (algebraMap A L)).leadingCoeff * (Rout.map fun b => -b).prod with hc'
  have hfac : P.map (algebraMap A L) = C c' * (Pint * Pout).map (algebraMap A L) := by
    have hsplit := C_leadingCoeff_mul_prod_multiset_X_sub_C
      (IsAlgClosed.splits (P.map (algebraMap A L))).natDegree_eq_card_roots.symm
    have hlin : ∀ b ∈ Rout, (X : L[X]) - C b = C (-b) * (1 - C b⁻¹ * X) := by
      intro b hb
      have hb0 : b ≠ 0 := fun h => hout b hb (h ▸ A.zero_mem)
      rw [mul_sub, mul_one, ← mul_assoc, ← C_mul, neg_mul, mul_inv_cancel₀ hb0, C_neg, C_neg,
        C_1]
      ring
    have hRout_prod : (Rout.map fun b => (X : L[X]) - C b).prod
        = C (Rout.map fun b => -b).prod * (Rout.map fun b => (1 : L[X]) - C b⁻¹ * X).prod := by
      rw [Multiset.map_congr rfl hlin, Multiset.prod_map_mul, map_multiset_prod C, Multiset.map_map]
      rfl
    conv_lhs => rw [← hsplit, ← hRdef, hR, Multiset.map_add, Multiset.prod_add, hRout_prod]
    rw [Polynomial.map_mul, hPint_map, hPout_map, hc', C_mul]
    ring
  set d : ℕ := Pint.natDegree with hd
  set u : A := (Pint * Pout).coeff d with hu
  have hu_unit : IsUnit u := by
    rw [← IsLocalRing.residue_ne_zero_iff_isUnit, hu, ← Polynomial.coeff_map, Polynomial.map_mul,
      hPout_res, mul_one, hd, ← hPint_monic.natDegree_map (IsLocalRing.residue A),
      (hPint_monic.map _).coeff_natDegree]
    exact one_ne_zero
  set c : A := P.coeff d * ↑(hu_unit.unit⁻¹) with hcdef
  have hcu : c * u = P.coeff d := by
    rw [hcdef, mul_assoc, IsUnit.val_inv_mul, mul_one]
  have hc' : algebraMap A L c = c' := by
    have h1 : algebraMap A L (P.coeff d) = c' * algebraMap A L u := by
      rw [← Polynomial.coeff_map, hfac, Polynomial.coeff_C_mul, Polynomial.coeff_map]
    have hu0 : algebraMap A L u ≠ 0 := (map_ne_zero_iff _ hinj).mpr hu_unit.ne_zero
    apply mul_right_cancel₀ hu0
    rw [← map_mul, hcu, h1]
  have hP : P = C c * Pint * Pout := by
    apply Polynomial.map_injective (algebraMap A L) hinj
    rw [mul_assoc, Polynomial.map_mul, Polynomial.map_C, hc', ← hfac]
  refine ⟨c, Pint, Pout, hP, hPint_monic, ?_, ?_, ?_⟩
  · intro i
    rw [← IsLocalRing.residue_eq_zero_iff, map_sub, sub_eq_zero, ← Polynomial.coeff_map, hPout_res,
      Polynomial.coeff_one]
    split_ifs <;> simp
  · intro β hβ
    have heval := (Polynomial.mem_roots'.mp hβ).2
    rw [Polynomial.IsRoot.def, hPout_map, Polynomial.eval_multiset_prod, Multiset.map_map,
      Multiset.prod_eq_zero_iff] at heval
    obtain ⟨b, hb, h0⟩ := Multiset.mem_map.mp heval
    have hb0 : b ≠ 0 := fun h => hout b hb (h ▸ A.zero_mem)
    simp only [Function.comp_apply, eval_sub, eval_one, eval_mul, eval_C, eval_X] at h0
    rw [sub_eq_zero, eq_comm, inv_mul_eq_one₀ hb0] at h0
    exact h0 ▸ hout b hb
  · constructor
    · intro hcm i
      rw [hP, mul_assoc, Polynomial.coeff_C_mul]
      exact Ideal.mul_mem_right _ _ hcm
    · intro hall
      rw [hcdef]
      exact Ideal.mul_mem_right _ _ (hall d)
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.P1.le_exp_neg_one_of_lt_one
Source context 11 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
namespace P1
open WithZero IsDedekindDomain
section General
variable {K F : Type*} [Field K] [Field F] [Algebra K F] (v : Place K F)
theorem le_exp_neg_one_of_lt_one {x : ℤᵐ⁰} (hx : x < 1) : x ≤ exp (-1 : ℤ)
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.P1.ord_algebraMap
Source context 11 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
namespace P1
open WithZero IsDedekindDomain
section General
variable {K F : Type*} [Field K] [Field F] [Algebra K F] (v : Place K F)
theorem ord_algebraMap (c : K) : v.ord (algebraMap K F c) = 0
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.P1.ord_eq_neg_log_of_valuationSubring_eq
Source context 11 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
namespace P1
open WithZero IsDedekindDomain
section General
variable {K F : Type*} [Field K] [Field F] [Algebra K F] (v : Place K F)
theorem ord_eq_neg_log_of_valuationSubring_eq (w : Valuation F ℤᵐ⁰)
    (hw : w.valuationSubring = v.toValuationSubring) {π : F} (hπ : w π = exp (-1 : ℤ))
    {f : F} (hf : f ≠ 0) : v.ord f = -log (w f)
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.P1.ord_ofHeightOneSpectrum_of_span
Source context 10 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
namespace P1
open WithZero IsDedekindDomain
variable {K : Type*} [Field K]
theorem ord_ofHeightOneSpectrum_of_span (w : HeightOneSpectrum K[X]) {p : K[X]}
    (hp : p ≠ 0) (hw : w.asIdeal = Ideal.span {p}) :
    (Place.ofHeightOneSpectrum (K := K) (F := RatFunc K) w).ord
      (algebraMap K[X] (RatFunc K) p) = 1
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.P1.ord_ofHeightOneSpectrum_eq_zero_of_notMem
Source context 10 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
namespace P1
open WithZero IsDedekindDomain
variable {K : Type*} [Field K]
theorem ord_ofHeightOneSpectrum_eq_zero_of_notMem (w : HeightOneSpectrum K[X]) {q : K[X]}
    (hq : q ≠ 0) (hmem : q ∉ w.asIdeal) :
    (Place.ofHeightOneSpectrum (K := K) (F := RatFunc K) w).ord
      (algebraMap K[X] (RatFunc K) q) = 0
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.P1.ord_placeOfPoint_X_sub_C
Source context 10 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
namespace P1
open WithZero IsDedekindDomain
variable {K : Type*} [Field K]
theorem ord_placeOfPoint_X_sub_C (a : K) :
    (placeOfPoint K a).ord (algebraMap K[X] (RatFunc K) (X - C a)) = 1
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.msDiv

The degree-zero divisor of the selected multiset of finite points, balanced at infinity.

Source context 9 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
section MsDiv
variable (K : Type*) [Field K] [DecidableEq (RatFunc K)]
def msDiv (t : Multiset K) : Divisor K (RatFunc K)
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.msDiv_add
Source context 10 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
section MsDiv
variable (K : Type*) [Field K] [DecidableEq (RatFunc K)]
variable {K}
theorem msDiv_add (s t : Multiset K) : msDiv K (s + t) = msDiv K s + msDiv K t
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.ord_X_sub_C_eq
Source context 10 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
section MsDiv
variable (K : Type*) [Field K] [DecidableEq (RatFunc K)]
variable {K}
theorem ord_X_sub_C_eq (w : Place K (RatFunc K)) (a : K) :
    w.ord (algebraMap K[X] (RatFunc K) (X - C a))
      = (Finsupp.single (placeOfPoint K a) (1 : ℤ) - Finsupp.single (placeInfty K) (1 : ℤ)) w
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.prod_X_sub_C_ne_zero
Source context 11 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
section MsDiv
variable (K : Type*) [Field K] [DecidableEq (RatFunc K)]
variable {K}
omit [DecidableEq (RatFunc K)] in
theorem prod_X_sub_C_ne_zero (s : Multiset K) :
    (s.map fun a => X - C a).prod ≠ 0 :=
  Multiset.prod_ne_zero (fun h => by
    obtain ⟨b, _, hb⟩ := Multiset.mem_map.mp h
    exact X_sub_C_ne_zero b hb)
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.ord_prod_X_sub_C_eq
Source context 10 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
section MsDiv
variable (K : Type*) [Field K] [DecidableEq (RatFunc K)]
variable {K}
theorem ord_prod_X_sub_C_eq (w : Place K (RatFunc K)) (s : Multiset K) :
    w.ord (algebraMap K[X] (RatFunc K) (s.map fun a => X - C a).prod) = msDiv K s w := by
  classical
  induction s using Multiset.induction_on with
  | empty => simp [msDiv, Place.ord_one]
  | cons a s ih =>
    have h1 : algebraMap K[X] (RatFunc K) (X - C a) ≠ 0 :=
      RatFunc.algebraMap_ne_zero (X_sub_C_ne_zero a)
    have h2 : algebraMap K[X] (RatFunc K) ((s.map fun a => X - C a).prod) ≠ 0 :=
      RatFunc.algebraMap_ne_zero (prod_X_sub_C_ne_zero s)
    rw [Multiset.map_cons, Multiset.prod_cons, map_mul, w.ord_mul h1 h2, ih, ord_X_sub_C_eq]
    simp only [msDiv, Finsupp.sub_apply, Finsupp.add_apply, Multiset.map_cons, Multiset.sum_cons,
      Multiset.card_cons, Finsupp.smul_apply, smul_eq_mul]
    push_cast
    ring
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.ord_algebraMap_eq_msDiv_roots
Source context 10 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
section MsDiv
variable (K : Type*) [Field K] [DecidableEq (RatFunc K)]
variable {K}
theorem ord_algebraMap_eq_msDiv_roots {R : K[X]} (hR : R ≠ 0) (hsplit : R.Splits)
    (w : Place K (RatFunc K)) :
    w.ord (algebraMap K[X] (RatFunc K) R) = msDiv K R.roots w
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.ord_C_mul_eq
Source context 11 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
section MsDiv
variable (K : Type*) [Field K] [DecidableEq (RatFunc K)]
variable {K}
omit [DecidableEq (RatFunc K)] in
theorem ord_C_mul_eq {c : K} (hc : c ≠ 0) {R : K[X]} (hR : R ≠ 0) (w : Place K (RatFunc K)) :
    w.ord (algebraMap K[X] (RatFunc K) (C c * R)) = w.ord (algebraMap K[X] (RatFunc K) R)
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.ord_div_eq
Source context 11 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
section MsDiv
variable (K : Type*) [Field K] [DecidableEq (RatFunc K)]
variable {K}
omit [DecidableEq (RatFunc K)] in
theorem ord_div_eq {F : Type*} [Field F] [Algebra K F] (w : Place K F) {f g : F} (hf : f ≠ 0)
    (hg : g ≠ 0) : w.ord (f / g) = w.ord f - w.ord g
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.mapDomain_msDiv
Source context 10 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
section MsDiv
variable (K : Type*) [Field K] [DecidableEq (RatFunc K)]
variable {K}
theorem mapDomain_msDiv {k : Type*} [Field k]
    (g : Place K (RatFunc K) → Place k (RatFunc k)) (t : Multiset K) :
    Finsupp.mapDomain g (msDiv K t)
      = (t.map fun a => Finsupp.single (g (placeOfPoint K a)) (1 : ℤ)).sum
          - (Multiset.card t : ℤ) • Finsupp.single (g (placeInfty K)) (1 : ℤ) := by
  classical
  rw [msDiv, ← Finsupp.mapDomain.addMonoidHom_apply, map_sub, map_zsmul, map_multiset_sum,
    Multiset.map_map, Finsupp.mapDomain.addMonoidHom_apply, Finsupp.mapDomain_single]
  congr 2
  refine Multiset.map_congr rfl fun a _ => ?_
  simp only [Function.comp_apply, Finsupp.mapDomain.addMonoidHom_apply, Finsupp.mapDomain_single]
AlgebraicCurves.Places.Rational.Proofs.RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive.Ws14Port.primitive_push_and_reduce
Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
namespace Ws14Port
theorem primitive_push_and_reduce
    {L : Type*} [Field L] [IsAlgClosed L] [DecidableEq (RatFunc L)] {A : ValuationSubring L}
    {k : Type*} [Field k] [DecidableEq (RatFunc k)] (red : A →+* k)
    (hred : ∀ a : A, a ∈ IsLocalRing.maximalIdeal A → red a = 0)
    (sp : Place L (RatFunc L) → Place k (RatFunc k))
    (hsp_int : ∀ a : A, sp (placeOfPoint L (a : L)) = placeOfPoint k (red a))
    (hsp_out : ∀ a : L, a ∉ A → sp (placeOfPoint L a) = placeInfty k)
    (hsp_infty : sp (placeInfty L) = placeInfty k)
    (P : Polynomial A) (hP : ∃ i, P.coeff i ∉ IsLocalRing.maximalIdeal A) :
    ∃ t : Multiset A,
      P.map (algebraMap A L) ≠ 0 ∧ P.map red ≠ 0 ∧
      Finsupp.mapDomain sp (msDiv L (P.map (algebraMap A L)).roots) = msDiv k (t.map red) ∧
      ∀ v' : Place k (RatFunc k),
        v'.ord (algebraMap k[X] (RatFunc k) (P.map red)) = msDiv k (t.map red) v'
AlgebraicCurve.RationalFunctionField.mapDomain_eq_ord_div_map_of_primitive
Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Places.Rational.Proofs
namespace RationalFunctionField_mapDomain_eq_ord_div_map_of_primitive
attribute [-instance] AlgebraicCurve.RationalFunctionField.instNontrivialInftyValueGroup
attribute [-simp] AlgebraicCurve.RationalFunctionField.placeEquivOption_placeInfty
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_some
  AlgebraicCurve.RationalFunctionField.placeEquivOption_placeOfPoint
  AlgebraicCurve.RationalFunctionField.placeEquivOption_symm_none
open Polynomial AlgebraicCurve AlgebraicCurve.RationalFunctionField
open Ws14Port in
theorem _root_.AlgebraicCurve.RationalFunctionField.mapDomain_eq_ord_div_map_of_primitive
    {L : Type*} [Field L] [IsAlgClosed L] [DecidableEq (RatFunc L)] {A : ValuationSubring L}
    {k : Type*} [Field k] [DecidableEq (RatFunc k)] (red : A →+* k)
    (hred : ∀ a : A, a ∈ IsLocalRing.maximalIdeal A → red a = 0)
    (sp : Place L (RatFunc L) → Place k (RatFunc k))
    (hsp_int : ∀ a : A, sp (placeOfPoint L (a : L)) = placeOfPoint k (red a))
    (hsp_out : ∀ a : L, a ∉ A → sp (placeOfPoint L a) = placeInfty k)
    (hsp_infty : sp (placeInfty L) = placeInfty k)
    (P Q : Polynomial A) (hP : ∃ i, P.coeff i ∉ IsLocalRing.maximalIdeal A)
    (hQ : ∃ i, Q.coeff i ∉ IsLocalRing.maximalIdeal A)
    (D : Divisor L (RatFunc L))
    (hD : ∀ w, D w = w.ord (algebraMap (Polynomial L) (RatFunc L) (P.map (algebraMap A L))
                              / algebraMap (Polynomial L) (RatFunc L) (Q.map (algebraMap A L)))) :
    ∀ v' : Place k (RatFunc k),
      Finsupp.mapDomain sp D v'
        = v'.ord (algebraMap (Polynomial k) (RatFunc k) (P.map red)
                  / algebraMap (Polynomial k) (RatFunc k) (Q.map red))