Theorem: List.pairwise_of_reflexive_on_dupl_of_forall_ne
File: Mathlib/Data/List/Pairwise.lean

tactic: induction' l with hd tl IH
state_before: α : Type u_1
β : Type ?u.40515
R S T : α → α → Prop
a : α
l✝ : List α
inst✝ : DecidableEq α
l : List α
r : α → α → Prop
hr : ∀ (a : α), 1 < count a l → r a a
h : ∀ (a : α), a ∈ l → ∀ (b : α), b ∈ l → a ≠ b → r a b
⊢ Pairwise r l

tactic: simp
state_before: case nil
α : Type u_1
β : Type ?u.40515
R S T : α → α → Prop
a : α
l✝ : List α
inst✝ : DecidableEq α
l : List α
r : α → α → Prop
hr✝ : ∀ (a : α), 1 < count a l → r a a
h✝ : ∀ (a : α), a ∈ l → ∀ (b : α), b ∈ l → a ≠ b → r a b
hr : ∀ (a : α), 1 < count a [] → r a a
h : ∀ (a : α), a ∈ [] → ∀ (b : α), b ∈ [] → a ≠ b → r a b
⊢ Pairwise r []

tactic: rw [List.pairwise_cons]
state_before: case cons
α : Type u_1
β : Type ?u.40515
R S T : α → α → Prop
a : α
l✝ : List α
inst✝ : DecidableEq α
l : List α
r : α → α → Prop
hr✝ : ∀ (a : α), 1 < count a l → r a a
h✝ : ∀ (a : α), a ∈ l → ∀ (b : α), b ∈ l → a ≠ b → r a b
hd : α
tl : List α
IH : (∀ (a : α), 1 < count a tl → r a a) → (∀ (a : α), a ∈ tl → ∀ (b : α), b ∈ tl → a ≠ b → r a b) → Pairwise r tl
hr : ∀ (a : α), 1 < count a (hd :: tl) → r a a
h : ∀ (a : α), a ∈ hd :: tl → ∀ (b : α), b ∈ hd :: tl → a ≠ b → r a b
⊢ Pairwise r (hd :: tl)

