Module

Arithmetic.lean

Nyll.ValuedFieldTheory.LocalField.Analytic.Arithmetic
33 declarations indexed from sourceView source ↗

Arithmetic lemmas for local-field index calculations

This file contains the pure natural-number cancellation steps used after local-field norm and value-group arguments have produced an lcm divisibility.

It also contains the elementary p-adic valuation estimates used in the local-field structure development, the logarithm and exponential estimates for the convergence and valuation behavior of the logarithm and exponential series.

Imports17
  • Mathlib.Data.Nat.Factorization.Basic
  • Mathlib.Data.Nat.Prime.Basic
  • Mathlib.Algebra.EuclideanDomain.Basic
  • Mathlib.Algebra.Order.Field.Power
  • Mathlib.Analysis.SpecialFunctions.Log.Base
  • Mathlib.NumberTheory.Padics.PadicVal.Basic
  • Mathlib.Topology.Algebra.Order.Field
  • Batteries.Tactic.Init
  • Lean.Elab.Tactic.NormCast
  • Lean.Elab.Tactic.Omega
  • Lean.Elab.Tactic.RCases
  • Mathlib.Algebra.Order.Field.Basic
  • Mathlib.Order.Filter.Defs
  • Mathlib.Tactic.FieldSimp
  • Mathlib.Tactic.Linarith.Frontend
  • Mathlib.Tactic.Positivity.Basic
  • Mathlib.Tactic.Ring.RingNF
Imported by3

Declarations

LocalFieldTheory.DiscreteValuationField.pow_padicValNat_le_self

Arithmetic estimate for the field-unit logarithm: p^(v_p n) <= n for nonzero n.

This is the arithmetic input for the logarithm-series convergence estimate v_p(n) <= log_p n.

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem pow_padicValNat_le_self
    [Fact p.Prime] (hn : n ≠ 0) :
    p ^ padicValNat p n ≤ n
LocalFieldTheory.DiscreteValuationField.padicValNat_le_real_logb

Arithmetic estimate for the field-unit logarithm in real logarithmic form: v_p(n) <= log_p(n).

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem padicValNat_le_real_logb
    [Fact p.Prime] (n : ℕ) :
    (padicValNat p n : ℝ) ≤ Real.logb p n
LocalFieldTheory.DiscreteValuationField.tendsto_nat_mul_const_sub_logb_atTop

Asymptotic estimate for the field-unit logarithm: for every positive slope c, the linear term n * c eventually dominates the logarithmic denominator contribution log_p(n).

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem tendsto_nat_mul_const_sub_logb_atTop
    {c : ℝ} (hc : 0 < c) :
    Tendsto (fun n : ℕ => (n : ℝ) * c - Real.logb p n) atTop atTop := by
  have hhalf : 0 < c / 2 := by positivity
  have hsmall :
      (fun n : ℕ => Real.logb (p : ℝ) (n : ℝ)) =o[atTop]
        (fun n : ℕ => (n : ℝ)) := by
    simpa [Function.comp_def] using
      (Real.isLittleO_logb_id_atTop (b := (p : ℝ))).comp_tendsto
        tendsto_natCast_atTop_atTop
  have hbound :
      ∀ᶠ n : ℕ in atTop,
        ‖Real.logb (p : ℝ) (n : ℝ)‖ ≤
          (c / 2) * ‖(n : ℝ)‖ :=
    hsmall.def hhalf
  have hle :
      (fun n : ℕ => (c / 2) * (n : ℝ)) ≤ᶠ[atTop]
        (fun n : ℕ => (n : ℝ) * c - Real.logb (p : ℝ) (n : ℝ)) := by
    filter_upwards [hbound] with n hn
    have hnnonneg : 0 ≤ (n : ℝ) := Nat.cast_nonneg n
    have hlog_le :
        Real.logb (p : ℝ) (n : ℝ) ≤ (c / 2) * (n : ℝ) := by
      calc
        Real.logb (p : ℝ) (n : ℝ) ≤
            ‖Real.logb (p : ℝ) (n : ℝ)‖ :=
          le_abs_self _
        _ ≤ (c / 2) * ‖(n : ℝ)‖ := hn
        _ = (c / 2) * (n : ℝ) := by
          rw [Real.norm_eq_abs, abs_of_nonneg hnnonneg]
    calc
      (c / 2) * (n : ℝ) =
          (n : ℝ) * c - (c / 2) * (n : ℝ) := by
        ring
      _ ≤ (n : ℝ) * c - Real.logb (p : ℝ) (n : ℝ) :=
        sub_le_sub_left hlog_le ((n : ℝ) * c)
  have hlin :
      Tendsto (fun n : ℕ => (c / 2) * (n : ℝ)) atTop atTop :=
    Tendsto.const_mul_atTop hhalf tendsto_natCast_atTop_atTop
  exact tendsto_atTop_mono' atTop hle hlin
