Theorem: ModP.v_p_lt_preVal
File: Mathlib/RingTheory/Perfection.lean

tactic: refine ⟨fun h hx => by rw [hx, preVal_zero] at h; exact not_lt_zero' h,
  fun h => lt_of_not_le fun hp => h ?_⟩
state_before: K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
x : ModP K v O hv p
⊢ v ↑p < preVal K v O hv p x ↔ x ≠ 0
state_after: K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp✝ : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
x : ModP K v O hv p
h : x ≠ 0
hp : preVal K v O hv p x ≤ v ↑p
⊢ x = 0

tactic: obtain ⟨r, rfl⟩ := Ideal.Quotient.mk_surjective x
state_before: K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp✝ : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
x : ModP K v O hv p
h : x ≠ 0
hp : preVal K v O hv p x ≤ v ↑p
⊢ x = 0
state_after: case intro
K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp✝ : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
r : O
h : (Ideal.Quotient.mk (Ideal.span {↑p})) r ≠ 0
hp : preVal K v O hv p ((Ideal.Quotient.mk (Ideal.span {↑p})) r) ≤ v ↑p
⊢ (Ideal.Quotient.mk (Ideal.span {↑p})) r = 0

tactic: rw [preVal_mk h, ← map_natCast (algebraMap O K) p, hv.le_iff_dvd] at hp
state_before: case intro
K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp✝ : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
r : O
h : (Ideal.Quotient.mk (Ideal.span {↑p})) r ≠ 0
hp : preVal K v O hv p ((Ideal.Quotient.mk (Ideal.span {↑p})) r) ≤ v ↑p
⊢ (Ideal.Quotient.mk (Ideal.span {↑p})) r = 0
state_after: case intro
K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp✝ : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
r : O
h : (Ideal.Quotient.mk (Ideal.span {↑p})) r ≠ 0
hp : ↑p ∣ r
⊢ (Ideal.Quotient.mk (Ideal.span {↑p})) r = 0

tactic: rw [Ideal.Quotient.eq_zero_iff_mem, Ideal.mem_span_singleton]
state_before: case intro
K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp✝ : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
r : O
h : (Ideal.Quotient.mk (Ideal.span {↑p})) r ≠ 0
hp : ↑p ∣ r
⊢ (Ideal.Quotient.mk (Ideal.span {↑p})) r = 0
state_after: case intro
K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp✝ : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
r : O
h : (Ideal.Quotient.mk (Ideal.span {↑p})) r ≠ 0
hp : ↑p ∣ r
⊢ ↑p ∣ r

tactic: exact hp
state_before: case intro
K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp✝ : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
r : O
h : (Ideal.Quotient.mk (Ideal.span {↑p})) r ≠ 0
hp : ↑p ∣ r
⊢ ↑p ∣ r
state_after: no goals

tactic: rw [hx, preVal_zero] at h
state_before: K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
x : ModP K v O hv p
h : v ↑p < preVal K v O hv p x
hx : x = 0
⊢ False
state_after: K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
x : ModP K v O hv p
h : v ↑p < 0
hx : x = 0
⊢ False

tactic: exact not_lt_zero' h
state_before: K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
x : ModP K v O hv p
h : v ↑p < 0
hx : x = 0
⊢ False
state_after: no goals