Theorem: Padic.valuation_map_add
File: Mathlib/NumberTheory/Padics/PadicNumbers.lean

tactic: by_cases hx : x = 0
state_before: p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
⊢ min x.valuation y.valuation ≤ (x + y).valuation
state_after: case pos
p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
hx : x = 0
⊢ min x.valuation y.valuation ≤ (x + y).valuation

case neg
p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
hx : ¬x = 0
⊢ min x.valuation y.valuation ≤ (x + y).valuation

tactic: rw [hx, zero_add]
state_before: case pos
p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
hx : x = 0
⊢ min x.valuation y.valuation ≤ (x + y).valuation
state_after: case pos
p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
hx : x = 0
⊢ min (valuation 0) y.valuation ≤ y.valuation

tactic: exact min_le_right _ _
state_before: case pos
p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
hx : x = 0
⊢ min (valuation 0) y.valuation ≤ y.valuation
state_after: no goals

tactic: by_cases hy : y = 0
state_before: case neg
p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
hx : ¬x = 0
⊢ min x.valuation y.valuation ≤ (x + y).valuation
state_after: case pos
p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
hx : ¬x = 0
hy : y = 0
⊢ min x.valuation y.valuation ≤ (x + y).valuation

case neg
p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
hx : ¬x = 0
hy : ¬y = 0
⊢ min x.valuation y.valuation ≤ (x + y).valuation

tactic: rw [hy, add_zero]
state_before: case pos
p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
hx : ¬x = 0
hy : y = 0
⊢ min x.valuation y.valuation ≤ (x + y).valuation
state_after: case pos
p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
hx : ¬x = 0
hy : y = 0
⊢ min x.valuation (valuation 0) ≤ x.valuation

tactic: exact min_le_left _ _
state_before: case pos
p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
hx : ¬x = 0
hy : y = 0
⊢ min x.valuation (valuation 0) ≤ x.valuation
state_after: no goals

tactic: have h_norm : ‖x + y‖ ≤ max ‖x‖ ‖y‖ := padicNormE.nonarchimedean x y
state_before: case neg
p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
hx : ¬x = 0
hy : ¬y = 0
⊢ min x.valuation y.valuation ≤ (x + y).valuation
state_after: case neg
p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
hx : ¬x = 0
hy : ¬y = 0
h_norm : ‖x + y‖ ≤ max ‖x‖ ‖y‖
⊢ min x.valuation y.valuation ≤ (x + y).valuation

tactic: have hp_one : (1 : ℝ) < p := by
  rw [← Nat.cast_one, Nat.cast_lt]
  exact Nat.Prime.one_lt hp.elim
state_before: case neg
p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
hx : ¬x = 0
hy : ¬y = 0
h_norm : ‖x + y‖ ≤ max ‖x‖ ‖y‖
⊢ min x.valuation y.valuation ≤ (x + y).valuation
state_after: case neg
p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
hx : ¬x = 0
hy : ¬y = 0
h_norm : ‖x + y‖ ≤ max ‖x‖ ‖y‖
hp_one : 1 < ↑p
⊢ min x.valuation y.valuation ≤ (x + y).valuation

tactic: rwa [norm_eq_pow_val hx, norm_eq_pow_val hy, norm_eq_pow_val hxy,
  zpow_le_max_iff_min_le hp_one] at h_norm
state_before: case neg
p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
hx : ¬x = 0
hy : ¬y = 0
h_norm : ‖x + y‖ ≤ max ‖x‖ ‖y‖
hp_one : 1 < ↑p
⊢ min x.valuation y.valuation ≤ (x + y).valuation
state_after: no goals

tactic: rw [← Nat.cast_one, Nat.cast_lt]
state_before: p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
hx : ¬x = 0
hy : ¬y = 0
h_norm : ‖x + y‖ ≤ max ‖x‖ ‖y‖
⊢ 1 < ↑p
state_after: p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
hx : ¬x = 0
hy : ¬y = 0
h_norm : ‖x + y‖ ≤ max ‖x‖ ‖y‖
⊢ 1 < p

tactic: exact Nat.Prime.one_lt hp.elim
state_before: p : ℕ
hp : Fact (Nat.Prime p)
x y : ℚ_[p]
hxy : x + y ≠ 0
hx : ¬x = 0
hy : ¬y = 0
h_norm : ‖x + y‖ ≤ max ‖x‖ ‖y‖
⊢ 1 < p
state_after: no goals