Theorem: List.mem_enumFrom
File: Mathlib/Data/List/Basic.lean

tactic: simp [enumFrom]
state_before: ι : Type ?u.432423
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
x : α
i j : ℕ
⊢ (i, x) ∈ enumFrom j [] → j ≤ i ∧ i < j + length [] ∧ x ∈ []

tactic: suffices
  i = j ∧ x = y ∨ (i, x) ∈ enumFrom (j + 1) ys →
    j ≤ i ∧ i < j + (length ys + 1) ∧ (x = y ∨ x ∈ ys)
  by simpa [enumFrom, mem_enumFrom ys]
state_before: ι : Type ?u.432423
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
x : α
i j : ℕ
y : α
ys : List α
⊢ (i, x) ∈ enumFrom j (y :: ys) → j ≤ i ∧ i < j + length (y :: ys) ∧ x ∈ y :: ys

tactic: rintro (h | h)
state_before: ι : Type ?u.432423
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
x : α
i j : ℕ
y : α
ys : List α
⊢ i = j ∧ x = y ∨ (i, x) ∈ enumFrom (j + 1) ys → j ≤ i ∧ i < j + (length ys + 1) ∧ (x = y ∨ x ∈ ys)

tactic: simpa [enumFrom, mem_enumFrom ys]
state_before: ι : Type ?u.432423
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
x : α
i j : ℕ
y : α
ys : List α
this : i = j ∧ x = y ∨ (i, x) ∈ enumFrom (j + 1) ys → j ≤ i ∧ i < j + (length ys + 1) ∧ (x = y ∨ x ∈ ys)
⊢ (i, x) ∈ enumFrom j (y :: ys) → j ≤ i ∧ i < j + length (y :: ys) ∧ x ∈ y :: ys

tactic: refine' ⟨le_of_eq h.1.symm, h.1 ▸ _, Or.inl h.2⟩
state_before: case inl
ι : Type ?u.432423
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
x : α
i j : ℕ
y : α
ys : List α
h : i = j ∧ x = y
⊢ j ≤ i ∧ i < j + (length ys + 1) ∧ (x = y ∨ x ∈ ys)

tactic: apply Nat.lt_add_of_pos_right
state_before: case inl
ι : Type ?u.432423
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
x : α
i j : ℕ
y : α
ys : List α
h : i = j ∧ x = y
⊢ i < i + (length ys + 1)

tactic: simp
state_before: case inl.h
ι : Type ?u.432423
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
x : α
i j : ℕ
y : α
ys : List α
h : i = j ∧ x = y
⊢ 0 < length ys + 1

tactic: have ⟨hji, hijlen, hmem⟩ := mem_enumFrom _ h
state_before: case inr
ι : Type ?u.432423
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
x : α
i j : ℕ
y : α
ys : List α
h : (i, x) ∈ enumFrom (j + 1) ys
⊢ j ≤ i ∧ i < j + (length ys + 1) ∧ (x = y ∨ x ∈ ys)

tactic: refine' ⟨_, _, _⟩
state_before: case inr
ι : Type ?u.432423
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
x : α
i j : ℕ
y : α
ys : List α
h : (i, x) ∈ enumFrom (j + 1) ys
hji : j + 1 ≤ i
hijlen : i < j + 1 + length ys
hmem : x ∈ ys
⊢ j ≤ i ∧ i < j + (length ys + 1) ∧ (x = y ∨ x ∈ ys)

tactic: exact le_trans (Nat.le_succ _) hji
state_before: case inr.refine'_1
ι : Type ?u.432423
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
x : α
i j : ℕ
y : α
ys : List α
h : (i, x) ∈ enumFrom (j + 1) ys
hji : j + 1 ≤ i
hijlen : i < j + 1 + length ys
hmem : x ∈ ys
⊢ j ≤ i

tactic: convert hijlen using 1
state_before: case inr.refine'_2
ι : Type ?u.432423
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
x : α
i j : ℕ
y : α
ys : List α
h : (i, x) ∈ enumFrom (j + 1) ys
hji : j + 1 ≤ i
hijlen : i < j + 1 + length ys
hmem : x ∈ ys
⊢ i < j + (length ys + 1)

tactic: ac_rfl
state_before: case h.e'_4
ι : Type ?u.432423
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
x : α
i j : ℕ
y : α
ys : List α
h : (i, x) ∈ enumFrom (j + 1) ys
hji : j + 1 ≤ i
hijlen : i < j + 1 + length ys
hmem : x ∈ ys
⊢ j + (length ys + 1) = j + 1 + length ys

tactic: simp [hmem]
state_before: case inr.refine'_3
ι : Type ?u.432423
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
x : α
i j : ℕ
y : α
ys : List α
h : (i, x) ∈ enumFrom (j + 1) ys
hji : j + 1 ≤ i
hijlen : i < j + 1 + length ys
hmem : x ∈ ys
⊢ x = y ∨ x ∈ ys