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

tactic: induction' l with b l ih
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
inst✝ : DecidableEq α
a : α
l : List α
⊢ indexOf a l ≤ l.length
state_after: case nil
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
inst✝ : DecidableEq α
a : α
⊢ indexOf a [] ≤ [].length

case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
inst✝ : DecidableEq α
a b : α
l : List α
ih : indexOf a l ≤ l.length
⊢ indexOf a (b :: l) ≤ (b :: l).length

tactic: simp only [length, indexOf_cons, cond_eq_if, beq_iff_eq]
state_before: case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
inst✝ : DecidableEq α
a b : α
l : List α
ih : indexOf a l ≤ l.length
⊢ indexOf a (b :: l) ≤ (b :: l).length
state_after: case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
inst✝ : DecidableEq α
a b : α
l : List α
ih : indexOf a l ≤ l.length
⊢ (if b = a then 0 else indexOf a l + 1) ≤ l.length + 1

tactic: by_cases h : b = a
state_before: case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
inst✝ : DecidableEq α
a b : α
l : List α
ih : indexOf a l ≤ l.length
⊢ (if b = a then 0 else indexOf a l + 1) ≤ l.length + 1
state_after: case pos
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
inst✝ : DecidableEq α
a b : α
l : List α
ih : indexOf a l ≤ l.length
h : b = a
⊢ (if b = a then 0 else indexOf a l + 1) ≤ l.length + 1

case neg
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
inst✝ : DecidableEq α
a b : α
l : List α
ih : indexOf a l ≤ l.length
h : ¬b = a
⊢ (if b = a then 0 else indexOf a l + 1) ≤ l.length + 1

tactic: rfl
state_before: case nil
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
inst✝ : DecidableEq α
a : α
⊢ indexOf a [] ≤ [].length
state_after: no goals

tactic: rw [if_pos h]
state_before: case pos
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
inst✝ : DecidableEq α
a b : α
l : List α
ih : indexOf a l ≤ l.length
h : b = a
⊢ (if b = a then 0 else indexOf a l + 1) ≤ l.length + 1
state_after: case pos
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
inst✝ : DecidableEq α
a b : α
l : List α
ih : indexOf a l ≤ l.length
h : b = a
⊢ 0 ≤ l.length + 1

tactic: exact Nat.zero_le _
state_before: case pos
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
inst✝ : DecidableEq α
a b : α
l : List α
ih : indexOf a l ≤ l.length
h : b = a
⊢ 0 ≤ l.length + 1
state_after: no goals

tactic: rw [if_neg h]
state_before: case neg
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
inst✝ : DecidableEq α
a b : α
l : List α
ih : indexOf a l ≤ l.length
h : ¬b = a
⊢ (if b = a then 0 else indexOf a l + 1) ≤ l.length + 1
state_after: case neg
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
inst✝ : DecidableEq α
a b : α
l : List α
ih : indexOf a l ≤ l.length
h : ¬b = a
⊢ indexOf a l + 1 ≤ l.length + 1

tactic: exact succ_le_succ ih
state_before: case neg
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
inst✝ : DecidableEq α
a b : α
l : List α
ih : indexOf a l ≤ l.length
h : ¬b = a
⊢ indexOf a l + 1 ≤ l.length + 1
state_after: no goals