tactic: constructor
state_before: case cons
α : Type u_1
β : Type ?u.40515
R S T : α → α → Prop
a : α
l✝ : List α
inst✝ : DecidableEq α
l : List α
r : α → α → Prop
hr✝ : ∀ (a : α), 1 < count a l → r a a
h✝ : ∀ (a : α), a ∈ l → ∀ (b : α), b ∈ l → a ≠ b → r a b
hd : α
tl : List α
IH : (∀ (a : α), 1 < count a tl → r a a) → (∀ (a : α), a ∈ tl → ∀ (b : α), b ∈ tl → a ≠ b → r a b) → Pairwise r tl
hr : ∀ (a : α), 1 < count a (hd :: tl) → r a a
h : ∀ (a : α), a ∈ hd :: tl → ∀ (b : α), b ∈ hd :: tl → a ≠ b → r a b
⊢ (∀ (a' : α), a' ∈ tl → r hd a') ∧ Pairwise r tl

tactic: intro x hx
state_before: case cons.left
α : Type u_1
β : Type ?u.40515
R S T : α → α → Prop
a : α
l✝ : List α
inst✝ : DecidableEq α
l : List α
r : α → α → Prop
hr✝ : ∀ (a : α), 1 < count a l → r a a
h✝ : ∀ (a : α), a ∈ l → ∀ (b : α), b ∈ l → a ≠ b → r a b
hd : α
tl : List α
IH : (∀ (a : α), 1 < count a tl → r a a) → (∀ (a : α), a ∈ tl → ∀ (b : α), b ∈ tl → a ≠ b → r a b) → Pairwise r tl
hr : ∀ (a : α), 1 < count a (hd :: tl) → r a a
h : ∀ (a : α), a ∈ hd :: tl → ∀ (b : α), b ∈ hd :: tl → a ≠ b → r a b
⊢ ∀ (a' : α), a' ∈ tl → r hd a'

tactic: by_cases H : hd = x
state_before: case cons.left
α : Type u_1
β : Type ?u.40515
R S T : α → α → Prop
a : α
l✝ : List α
inst✝ : DecidableEq α
l : List α
r : α → α → Prop
hr✝ : ∀ (a : α), 1 < count a l → r a a
h✝ : ∀ (a : α), a ∈ l → ∀ (b : α), b ∈ l → a ≠ b → r a b
hd : α
tl : List α
IH : (∀ (a : α), 1 < count a tl → r a a) → (∀ (a : α), a ∈ tl → ∀ (b : α), b ∈ tl → a ≠ b → r a b) → Pairwise r tl
hr : ∀ (a : α), 1 < count a (hd :: tl) → r a a
h : ∀ (a : α), a ∈ hd :: tl → ∀ (b : α), b ∈ hd :: tl → a ≠ b → r a b
x : α
hx : x ∈ tl
⊢ r hd x

tactic: rw [H]
state_before: case pos
α : Type u_1
β : Type ?u.40515
R S T : α → α → Prop
a : α
l✝ : List α
inst✝ : DecidableEq α
l : List α
r : α → α → Prop
hr✝ : ∀ (a : α), 1 < count a l → r a a
h✝ : ∀ (a : α), a ∈ l → ∀ (b : α), b ∈ l → a ≠ b → r a b
hd : α
tl : List α
IH : (∀ (a : α), 1 < count a tl → r a a) → (∀ (a : α), a ∈ tl → ∀ (b : α), b ∈ tl → a ≠ b → r a b) → Pairwise r tl
hr : ∀ (a : α), 1 < count a (hd :: tl) → r a a
h : ∀ (a : α), a ∈ hd :: tl → ∀ (b : α), b ∈ hd :: tl → a ≠ b → r a b
x : α
hx : x ∈ tl
H : hd = x
⊢ r hd x

tactic: refine' hr _ _
state_before: case pos
α : Type u_1
β : Type ?u.40515
R S T : α → α → Prop
a : α
l✝ : List α
inst✝ : DecidableEq α
l : List α
r : α → α → Prop
hr✝ : ∀ (a : α), 1 < count a l → r a a
h✝ : ∀ (a : α), a ∈ l → ∀ (b : α), b ∈ l → a ≠ b → r a b
hd : α
tl : List α
IH : (∀ (a : α), 1 < count a tl → r a a) → (∀ (a : α), a ∈ tl → ∀ (b : α), b ∈ tl → a ≠ b → r a b) → Pairwise r tl
hr : ∀ (a : α), 1 < count a (hd :: tl) → r a a
h : ∀ (a : α), a ∈ hd :: tl → ∀ (b : α), b ∈ hd :: tl → a ≠ b → r a b
x : α
hx : x ∈ tl
H : hd = x
⊢ r x x

tactic: simpa [count_cons, H, Nat.succ_lt_succ_iff, count_pos] using hx
state_before: case pos
α : Type u_1
β : Type ?u.40515
R S T : α → α → Prop
a : α
l✝ : List α
inst✝ : DecidableEq α
l : List α
r : α → α → Prop
hr✝ : ∀ (a : α), 1 < count a l → r a a
h✝ : ∀ (a : α), a ∈ l → ∀ (b : α), b ∈ l → a ≠ b → r a b
hd : α
tl : List α
IH : (∀ (a : α), 1 < count a tl → r a a) → (∀ (a : α), a ∈ tl → ∀ (b : α), b ∈ tl → a ≠ b → r a b) → Pairwise r tl
hr : ∀ (a : α), 1 < count a (hd :: tl) → r a a
h : ∀ (a : α), a ∈ hd :: tl → ∀ (b : α), b ∈ hd :: tl → a ≠ b → r a b
x : α
hx : x ∈ tl
H : hd = x
⊢ 1 < count x (hd :: tl)

tactic: exact h hd (mem_cons_self _ _) x (mem_cons_of_mem _ hx) H
state_before: case neg
α : Type u_1
β : Type ?u.40515
R S T : α → α → Prop
a : α
l✝ : List α
inst✝ : DecidableEq α
l : List α
r : α → α → Prop
hr✝ : ∀ (a : α), 1 < count a l → r a a
h✝ : ∀ (a : α), a ∈ l → ∀ (b : α), b ∈ l → a ≠ b → r a b
hd : α
tl : List α
IH : (∀ (a : α), 1 < count a tl → r a a) → (∀ (a : α), a ∈ tl → ∀ (b : α), b ∈ tl → a ≠ b → r a b) → Pairwise r tl
hr : ∀ (a : α), 1 < count a (hd :: tl) → r a a
h : ∀ (a : α), a ∈ hd :: tl → ∀ (b : α), b ∈ hd :: tl → a ≠ b → r a b
x : α
hx : x ∈ tl
H : ¬hd = x
⊢ r hd x

tactic: refine' IH _ _
state_before: case cons.right
α : Type u_1
β : Type ?u.40515
R S T : α → α → Prop
a : α
l✝ : List α
inst✝ : DecidableEq α
l : List α
r : α → α → Prop
hr✝ : ∀ (a : α), 1 < count a l → r a a
h✝ : ∀ (a : α), a ∈ l → ∀ (b : α), b ∈ l → a ≠ b → r a b
hd : α
tl : List α
IH : (∀ (a : α), 1 < count a tl → r a a) → (∀ (a : α), a ∈ tl → ∀ (b : α), b ∈ tl → a ≠ b → r a b) → Pairwise r tl
hr : ∀ (a : α), 1 < count a (hd :: tl) → r a a
h : ∀ (a : α), a ∈ hd :: tl → ∀ (b : α), b ∈ hd :: tl → a ≠ b → r a b
⊢ Pairwise r tl

tactic: intro x hx
state_before: case cons.right.refine'_1
α : Type u_1
β : Type ?u.40515
R S T : α → α → Prop
a : α
l✝ : List α
inst✝ : DecidableEq α
l : List α
r : α → α → Prop
hr✝ : ∀ (a : α), 1 < count a l → r a a
h✝ : ∀ (a : α), a ∈ l → ∀ (b : α), b ∈ l → a ≠ b → r a b
hd : α
tl : List α
IH : (∀ (a : α), 1 < count a tl → r a a) → (∀ (a : α), a ∈ tl → ∀ (b : α), b ∈ tl → a ≠ b → r a b) → Pairwise r tl
hr : ∀ (a : α), 1 < count a (hd :: tl) → r a a
h : ∀ (a : α), a ∈ hd :: tl → ∀ (b : α), b ∈ hd :: tl → a ≠ b → r a b
⊢ ∀ (a : α), 1 < count a tl → r a a

tactic: refine' hr _ _
state_before: case cons.right.refine'_1
α : Type u_1
β : Type ?u.40515
R S T : α → α → Prop
a : α
l✝ : List α
inst✝ : DecidableEq α
l : List α
r : α → α → Prop
hr✝ : ∀ (a : α), 1 < count a l → r a a
h✝ : ∀ (a : α), a ∈ l → ∀ (b : α), b ∈ l → a ≠ b → r a b
hd : α
tl : List α
IH : (∀ (a : α), 1 < count a tl → r a a) → (∀ (a : α), a ∈ tl → ∀ (b : α), b ∈ tl → a ≠ b → r a b) → Pairwise r tl
hr : ∀ (a : α), 1 < count a (hd :: tl) → r a a
h : ∀ (a : α), a ∈ hd :: tl → ∀ (b : α), b ∈ hd :: tl → a ≠ b → r a b
x : α
hx : 1 < count x tl
⊢ r x x

tactic: rw [count_cons]
state_before: case cons.right.refine'_1
α : Type u_1
β : Type ?u.40515
R S T : α → α → Prop
a : α
l✝ : List α
inst✝ : DecidableEq α
l : List α
r : α → α → Prop
hr✝ : ∀ (a : α), 1 < count a l → r a a
h✝ : ∀ (a : α), a ∈ l → ∀ (b : α), b ∈ l → a ≠ b → r a b
hd : α
tl : List α
IH : (∀ (a : α), 1 < count a tl → r a a) → (∀ (a : α), a ∈ tl → ∀ (b : α), b ∈ tl → a ≠ b → r a b) → Pairwise r tl
hr : ∀ (a : α), 1 < count a (hd :: tl) → r a a
h : ∀ (a : α), a ∈ hd :: tl → ∀ (b : α), b ∈ hd :: tl → a ≠ b → r a b
x : α
hx : 1 < count x tl
⊢ 1 < count x (hd :: tl)

tactic: split_ifs
state_before: case cons.right.refine'_1
α : Type u_1
β : Type ?u.40515
R S T : α → α → Prop
a : α
l✝ : List α
inst✝ : DecidableEq α
l : List α
r : α → α → Prop
hr✝ : ∀ (a : α), 1 < count a l → r a a
h✝ : ∀ (a : α), a ∈ l → ∀ (b : α), b ∈ l → a ≠ b → r a b
hd : α
tl : List α
IH : (∀ (a : α), 1 < count a tl → r a a) → (∀ (a : α), a ∈ tl → ∀ (b : α), b ∈ tl → a ≠ b → r a b) → Pairwise r tl
hr : ∀ (a : α), 1 < count a (hd :: tl) → r a a
h : ∀ (a : α), a ∈ hd :: tl → ∀ (b : α), b ∈ hd :: tl → a ≠ b → r a b
x : α
hx : 1 < count x tl
⊢ 1 < if x = hd then succ (count x tl) else count x tl

tactic: exact hx.trans (Nat.lt_succ_self _)
state_before: case cons.right.refine'_1.inl
α : Type u_1
β : Type ?u.40515
R S T : α → α → Prop
a : α
l✝ : List α
inst✝ : DecidableEq α
l : List α
r : α → α → Prop
hr✝ : ∀ (a : α), 1 < count a l → r a a
h✝¹ : ∀ (a : α), a ∈ l → ∀ (b : α), b ∈ l → a ≠ b → r a b
hd : α
tl : List α
IH : (∀ (a : α), 1 < count a tl → r a a) → (∀ (a : α), a ∈ tl → ∀ (b : α), b ∈ tl → a ≠ b → r a b) → Pairwise r tl
hr : ∀ (a : α), 1 < count a (hd :: tl) → r a a
h : ∀ (a : α), a ∈ hd :: tl → ∀ (b : α), b ∈ hd :: tl → a ≠ b → r a b
x : α
hx : 1 < count x tl
h✝ : x = hd
⊢ 1 < succ (count x tl)

tactic: exact hx
state_before: case cons.right.refine'_1.inr
α : Type u_1
β : Type ?u.40515
R S T : α → α → Prop
a : α
l✝ : List α
inst✝ : DecidableEq α
l : List α
r : α → α → Prop
hr✝ : ∀ (a : α), 1 < count a l → r a a
h✝¹ : ∀ (a : α), a ∈ l → ∀ (b : α), b ∈ l → a ≠ b → r a b
hd : α
tl : List α
IH : (∀ (a : α), 1 < count a tl → r a a) → (∀ (a : α), a ∈ tl → ∀ (b : α), b ∈ tl → a ≠ b → r a b) → Pairwise r tl
hr : ∀ (a : α), 1 < count a (hd :: tl) → r a a
h : ∀ (a : α), a ∈ hd :: tl → ∀ (b : α), b ∈ hd :: tl → a ≠ b → r a b
x : α
hx : 1 < count x tl
h✝ : ¬x = hd
⊢ 1 < count x tl

tactic: intro x hx y hy
state_before: case cons.right.refine'_2
α : Type u_1
β : Type ?u.40515
R S T : α → α → Prop
a : α
l✝ : List α
inst✝ : DecidableEq α
l : List α
r : α → α → Prop
hr✝ : ∀ (a : α), 1 < count a l → r a a
h✝ : ∀ (a : α), a ∈ l → ∀ (b : α), b ∈ l → a ≠ b → r a b
hd : α
tl : List α
IH : (∀ (a : α), 1 < count a tl → r a a) → (∀ (a : α), a ∈ tl → ∀ (b : α), b ∈ tl → a ≠ b → r a b) → Pairwise r tl
hr : ∀ (a : α), 1 < count a (hd :: tl) → r a a
h : ∀ (a : α), a ∈ hd :: tl → ∀ (b : α), b ∈ hd :: tl → a ≠ b → r a b
⊢ ∀ (a : α), a ∈ tl → ∀ (b : α), b ∈ tl → a ≠ b → r a b

tactic: exact h x (mem_cons_of_mem _ hx) y (mem_cons_of_mem _ hy)
state_before: case cons.right.refine'_2
α : Type u_1
β : Type ?u.40515
R S T : α → α → Prop
a : α
l✝ : List α
inst✝ : DecidableEq α
l : List α
r : α → α → Prop
hr✝ : ∀ (a : α), 1 < count a l → r a a
h✝ : ∀ (a : α), a ∈ l → ∀ (b : α), b ∈ l → a ≠ b → r a b
hd : α
tl : List α
IH : (∀ (a : α), 1 < count a tl → r a a) → (∀ (a : α), a ∈ tl → ∀ (b : α), b ∈ tl → a ≠ b → r a b) → Pairwise r tl
hr : ∀ (a : α), 1 < count a (hd :: tl) → r a a
h : ∀ (a : α), a ∈ hd :: tl → ∀ (b : α), b ∈ hd :: tl → a ≠ b → r a b
x : α
hx : x ∈ tl
y : α
hy : y ∈ tl
⊢ x ≠ y → r x y