Theorem: List.Nodup.pairwise_of_forall_ne
File: Mathlib/Data/List/Nodup.lean

tactic: rw [pairwise_iff_forall_sublist]
state_before: α : Type u
β : Type v
l✝ l₁ l₂ : List α
r✝ : α → α → Prop
a b : α
l : List α
r : α → α → Prop
hl : l.Nodup
h : ∀ a ∈ l, ∀ b ∈ l, a ≠ b → r a b
⊢ Pairwise r l
state_after: α : Type u
β : Type v
l✝ l₁ l₂ : List α
r✝ : α → α → Prop
a b : α
l : List α
r : α → α → Prop
hl : l.Nodup
h : ∀ a ∈ l, ∀ b ∈ l, a ≠ b → r a b
⊢ ∀ {a b : α}, [a, b] <+ l → r a b

tactic: intro a b hab
state_before: α : Type u
β : Type v
l✝ l₁ l₂ : List α
r✝ : α → α → Prop
a b : α
l : List α
r : α → α → Prop
hl : l.Nodup
h : ∀ a ∈ l, ∀ b ∈ l, a ≠ b → r a b
⊢ ∀ {a b : α}, [a, b] <+ l → r a b
state_after: α : Type u
β : Type v
l✝ l₁ l₂ : List α
r✝ : α → α → Prop
a✝ b✝ : α
l : List α
r : α → α → Prop
hl : l.Nodup
h : ∀ a ∈ l, ∀ b ∈ l, a ≠ b → r a b
a b : α
hab : [a, b] <+ l
⊢ r a b

tactic: if heq : a = b then
  cases heq; have := nodup_iff_sublist.mp hl _ hab; contradiction
else
  apply h <;> try (apply hab.subset; simp)
  exact heq
state_before: α : Type u
β : Type v
l✝ l₁ l₂ : List α
r✝ : α → α → Prop
a✝ b✝ : α
l : List α
r : α → α → Prop
hl : l.Nodup
h : ∀ a ∈ l, ∀ b ∈ l, a ≠ b → r a b
a b : α
hab : [a, b] <+ l
⊢ r a b
state_after: no goals

tactic: cases heq
state_before: α : Type u
β : Type v
l✝ l₁ l₂ : List α
r✝ : α → α → Prop
a✝ b✝ : α
l : List α
r : α → α → Prop
hl : l.Nodup
h : ∀ a ∈ l, ∀ b ∈ l, a ≠ b → r a b
a b : α
hab : [a, b] <+ l
heq : a = b
⊢ r a b
state_after: case refl
α : Type u
β : Type v
l✝ l₁ l₂ : List α
r✝ : α → α → Prop
a✝ b : α
l : List α
r : α → α → Prop
hl : l.Nodup
h : ∀ a ∈ l, ∀ b ∈ l, a ≠ b → r a b
a : α
hab : [a, a] <+ l
⊢ r a a

tactic: have := nodup_iff_sublist.mp hl _ hab
state_before: case refl
α : Type u
β : Type v
l✝ l₁ l₂ : List α
r✝ : α → α → Prop
a✝ b : α
l : List α
r : α → α → Prop
hl : l.Nodup
h : ∀ a ∈ l, ∀ b ∈ l, a ≠ b → r a b
a : α
hab : [a, a] <+ l
⊢ r a a
state_after: case refl
α : Type u
β : Type v
l✝ l₁ l₂ : List α
r✝ : α → α → Prop
a✝ b : α
l : List α
r : α → α → Prop
hl : l.Nodup
h : ∀ a ∈ l, ∀ b ∈ l, a ≠ b → r a b
a : α
hab : [a, a] <+ l
this : False
⊢ r a a

tactic: contradiction
state_before: case refl
α : Type u
β : Type v
l✝ l₁ l₂ : List α
r✝ : α → α → Prop
a✝ b : α
l : List α
r : α → α → Prop
hl : l.Nodup
h : ∀ a ∈ l, ∀ b ∈ l, a ≠ b → r a b
a : α
hab : [a, a] <+ l
this : False
⊢ r a a
state_after: no goals

tactic: apply h <;> try (apply hab.subset; simp)
state_before: α : Type u
β : Type v
l✝ l₁ l₂ : List α
r✝ : α → α → Prop
a✝ b✝ : α
l : List α
r : α → α → Prop
hl : l.Nodup
h : ∀ a ∈ l, ∀ b ∈ l, a ≠ b → r a b
a b : α
hab : [a, b] <+ l
heq : ¬a = b
⊢ r a b
state_after: case a
α : Type u
β : Type v
l✝ l₁ l₂ : List α
r✝ : α → α → Prop
a✝ b✝ : α
l : List α
r : α → α → Prop
hl : l.Nodup
h : ∀ a ∈ l, ∀ b ∈ l, a ≠ b → r a b
a b : α
hab : [a, b] <+ l
heq : ¬a = b
⊢ a ≠ b

tactic: exact heq
state_before: case a
α : Type u
β : Type v
l✝ l₁ l₂ : List α
r✝ : α → α → Prop
a✝ b✝ : α
l : List α
r : α → α → Prop
hl : l.Nodup
h : ∀ a ∈ l, ∀ b ∈ l, a ≠ b → r a b
a b : α
hab : [a, b] <+ l
heq : ¬a = b
⊢ a ≠ b
state_after: no goals

tactic: (apply hab.subset; simp)
state_before: case a
α : Type u
β : Type v
l✝ l₁ l₂ : List α
r✝ : α → α → Prop
a✝ b✝ : α
l : List α
r : α → α → Prop
hl : l.Nodup
h : ∀ a ∈ l, ∀ b ∈ l, a ≠ b → r a b
a b : α
hab : [a, b] <+ l
heq : ¬a = b
⊢ b ∈ l
state_after: no goals

tactic: apply hab.subset
state_before: case a
α : Type u
β : Type v
l✝ l₁ l₂ : List α
r✝ : α → α → Prop
a✝ b✝ : α
l : List α
r : α → α → Prop
hl : l.Nodup
h : ∀ a ∈ l, ∀ b ∈ l, a ≠ b → r a b
a b : α
hab : [a, b] <+ l
heq : ¬a = b
⊢ b ∈ l
state_after: case a.a
α : Type u
β : Type v
l✝ l₁ l₂ : List α
r✝ : α → α → Prop
a✝ b✝ : α
l : List α
r : α → α → Prop
hl : l.Nodup
h : ∀ a ∈ l, ∀ b ∈ l, a ≠ b → r a b
a b : α
hab : [a, b] <+ l
heq : ¬a = b
⊢ b ∈ [a, b]

tactic: simp
state_before: case a.a
α : Type u
β : Type v
l✝ l₁ l₂ : List α
r✝ : α → α → Prop
a✝ b✝ : α
l : List α
r : α → α → Prop
hl : l.Nodup
h : ∀ a ∈ l, ∀ b ∈ l, a ≠ b → r a b
a b : α
hab : [a, b] <+ l
heq : ¬a = b
⊢ b ∈ [a, b]
state_after: no goals