LocalFieldTheory.DiscreteValuationField.tendsto_nat_succ_mul_const_sub_logb_atTop

The same logarithmic domination estimate with the natural series indexing n + 1, avoiding the zero denominator in the logarithm series.

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem tendsto_nat_succ_mul_const_sub_logb_atTop
    {c : ℝ} (hc : 0 < c) :
    Tendsto
      (fun n : ℕ => ((n + 1 : ℕ) : ℝ) * c - Real.logb p (n + 1))
      atTop atTop := by
  simpa [Function.comp_def] using
    (tendsto_nat_mul_const_sub_logb_atTop (p := p) hc).comp
      (tendsto_add_atTop_nat 1)
LocalFieldTheory.DiscreteValuationField.tendsto_nat_succ_mul_const_sub_const_mul_logb_atTop

Variant of the logarithmic domination estimate with a fixed real multiple of the logarithmic term. This is the form needed after inserting the ramification index into the valuation of integer denominators.

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem tendsto_nat_succ_mul_const_sub_const_mul_logb_atTop
    {c C : ℝ} (hc : 0 < c) :
    Tendsto
      (fun n : ℕ =>
        ((n + 1 : ℕ) : ℝ) * c -
          C * Real.logb (p : ℝ) ((n + 1 : ℕ) : ℝ))
      atTop atTop := by
  have hhalf : 0 < c / 2 := by positivity
  have htend :
      Tendsto (fun n : ℕ => ((n + 1 : ℕ) : ℝ)) atTop atTop :=
    tendsto_natCast_atTop_atTop.comp (tendsto_add_atTop_nat 1)
  have hsmall :
      (fun n : ℕ => C * Real.logb (p : ℝ) ((n + 1 : ℕ) : ℝ)) =o[atTop]
        (fun n : ℕ => ((n + 1 : ℕ) : ℝ)) := by
    have hlog :
        (fun n : ℕ => Real.logb (p : ℝ) ((n + 1 : ℕ) : ℝ)) =o[atTop]
          (fun n : ℕ => ((n + 1 : ℕ) : ℝ)) := by
      simpa [Function.comp_def] using
        (Real.isLittleO_logb_id_atTop (b := (p : ℝ))).comp_tendsto
          htend
    simpa using hlog.const_mul_left C
  have hbound :
      ∀ᶠ n : ℕ in atTop,
        ‖C * Real.logb (p : ℝ) ((n + 1 : ℕ) : ℝ)‖ ≤
          (c / 2) * ‖((n + 1 : ℕ) : ℝ)‖ :=
    hsmall.def hhalf
  have hle :
      (fun n : ℕ => (c / 2) * ((n + 1 : ℕ) : ℝ)) ≤ᶠ[atTop]
        (fun n : ℕ =>
          ((n + 1 : ℕ) : ℝ) * c -
            C * Real.logb (p : ℝ) ((n + 1 : ℕ) : ℝ)) := by
    filter_upwards [hbound] with n hn
    have hnnonneg : 0 ≤ ((n + 1 : ℕ) : ℝ) := Nat.cast_nonneg _
    have hlog_le :
        C * Real.logb (p : ℝ) ((n + 1 : ℕ) : ℝ) ≤
          (c / 2) * ((n + 1 : ℕ) : ℝ) := by
      calc
        C * Real.logb (p : ℝ) ((n + 1 : ℕ) : ℝ) ≤
            ‖C * Real.logb (p : ℝ) ((n + 1 : ℕ) : ℝ)‖ :=
          le_abs_self _
        _ ≤ (c / 2) * ‖((n + 1 : ℕ) : ℝ)‖ := hn
        _ = (c / 2) * ((n + 1 : ℕ) : ℝ) := by
          rw [Real.norm_eq_abs, abs_of_nonneg hnnonneg]
    calc
      (c / 2) * ((n + 1 : ℕ) : ℝ) =
          ((n + 1 : ℕ) : ℝ) * c -
            (c / 2) * ((n + 1 : ℕ) : ℝ) := by
        ring
      _ ≤ ((n + 1 : ℕ) : ℝ) * c -
          C * Real.logb (p : ℝ) ((n + 1 : ℕ) : ℝ) :=
        sub_le_sub_left hlog_le (((n + 1 : ℕ) : ℝ) * c)
  have hlin :
      Tendsto (fun n : ℕ => (c / 2) * ((n + 1 : ℕ) : ℝ)) atTop atTop :=
    Tendsto.const_mul_atTop hhalf htend
  exact tendsto_atTop_mono' atTop hle hlin
