Theorem: PiNat.res_eq_res
File: Mathlib/Topology/MetricSpace/PiNat.lean

tactic: constructor <;> intro h <;> induction' n with n ih
state_before: E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
⊢ res x n = res y n ↔ ∀ ⦃m : ℕ⦄, m < n → x m = y m
state_after: case mp.zero
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
h : res x 0 = res y 0
⊢ ∀ ⦃m : ℕ⦄, m < 0 → x m = y m

case mp.succ
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : res x n = res y n → ∀ ⦃m : ℕ⦄, m < n → x m = y m
h : res x (n + 1) = res y (n + 1)
⊢ ∀ ⦃m : ℕ⦄, m < n + 1 → x m = y m

case mpr.zero
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
h : ∀ ⦃m : ℕ⦄, m < 0 → x m = y m
⊢ res x 0 = res y 0

case mpr.succ
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : (∀ ⦃m : ℕ⦄, m < n → x m = y m) → res x n = res y n
h : ∀ ⦃m : ℕ⦄, m < n + 1 → x m = y m
⊢ res x (n + 1) = res y (n + 1)

tactic: simp only [res_succ, cons.injEq]
state_before: case mpr.succ
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : (∀ ⦃m : ℕ⦄, m < n → x m = y m) → res x n = res y n
h : ∀ ⦃m : ℕ⦄, m < n + 1 → x m = y m
⊢ res x (n + 1) = res y (n + 1)
state_after: case mpr.succ
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : (∀ ⦃m : ℕ⦄, m < n → x m = y m) → res x n = res y n
h : ∀ ⦃m : ℕ⦄, m < n + 1 → x m = y m
⊢ x n = y n ∧ res x n = res y n

tactic: refine ⟨h (Nat.lt_succ_self _), ih fun m hm => ?_⟩
state_before: case mpr.succ
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : (∀ ⦃m : ℕ⦄, m < n → x m = y m) → res x n = res y n
h : ∀ ⦃m : ℕ⦄, m < n + 1 → x m = y m
⊢ x n = y n ∧ res x n = res y n
state_after: case mpr.succ
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : (∀ ⦃m : ℕ⦄, m < n → x m = y m) → res x n = res y n
h : ∀ ⦃m : ℕ⦄, m < n + 1 → x m = y m
m : ℕ
hm : m < n
⊢ x m = y m

tactic: exact h (hm.trans (Nat.lt_succ_self _))
state_before: case mpr.succ
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : (∀ ⦃m : ℕ⦄, m < n → x m = y m) → res x n = res y n
h : ∀ ⦃m : ℕ⦄, m < n + 1 → x m = y m
m : ℕ
hm : m < n
⊢ x m = y m
state_after: no goals

tactic: simp
state_before: case mp.zero
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
h : res x 0 = res y 0
⊢ ∀ ⦃m : ℕ⦄, m < 0 → x m = y m
state_after: no goals

tactic: intro m hm
state_before: case mp.succ
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : res x n = res y n → ∀ ⦃m : ℕ⦄, m < n → x m = y m
h : res x (n + 1) = res y (n + 1)
⊢ ∀ ⦃m : ℕ⦄, m < n + 1 → x m = y m
state_after: case mp.succ
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : res x n = res y n → ∀ ⦃m : ℕ⦄, m < n → x m = y m
h : res x (n + 1) = res y (n + 1)
m : ℕ
hm : m < n + 1
⊢ x m = y m

tactic: rw [Nat.lt_succ_iff_lt_or_eq] at hm
state_before: case mp.succ
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : res x n = res y n → ∀ ⦃m : ℕ⦄, m < n → x m = y m
h : res x (n + 1) = res y (n + 1)
m : ℕ
hm : m < n + 1
⊢ x m = y m
state_after: case mp.succ
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : res x n = res y n → ∀ ⦃m : ℕ⦄, m < n → x m = y m
h : res x (n + 1) = res y (n + 1)
m : ℕ
hm : m < n ∨ m = n
⊢ x m = y m

tactic: simp only [res_succ, cons.injEq] at h
state_before: case mp.succ
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : res x n = res y n → ∀ ⦃m : ℕ⦄, m < n → x m = y m
h : res x (n + 1) = res y (n + 1)
m : ℕ
hm : m < n ∨ m = n
⊢ x m = y m
state_after: case mp.succ
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : res x n = res y n → ∀ ⦃m : ℕ⦄, m < n → x m = y m
m : ℕ
hm : m < n ∨ m = n
h : x n = y n ∧ res x n = res y n
⊢ x m = y m

tactic: cases' hm with hm hm
state_before: case mp.succ
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : res x n = res y n → ∀ ⦃m : ℕ⦄, m < n → x m = y m
m : ℕ
hm : m < n ∨ m = n
h : x n = y n ∧ res x n = res y n
⊢ x m = y m
state_after: case mp.succ.inl
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : res x n = res y n → ∀ ⦃m : ℕ⦄, m < n → x m = y m
m : ℕ
h : x n = y n ∧ res x n = res y n
hm : m < n
⊢ x m = y m

case mp.succ.inr
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : res x n = res y n → ∀ ⦃m : ℕ⦄, m < n → x m = y m
m : ℕ
h : x n = y n ∧ res x n = res y n
hm : m = n
⊢ x m = y m

tactic: rw [hm]
state_before: case mp.succ.inr
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : res x n = res y n → ∀ ⦃m : ℕ⦄, m < n → x m = y m
m : ℕ
h : x n = y n ∧ res x n = res y n
hm : m = n
⊢ x m = y m
state_after: case mp.succ.inr
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : res x n = res y n → ∀ ⦃m : ℕ⦄, m < n → x m = y m
m : ℕ
h : x n = y n ∧ res x n = res y n
hm : m = n
⊢ x n = y n

tactic: exact h.1
state_before: case mp.succ.inr
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : res x n = res y n → ∀ ⦃m : ℕ⦄, m < n → x m = y m
m : ℕ
h : x n = y n ∧ res x n = res y n
hm : m = n
⊢ x n = y n
state_after: no goals

tactic: exact ih h.2 hm
state_before: case mp.succ.inl
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
n : ℕ
ih : res x n = res y n → ∀ ⦃m : ℕ⦄, m < n → x m = y m
m : ℕ
h : x n = y n ∧ res x n = res y n
hm : m < n
⊢ x m = y m
state_after: no goals

tactic: simp
state_before: case mpr.zero
E : ℕ → Type u_1
α : Type u_2
x y : ℕ → α
h : ∀ ⦃m : ℕ⦄, m < 0 → x m = y m
⊢ res x 0 = res y 0
state_after: no goals