Theorem: Fin.cons_injective_of_injective
File: Mathlib/Data/Fin/Tuple/Basic.lean

tactic: refine Fin.cases ?_ ?_
state_before: m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
⊢ Injective (cons x₀ x)
state_after: case refine_1
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
⊢ ∀ ⦃a₂ : Fin (n + 1)⦄, cons x₀ x 0 = cons x₀ x a₂ → 0 = a₂

case refine_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
⊢ ∀ (i : Fin n) ⦃a₂ : Fin (n + 1)⦄, cons x₀ x i.succ = cons x₀ x a₂ → i.succ = a₂

tactic: refine Fin.cases ?_ ?_
state_before: case refine_1
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
⊢ ∀ ⦃a₂ : Fin (n + 1)⦄, cons x₀ x 0 = cons x₀ x a₂ → 0 = a₂
state_after: case refine_1.refine_1
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
⊢ cons x₀ x 0 = cons x₀ x 0 → 0 = 0

case refine_1.refine_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
⊢ ∀ (i : Fin n), cons x₀ x 0 = cons x₀ x i.succ → 0 = i.succ

tactic: intro
state_before: case refine_1.refine_1
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
⊢ cons x₀ x 0 = cons x₀ x 0 → 0 = 0
state_after: case refine_1.refine_1
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
a✝ : cons x₀ x 0 = cons x₀ x 0
⊢ 0 = 0

tactic: rfl
state_before: case refine_1.refine_1
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
a✝ : cons x₀ x 0 = cons x₀ x 0
⊢ 0 = 0
state_after: no goals

tactic: intro j h
state_before: case refine_1.refine_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
⊢ ∀ (i : Fin n), cons x₀ x 0 = cons x₀ x i.succ → 0 = i.succ
state_after: case refine_1.refine_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
j : Fin n
h : cons x₀ x 0 = cons x₀ x j.succ
⊢ 0 = j.succ

tactic: rw [cons_zero, cons_succ] at h
state_before: case refine_1.refine_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
j : Fin n
h : cons x₀ x 0 = cons x₀ x j.succ
⊢ 0 = j.succ
state_after: case refine_1.refine_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
j : Fin n
h : x₀ = x j
⊢ 0 = j.succ

tactic: exact hx₀.elim ⟨_, h.symm⟩
state_before: case refine_1.refine_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
j : Fin n
h : x₀ = x j
⊢ 0 = j.succ
state_after: no goals

tactic: intro i
state_before: case refine_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
⊢ ∀ (i : Fin n) ⦃a₂ : Fin (n + 1)⦄, cons x₀ x i.succ = cons x₀ x a₂ → i.succ = a₂
state_after: case refine_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i✝ : Fin n
y : α✝ i✝.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
i : Fin n
⊢ ∀ ⦃a₂ : Fin (n + 1)⦄, cons x₀ x i.succ = cons x₀ x a₂ → i.succ = a₂

tactic: refine Fin.cases ?_ ?_
state_before: case refine_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i✝ : Fin n
y : α✝ i✝.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
i : Fin n
⊢ ∀ ⦃a₂ : Fin (n + 1)⦄, cons x₀ x i.succ = cons x₀ x a₂ → i.succ = a₂
state_after: case refine_2.refine_1
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i✝ : Fin n
y : α✝ i✝.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
i : Fin n
⊢ cons x₀ x i.succ = cons x₀ x 0 → i.succ = 0

case refine_2.refine_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i✝ : Fin n
y : α✝ i✝.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
i : Fin n
⊢ ∀ (i_1 : Fin n), cons x₀ x i.succ = cons x₀ x i_1.succ → i.succ = i_1.succ

tactic: intro h
state_before: case refine_2.refine_1
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i✝ : Fin n
y : α✝ i✝.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
i : Fin n
⊢ cons x₀ x i.succ = cons x₀ x 0 → i.succ = 0
state_after: case refine_2.refine_1
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i✝ : Fin n
y : α✝ i✝.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
i : Fin n
h : cons x₀ x i.succ = cons x₀ x 0
⊢ i.succ = 0

tactic: rw [cons_zero, cons_succ] at h
state_before: case refine_2.refine_1
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i✝ : Fin n
y : α✝ i✝.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
i : Fin n
h : cons x₀ x i.succ = cons x₀ x 0
⊢ i.succ = 0
state_after: case refine_2.refine_1
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i✝ : Fin n
y : α✝ i✝.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
i : Fin n
h : x i = x₀
⊢ i.succ = 0

tactic: exact hx₀.elim ⟨_, h⟩
state_before: case refine_2.refine_1
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i✝ : Fin n
y : α✝ i✝.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
i : Fin n
h : x i = x₀
⊢ i.succ = 0
state_after: no goals

tactic: intro j h
state_before: case refine_2.refine_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i✝ : Fin n
y : α✝ i✝.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
i : Fin n
⊢ ∀ (i_1 : Fin n), cons x₀ x i.succ = cons x₀ x i_1.succ → i.succ = i_1.succ
state_after: case refine_2.refine_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i✝ : Fin n
y : α✝ i✝.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
i j : Fin n
h : cons x₀ x i.succ = cons x₀ x j.succ
⊢ i.succ = j.succ

tactic: rw [cons_succ, cons_succ] at h
state_before: case refine_2.refine_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i✝ : Fin n
y : α✝ i✝.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
i j : Fin n
h : cons x₀ x i.succ = cons x₀ x j.succ
⊢ i.succ = j.succ
state_after: case refine_2.refine_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i✝ : Fin n
y : α✝ i✝.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
i j : Fin n
h : x i = x j
⊢ i.succ = j.succ

tactic: exact congr_arg _ (hx h)
state_before: case refine_2.refine_2
m n : ℕ
α✝ : Fin (n + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i✝ : Fin n
y : α✝ i✝.succ
z : α✝ 0
α : Type u_1
x₀ : α
x : Fin n → α
hx₀ : x₀ ∉ Set.range x
hx : Injective x
i j : Fin n
h : x i = x j
⊢ i.succ = j.succ
state_after: no goals