LocalFieldTheory.DiscreteValuationField.tendsto_nat_mul_const_sub_padicValNat_factorial_atTop

Exponential-series estimate for the field-unit logarithm: for every slope c > 1, the linear term n * c dominates the factorial denominator contribution v_p(n!). The proof uses mathlib's Legendre-bound padicValNat_factorial_le; no factorial valuation formula is reproved here.

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem tendsto_nat_mul_const_sub_padicValNat_factorial_atTop
    [Fact p.Prime] {c : ℝ} (hc : 1 < c) :
    Tendsto
      (fun n : ℕ => (n : ℝ) * c - (padicValNat p n.factorial : ℝ))
      atTop atTop := by
  have hpos : 0 < c - 1 := sub_pos.mpr hc
  have hsource :
      Tendsto (fun n : ℕ => (n : ℝ) * (c - 1)) atTop atTop := by
    simpa [mul_comm] using
      Tendsto.const_mul_atTop hpos tendsto_natCast_atTop_atTop
  have hle :
      (fun n : ℕ => (n : ℝ) * (c - 1)) ≤ᶠ[atTop]
        (fun n : ℕ =>
          (n : ℝ) * c - (padicValNat p n.factorial : ℝ)) := by
    exact Eventually.of_forall fun n => by
      have hdenNat : padicValNat p n.factorial ≤ n :=
        padicValNat_factorial_le (p := p) n
      have hden : (padicValNat p n.factorial : ℝ) ≤ (n : ℝ) :=
        Nat.cast_le.mpr hdenNat
      nlinarith
  exact tendsto_atTop_mono' atTop hle hsource
LocalFieldTheory.DiscreteValuationField.padicValNat_factorial_digits

Legendre's factorial-valuation formula, Legendre's formula in digit form: if n = a_0 + a_1 p + ... + a_r p^r, then multiplying the displayed digit formula by p - 1 gives (p - 1) v_p(n!) = (a_0 p^0 + ... + a_r p^r) - (a_0 + ... + a_r).

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem padicValNat_factorial_digits
    [Fact p.Prime] (n : ℕ) :
    (p - 1) * padicValNat p n.factorial =
      Nat.ofDigits p (p.digits n) - (p.digits n).sum
LocalFieldTheory.DiscreteValuationField.padicValNat_factorial_digits_sum

Legendre's factorial-valuation formula with the digit expansion written out as an indexed sum.

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem padicValNat_factorial_digits_sum
    [Fact p.Prime] (n : ℕ) :
    (p - 1) * padicValNat p n.factorial =
      ((p.digits n).mapIdx fun i a => a * p ^ i).sum -
        (p.digits n).sum := by
  simpa [Nat.ofDigits_eq_sum_mapIdx] using
    padicValNat_factorial_digits (p := p) n
LocalFieldTheory.DiscreteValuationField.digits_sum_pos_of_ne_zero

A nonzero natural number has positive sum of base-p digits.

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem digits_sum_pos_of_ne_zero (hn : n ≠ 0) :
    0 < (p.digits n).sum
LocalFieldTheory.DiscreteValuationField.sub_one_mul_padicValNat_factorial_le_sub_one

Legendre's formula gives the sharp bound (p - 1) * v_p(n!) <= n - 1 for nonzero n.

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem sub_one_mul_padicValNat_factorial_le_sub_one
    [Fact p.Prime] (hn : n ≠ 0) :
    (p - 1) * padicValNat p n.factorial ≤ n - 1
LocalFieldTheory.DiscreteValuationField.padicValNat_factorial_div_sub_one_le_inv_sub_one

Factorial-denominator analogue of the factorial quotient estimate: v_p(n!) / (n-1) <= 1/(p-1).

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem padicValNat_factorial_div_sub_one_le_inv_sub_one
    [Fact p.Prime] (hn : 1 < n) :
    (padicValNat p n.factorial : ℚ) / ((n : ℚ) - 1) ≤
      1 / ((p : ℚ) - 1)
LocalFieldTheory.DiscreteValuationField.padicValNat_factorial_le_sub_one_div_sub_one_real

