Theorem: LaurentSeries.val_le_one_iff_eq_coe
File: Mathlib/RingTheory/LaurentSeries.lean

Proof steps:
state_before: R : Type u_1
K : Type u_2
inst✝ : Field K
f : LaurentSeries K
⊢ Valued.v f ≤ 1 ↔ ∃ F, (ofPowerSeries ℤ K) F = f
state_after: R : Type u_1
K : Type u_2
inst✝ : Field K
f : LaurentSeries K
⊢ (∀ n < 0, f.coeff n = 0) ↔ ∃ F, (ofPowerSeries ℤ K) F = f
tactic: rw [← WithZero.coe_one, ← ofAdd_zero, ← neg_zero, valuation_le_iff_coeff_lt_eq_zero]
state_before: R : Type u_1
K : Type u_2
inst✝ : Field K
f : LaurentSeries K
⊢ (∀ n < 0, f.coeff n = 0) ↔ ∃ F, (ofPowerSeries ℤ K) F = f
state_after: case refine_1
R : Type u_1
K : Type u_2
inst✝ : Field K
f : LaurentSeries K
h : ∀ n < 0, f.coeff n = 0
⊢ (ofPowerSeries ℤ K) (PowerSeries.mk fun n => f.coeff ↑n) = f

case refine_2
R : Type u_1
K : Type u_2
inst✝ : Field K
f : LaurentSeries K
⊢ (∃ F, (ofPowerSeries ℤ K) F = f) → ∀ n < 0, f.coeff n = 0
tactic: refine ⟨fun h => ⟨PowerSeries.mk fun n => f.coeff n, ?_⟩, ?_⟩
state_before: case refine_1
R : Type u_1
K : Type u_2
inst✝ : Field K
f : LaurentSeries K
h : ∀ n < 0, f.coeff n = 0
⊢ (ofPowerSeries ℤ K) (PowerSeries.mk fun n => f.coeff ↑n) = f

case refine_2
R : Type u_1
K : Type u_2
inst✝ : Field K
f : LaurentSeries K
⊢ (∃ F, (ofPowerSeries ℤ K) F = f) → ∀ n < 0, f.coeff n = 0
state_after: case refine_1.coeff.h.ofNat
R : Type u_1
K : Type u_2
inst✝ : Field K
f : LaurentSeries K
h : ∀ n < 0, f.coeff n = 0
a✝ : ℕ
⊢ ((ofPowerSeries ℤ K) (PowerSeries.mk fun n => f.coeff ↑n)).coeff (Int.ofNat a✝) = f.coeff (Int.ofNat a✝)

case refine_1.coeff.h.negSucc
R : Type u_1
K : Type u_2
inst✝ : Field K
f : LaurentSeries K
h : ∀ n < 0, f.coeff n = 0
n : ℕ
⊢ ((ofPowerSeries ℤ K) (PowerSeries.mk fun n => f.coeff ↑n)).coeff (Int.negSucc n) = f.coeff (Int.negSucc n)

case refine_2
R : Type u_1
K : Type u_2
inst✝ : Field K
f : LaurentSeries K
⊢ (∃ F, (ofPowerSeries ℤ K) F = f) → ∀ n < 0, f.coeff n = 0
tactic: on_goal 1 => ext (_ | n)
state_before: case refine_1.coeff.h.negSucc
R : Type u_1
K : Type u_2
inst✝ : Field K
f : LaurentSeries K
h : ∀ n < 0, f.coeff n = 0
n : ℕ
⊢ ((ofPowerSeries ℤ K) (PowerSeries.mk fun n => f.coeff ↑n)).coeff (Int.negSucc n) = f.coeff (Int.negSucc n)

case refine_2
R : Type u_1
K : Type u_2
inst✝ : Field K
f : LaurentSeries K
⊢ (∃ F, (ofPowerSeries ℤ K) F = f) → ∀ n < 0, f.coeff n = 0
state_after: case refine_1.coeff.h.negSucc
R : Type u_1
K : Type u_2
inst✝ : Field K
f : LaurentSeries K
h : ∀ n < 0, f.coeff n = 0
n : ℕ
⊢ ((ofPowerSeries ℤ K) (PowerSeries.mk fun n => f.coeff ↑n)).coeff (Int.negSucc n) = 0

case refine_2
R : Type u_1
K : Type u_2
inst✝ : Field K
f : LaurentSeries K
⊢ (∃ F, (ofPowerSeries ℤ K) F = f) → ∀ n < 0, f.coeff n = 0
tactic: on_goal 1 => simp only [h (Int.negSucc n) (Int.negSucc_lt_zero n)]
state_before: case refine_1.coeff.h.negSucc
R : Type u_1
K : Type u_2
inst✝ : Field K
f : LaurentSeries K
h : ∀ n < 0, f.coeff n = 0
n : ℕ
⊢ ((ofPowerSeries ℤ K) (PowerSeries.mk fun n => f.coeff ↑n)).coeff (Int.negSucc n) = 0

case refine_2
R : Type u_1
K : Type u_2
inst✝ : Field K
f : LaurentSeries K
⊢ (∃ F, (ofPowerSeries ℤ K) F = f) → ∀ n < 0, f.coeff n = 0
state_after: case refine_1.coeff.h.negSucc
R : Type u_1
K : Type u_2
inst✝ : Field K
f : LaurentSeries K
h : ∀ n < 0, f.coeff n = 0
n : ℕ
⊢ ((ofPowerSeries ℤ K) (PowerSeries.mk fun n => f.coeff ↑n)).coeff (Int.negSucc n) = 0

case refine_2.intro
R : Type u_1
K : Type u_2
inst✝ : Field K
F : K⟦X⟧
n✝ : ℤ
a✝ : n✝ < 0
⊢ ((ofPowerSeries ℤ K) F).coeff n✝ = 0
tactic: on_goal 2 => rintro ⟨F, rfl⟩ _ _
state_before: case refine_1.coeff.h.negSucc
R : Type u_1
K : Type u_2
inst✝ : Field K
f : LaurentSeries K
h : ∀ n < 0, f.coeff n = 0
n : ℕ
⊢ ((ofPowerSeries ℤ K) (PowerSeries.mk fun n => f.coeff ↑n)).coeff (Int.negSucc n) = 0

case refine_2.intro
R : Type u_1
K : Type u_2
inst✝ : Field K
F : K⟦X⟧
n✝ : ℤ
a✝ : n✝ < 0
⊢ ((ofPowerSeries ℤ K) F).coeff n✝ = 0
state_after: case refine_1.coeff.h.negSucc.hb
R : Type u_1
K : Type u_2
inst✝ : Field K
f : LaurentSeries K
h : ∀ n < 0, f.coeff n = 0
n x✝ : ℕ
⊢ ¬False

case refine_2.intro.hb
R : Type u_1
K : Type u_2
inst✝ : Field K
F : K⟦X⟧
n✝ : ℤ
a✝ : n✝ < 0
x✝ : ℕ
⊢ ¬↑x✝ = n✝
tactic: all_goals
    apply HahnSeries.embDomain_notin_range
    simp only [Nat.coe_castAddMonoidHom, RelEmbedding.coe_mk, Function.Embedding.coeFn_mk,
      Set.mem_range, not_exists, Int.negSucc_lt_zero,]
    intro