Real factorial-denominator bound used for the sharp convergence radius of the exponential series.

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem padicValNat_factorial_le_sub_one_div_sub_one_real
    [Fact p.Prime] (hn : n ≠ 0) :
    (padicValNat p n.factorial : ℝ) ≤
      ((n : ℝ) - 1) / ((p : ℝ) - 1)
LocalFieldTheory.DiscreteValuationField.tendsto_nat_mul_const_sub_const_mul_padicValNat_factorial_atTop

Sharp asymptotic estimate for the exponential series denominator: any real slope strictly above C/(p-1) dominates C * v_p(n!).

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem tendsto_nat_mul_const_sub_const_mul_padicValNat_factorial_atTop
    [Fact p.Prime] {c C : ℝ} (hC : 0 ≤ C)
    (hc : C / ((p : ℝ) - 1) < c) :
    Tendsto
      (fun n : ℕ =>
        (n : ℝ) * c - C * (padicValNat p n.factorial : ℝ))
      atTop atTop := by
  have hpNat : Nat.Prime p := Fact.out
  have hp : (1 : ℝ) < p := by
    exact_mod_cast hpNat.one_lt
  have hpden : 0 < (p : ℝ) - 1 := by
    linarith
  have hdelta : 0 < c - C / ((p : ℝ) - 1) := sub_pos.mpr hc
  have hsource :
      Tendsto
        (fun n : ℕ => (n : ℝ) * (c - C / ((p : ℝ) - 1)))
        atTop atTop := by
    simpa [mul_comm] using
      Tendsto.const_mul_atTop hdelta tendsto_natCast_atTop_atTop
  have hle :
      (fun n : ℕ => (n : ℝ) * (c - C / ((p : ℝ) - 1))) ≤ᶠ[atTop]
        (fun n : ℕ =>
          (n : ℝ) * c - C * (padicValNat p n.factorial : ℝ)) := by
    filter_upwards [eventually_ge_atTop 1] with n hn
    have hn0 : n ≠ 0 := by omega
    have hfac :=
      padicValNat_factorial_le_sub_one_div_sub_one_real
        (p := p) (n := n) hn0
    have hCfac :
        C * (padicValNat p n.factorial : ℝ) ≤
          C * (((n : ℝ) - 1) / ((p : ℝ) - 1)) :=
      mul_le_mul_of_nonneg_left hfac hC
    have hCp_nonneg : 0 ≤ C / ((p : ℝ) - 1) :=
      div_nonneg hC hpden.le
    have hden_bound :
        C * (((n : ℝ) - 1) / ((p : ℝ) - 1)) ≤
          (n : ℝ) * (C / ((p : ℝ) - 1)) := by
      calc
        C * (((n : ℝ) - 1) / ((p : ℝ) - 1)) =
            ((n : ℝ) - 1) * (C / ((p : ℝ) - 1)) := by
          ring
        _ ≤ (n : ℝ) * (C / ((p : ℝ) - 1)) :=
          mul_le_mul_of_nonneg_right (by linarith) hCp_nonneg
    calc
      (n : ℝ) * (c - C / ((p : ℝ) - 1)) =
          (n : ℝ) * c - (n : ℝ) * (C / ((p : ℝ) - 1)) := by
        ring
      _ ≤ (n : ℝ) * c - C * (padicValNat p n.factorial : ℝ) := by
        linarith [hCfac.trans hden_bound]
  exact tendsto_atTop_mono' atTop hle hsource
LocalFieldTheory.DiscreteValuationField.exp_higher_term_integer_valuation_gt

Higher exponential terms have strictly larger integer valuation than the linear term when the input has integer valuation at least two. This is the termwise arithmetic input for exp(x) - 1 having the same valuation as x on the normalized convergence ball.

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem exp_higher_term_integer_valuation_gt
    [Fact p.Prime] {n : ℕ} (hn : 2 ≤ n) {m : ℤ} (hm : 2 ≤ m) :
    m < (n : ℤ) * m - (padicValNat p n.factorial : ℤ)
LocalFieldTheory.DiscreteValuationField.exp_higher_term_integer_valuation_gt_scaled

Ramified sharp-threshold version of exp_higher_term_integer_valuation_gt: if the factorial denominator contributes e * v_p(n!), then every higher exponential term has larger integer valuation than the linear term above e/(p-1).

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem exp_higher_term_integer_valuation_gt_scaled
    [Fact p.Prime] {n e : ℕ} (hn : 2 ≤ n) {m : ℤ}
    (hm : (e : ℚ) / ((p : ℚ) - 1) < (m : ℚ)) :
    m < (n : ℤ) * m - (e : ℤ) * (padicValNat p n.factorial : ℤ)
LocalFieldTheory.DiscreteValuationField.padicValNat_div_sub_one_le_inv_sub_one

Arithmetic estimate at the deep exponential–logarithm threshold: for n > 1, the quotient v_p(n)/(n-1) is at most 1/(p-1).

This is the exact numerical inequality used later to show that, above the threshold 1/(p-1), the linear term of the logarithm or exponential series has strictly smaller valuation than every higher term.

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem padicValNat_div_sub_one_le_inv_sub_one
    [Fact p.Prime] (hn : 1 < n) :
    (padicValNat p n : ℚ) / ((n : ℚ) - 1) ≤
      1 / ((p : ℚ) - 1)
LocalFieldTheory.DiscreteValuationField.padicValNat_lt_sub_one_mul_of_inv_sub_one_lt

Strict form of the preceding estimate: any slope strictly bigger than 1/(p-1) eventually dominates v_p(n) already termwise for every n > 1.

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem padicValNat_lt_sub_one_mul_of_inv_sub_one_lt
    [Fact p.Prime] (hn : 1 < n) {c : ℚ}
    (hc : 1 / ((p : ℚ) - 1) < c) :
    (padicValNat p n : ℚ) < ((n : ℚ) - 1) * c
LocalFieldTheory.DiscreteValuationField.sub_padicValNat_pos_of_inv_sub_one_lt

Positivity form used in the valuation computation v_p(x^n / n) = n v_p(x) - v_p(n).

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem sub_padicValNat_pos_of_inv_sub_one_lt
    [Fact p.Prime] (hn : 1 < n) {c : ℚ}
    (hc : 1 / ((p : ℚ) - 1) < c) :
    0 < (n : ℚ) * c - (padicValNat p n : ℚ)
LocalFieldTheory.DiscreteValuationField.log_higher_term_integer_valuation_gt

Higher logarithm terms have strictly larger integer valuation than the linear term above the usual 1/(p-1) threshold.

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem log_higher_term_integer_valuation_gt
    [Fact p.Prime] {n : ℕ} (hn : 2 ≤ n) {m : ℤ}
    (hm : 1 / ((p : ℚ) - 1) < (m : ℚ)) :
    m < (n : ℤ) * m - (padicValNat p n : ℤ)
LocalFieldTheory.DiscreteValuationField.log_higher_term_integer_valuation_gt_scaled

Ramified-denominator version of log_higher_term_integer_valuation_gt: if the denominator contributes e * v_p(n), then the sharp comparison threshold is e/(p-1).

Source context 4 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
section PadicLogArithmetic
variable {p n : ℕ}
theorem log_higher_term_integer_valuation_gt_scaled
    [Fact p.Prime] {n e : ℕ} (hn : 2 ≤ n) {m : ℤ}
    (hm : (e : ℚ) / ((p : ℚ) - 1) < (m : ℚ)) :
    m < (n : ℤ) * m - (e : ℤ) * (padicValNat p n : ℤ)
LocalFieldTheory.DiscreteValuationField.nat_div_gcd_eq_one_of_dvd

If e divides the base-change index, the primitive quotient e / gcd e e' is one.

Source context 2 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
theorem nat_div_gcd_eq_one_of_dvd {e e' : ℕ}
    (he : 0 < e) (hdiv : e ∣ e') :
    e / Nat.gcd e e' = 1
LocalFieldTheory.DiscreteValuationField.nat_lcm_div_right_eq_div_gcd

Dividing the lcm by the right input removes exactly the common gcd from the left input.

Source context 2 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
theorem nat_lcm_div_right_eq_div_gcd {a b : ℕ} (hb : 0 < b) :
    Nat.lcm a b / b = a / Nat.gcd a b
LocalFieldTheory.DiscreteValuationField.nat_lcm_div_left_eq_div_gcd

Dividing the lcm by the left input removes exactly the common gcd from the right input.

Source context 2 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
theorem nat_lcm_div_left_eq_div_gcd {a b : ℕ} (ha : 0 < a) :
    Nat.lcm a b / a = b / Nat.gcd a b
LocalFieldTheory.DiscreteValuationField.nat_div_gcd_dvd_of_lcm_dvd_mul_left

If the lcm of two value steps divides a * c, the primitive part of the second step after removing the common gcd with a divides c.

Source context 2 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
theorem nat_div_gcd_dvd_of_lcm_dvd_mul_left {a b c : ℕ}
    (ha : 0 < a) (hdiv : Nat.lcm a b ∣ a * c) :
    b / Nat.gcd a b ∣ c
LocalFieldTheory.DiscreteValuationField.nat_div_gcd_dvd_of_lcm_dvd_mul_right

Symmetric cancellation form: if the lcm divides c * b, then the primitive part of a after removing the common gcd with b divides c.

Source context 2 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
theorem nat_div_gcd_dvd_of_lcm_dvd_mul_right {a b c : ℕ}
    (hb : 0 < b) (hdiv : Nat.lcm a b ∣ c * b) :
    a / Nat.gcd b a ∣ c
LocalFieldTheory.DiscreteValuationField.nat_eq_div_gcd_of_right_mul_eq_lcm

If multiplying by the right branch gives the lcm exactly, the remaining factor is the primitive left branch after removing the common gcd.

Source context 2 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
theorem nat_eq_div_gcd_of_right_mul_eq_lcm {a b c : ℕ}
    (hb : 0 < b) (h : b * c = Nat.lcm a b) :
    c = a / Nat.gcd a b
LocalFieldTheory.DiscreteValuationField.nat_eq_div_gcd_of_left_mul_eq_lcm

Left-handed exact lcm cancellation.

Source context 2 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
theorem nat_eq_div_gcd_of_left_mul_eq_lcm {a b c : ℕ}
    (ha : 0 < a) (h : a * c = Nat.lcm a b) :
    c = b / Nat.gcd a b
LocalFieldTheory.DiscreteValuationField.nat_dvd_div_gcd_of_right_mul_dvd_lcm

If a right-branch multiple divides the lcm, the remaining factor divides the primitive left branch after removing the common gcd.

Source context 2 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
theorem nat_dvd_div_gcd_of_right_mul_dvd_lcm {a b c : ℕ}
    (hb : 0 < b) (h : b * c ∣ Nat.lcm a b) :
    c ∣ a / Nat.gcd a b
LocalFieldTheory.DiscreteValuationField.nat_dvd_div_gcd_of_left_mul_dvd_lcm

Left-handed divisibility form of lcm cancellation.

Source context 2 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
theorem nat_dvd_div_gcd_of_left_mul_dvd_lcm {a b c : ℕ}
    (ha : 0 < a) (h : a * c ∣ Nat.lcm a b) :
    c ∣ b / Nat.gcd a b
LocalFieldTheory.DiscreteValuationField.nat_abhyankar_quotient_eq_of_right_mul_eq_lcm

Arithmetic endpoint for the tame Abhyankar formula: once the actual common-top calculation supplies e' * e_top = lcm e e', the top ramification index is the primitive quotient of e.

Source context 2 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
theorem nat_abhyankar_quotient_eq_of_right_mul_eq_lcm {e e' eTop : ℕ}
    (he' : 0 < e') (h : e' * eTop = Nat.lcm e e') :
    eTop = e / Nat.gcd e e'
LocalFieldTheory.DiscreteValuationField.nat_abhyankar_quotient_dvd_of_right_mul_dvd_lcm

Divisibility form used before the actual common-top equality is sharpened to an equality.

Source context 2 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
theorem nat_abhyankar_quotient_dvd_of_right_mul_dvd_lcm {e e' eTop : ℕ}
    (he' : 0 < e') (h : e' * eTop ∣ Nat.lcm e e') :
    eTop ∣ e / Nat.gcd e e'
LocalFieldTheory.DiscreteValuationField.nat_abhyankar_quotient_eq_one_of_dvd

If the lower ramification index already divides the base-change index, the tame Abhyankar quotient is one.

Source context 2 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
theorem nat_abhyankar_quotient_eq_one_of_dvd {e e' : ℕ}
    (he : 0 < e) (hdiv : e ∣ e') :
    e / Nat.gcd e e' = 1
LocalFieldTheory.DiscreteValuationField.nat_abhyankar_index_eq_one_of_right_mul_eq_lcm_of_dvd

Exact index-one corollary from the common-top lcm equality.

Source context 2 commands

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

namespace LocalFieldTheory.DiscreteValuationField
open Filter
theorem nat_abhyankar_index_eq_one_of_right_mul_eq_lcm_of_dvd
    {e e' eTop : ℕ} (he : 0 < e) (he' : 0 < e')
    (hdiv : e ∣ e') (h : e' * eTop = Nat.lcm e e') :
    eTop = 1