Theorem: SimpleGraph.farFromTriangleFree_of_disjoint_triangles_aux
File: Mathlib/Combinatorics/SimpleGraph/Triangle/Basic.lean

tactic: rw [← card_sdiff (edgeFinset_mono hHG), ← card_attach]
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
⊢ tris.card ≤ G.edgeFinset.card - H.edgeFinset.card
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
⊢ tris.attach.card ≤ (G.edgeFinset \ H.edgeFinset).card

tactic: by_contra! hG
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
⊢ tris.attach.card ≤ (G.edgeFinset \ H.edgeFinset).card
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
⊢ False

tactic: have ⦃t⦄ (ht : t ∈ tris) :
  ∃ x y, x ∈ t ∧ y ∈ t ∧ x ≠ y ∧ s(x, y) ∈ G.edgeFinset \ H.edgeFinset := by
  by_contra! h
  refine hH t ?_
  simp only [not_and, mem_sdiff, not_not, mem_edgeFinset, mem_edgeSet] at h
  obtain ⟨x, y, z, xy, xz, yz, rfl⟩ := is3Clique_iff.1 (mem_cliqueFinset_iff.1 $ htris ht)
  rw [is3Clique_triple_iff]
  refine ⟨h _ _ ?_ ?_ xy.ne xy, h _ _ ?_ ?_ xz.ne xz, h _ _ ?_ ?_ yz.ne yz⟩ <;> simp
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
⊢ False
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
this : ∀ ⦃t : Finset α⦄, t ∈ tris → ∃ x y, x ∈ t ∧ y ∈ t ∧ x ≠ y ∧ s(x, y) ∈ G.edgeFinset \ H.edgeFinset
⊢ False

tactic: choose fx fy hfx hfy hfne fmem using this
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
this : ∀ ⦃t : Finset α⦄, t ∈ tris → ∃ x y, x ∈ t ∧ y ∈ t ∧ x ≠ y ∧ s(x, y) ∈ G.edgeFinset \ H.edgeFinset
⊢ False
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
fx fy : ⦃t : Finset α⦄ → t ∈ tris → α
hfx : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ∈ t
hfy : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fy ht ∈ t
hfne : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ≠ fy ht
fmem : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), s(fx ht, fy ht) ∈ G.edgeFinset \ H.edgeFinset
⊢ False

tactic: let f (t : {x // x ∈ tris}) : Sym2 α := s(fx t.2, fy t.2)
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
fx fy : ⦃t : Finset α⦄ → t ∈ tris → α
hfx : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ∈ t
hfy : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fy ht ∈ t
hfne : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ≠ fy ht
fmem : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), s(fx ht, fy ht) ∈ G.edgeFinset \ H.edgeFinset
⊢ False
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
fx fy : ⦃t : Finset α⦄ → t ∈ tris → α
hfx : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ∈ t
hfy : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fy ht ∈ t
hfne : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ≠ fy ht
fmem : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), s(fx ht, fy ht) ∈ G.edgeFinset \ H.edgeFinset
f : { x // x ∈ tris } → Sym2 α := fun t => s(fx ⋯, fy ⋯)
⊢ False

tactic: have hf (x) (_ : x ∈ tris.attach) : f x ∈ G.edgeFinset \ H.edgeFinset := fmem _
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
fx fy : ⦃t : Finset α⦄ → t ∈ tris → α
hfx : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ∈ t
hfy : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fy ht ∈ t
hfne : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ≠ fy ht
fmem : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), s(fx ht, fy ht) ∈ G.edgeFinset \ H.edgeFinset
f : { x // x ∈ tris } → Sym2 α := fun t => s(fx ⋯, fy ⋯)
⊢ False
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
fx fy : ⦃t : Finset α⦄ → t ∈ tris → α
hfx : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ∈ t
hfy : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fy ht ∈ t
hfne : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ≠ fy ht
fmem : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), s(fx ht, fy ht) ∈ G.edgeFinset \ H.edgeFinset
f : { x // x ∈ tris } → Sym2 α := fun t => s(fx ⋯, fy ⋯)
hf : ∀ x ∈ tris.attach, f x ∈ G.edgeFinset \ H.edgeFinset
⊢ False

tactic: obtain ⟨⟨t₁, ht₁⟩, -, ⟨t₂, ht₂⟩, -, tne, t : s(_, _) = s(_, _)⟩ :=
  exists_ne_map_eq_of_card_lt_of_maps_to hG hf
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
fx fy : ⦃t : Finset α⦄ → t ∈ tris → α
hfx : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ∈ t
hfy : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fy ht ∈ t
hfne : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ≠ fy ht
fmem : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), s(fx ht, fy ht) ∈ G.edgeFinset \ H.edgeFinset
f : { x // x ∈ tris } → Sym2 α := fun t => s(fx ⋯, fy ⋯)
hf : ∀ x ∈ tris.attach, f x ∈ G.edgeFinset \ H.edgeFinset
⊢ False
state_after: case intro.mk.intro.intro.mk.intro.intro
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
fx fy : ⦃t : Finset α⦄ → t ∈ tris → α
hfx : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ∈ t
hfy : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fy ht ∈ t
hfne : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ≠ fy ht
fmem : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), s(fx ht, fy ht) ∈ G.edgeFinset \ H.edgeFinset
f : { x // x ∈ tris } → Sym2 α := fun t => s(fx ⋯, fy ⋯)
hf : ∀ x ∈ tris.attach, f x ∈ G.edgeFinset \ H.edgeFinset
t₁ : Finset α
ht₁ : t₁ ∈ tris
t₂ : Finset α
ht₂ : t₂ ∈ tris
tne : ⟨t₁, ht₁⟩ ≠ ⟨t₂, ht₂⟩
t : s(fx ⋯, fy ⋯) = s(fx ⋯, fy ⋯)
⊢ False

tactic: have i := pd ht₁ ht₂ (Subtype.val_injective.ne tne)
state_before: case intro.mk.intro.intro.mk.intro.intro
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
fx fy : ⦃t : Finset α⦄ → t ∈ tris → α
hfx : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ∈ t
hfy : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fy ht ∈ t
hfne : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ≠ fy ht
fmem : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), s(fx ht, fy ht) ∈ G.edgeFinset \ H.edgeFinset
f : { x // x ∈ tris } → Sym2 α := fun t => s(fx ⋯, fy ⋯)
hf : ∀ x ∈ tris.attach, f x ∈ G.edgeFinset \ H.edgeFinset
t₁ : Finset α
ht₁ : t₁ ∈ tris
t₂ : Finset α
ht₂ : t₂ ∈ tris
tne : ⟨t₁, ht₁⟩ ≠ ⟨t₂, ht₂⟩
t : s(fx ⋯, fy ⋯) = s(fx ⋯, fy ⋯)
⊢ False
state_after: case intro.mk.intro.intro.mk.intro.intro
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
fx fy : ⦃t : Finset α⦄ → t ∈ tris → α
hfx : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ∈ t
hfy : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fy ht ∈ t
hfne : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ≠ fy ht
fmem : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), s(fx ht, fy ht) ∈ G.edgeFinset \ H.edgeFinset
f : { x // x ∈ tris } → Sym2 α := fun t => s(fx ⋯, fy ⋯)
hf : ∀ x ∈ tris.attach, f x ∈ G.edgeFinset \ H.edgeFinset
t₁ : Finset α
ht₁ : t₁ ∈ tris
t₂ : Finset α
ht₂ : t₂ ∈ tris
tne : ⟨t₁, ht₁⟩ ≠ ⟨t₂, ht₂⟩
t : s(fx ⋯, fy ⋯) = s(fx ⋯, fy ⋯)
i : (fun x y => (↑x ∩ ↑y).Subsingleton) t₁ t₂
⊢ False

tactic: rw [Sym2.eq_iff] at t
state_before: case intro.mk.intro.intro.mk.intro.intro
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
fx fy : ⦃t : Finset α⦄ → t ∈ tris → α
hfx : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ∈ t
hfy : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fy ht ∈ t
hfne : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ≠ fy ht
fmem : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), s(fx ht, fy ht) ∈ G.edgeFinset \ H.edgeFinset
f : { x // x ∈ tris } → Sym2 α := fun t => s(fx ⋯, fy ⋯)
hf : ∀ x ∈ tris.attach, f x ∈ G.edgeFinset \ H.edgeFinset
t₁ : Finset α
ht₁ : t₁ ∈ tris
t₂ : Finset α
ht₂ : t₂ ∈ tris
tne : ⟨t₁, ht₁⟩ ≠ ⟨t₂, ht₂⟩
t : s(fx ⋯, fy ⋯) = s(fx ⋯, fy ⋯)
i : (fun x y => (↑x ∩ ↑y).Subsingleton) t₁ t₂
⊢ False
state_after: case intro.mk.intro.intro.mk.intro.intro
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
fx fy : ⦃t : Finset α⦄ → t ∈ tris → α
hfx : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ∈ t
hfy : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fy ht ∈ t
hfne : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ≠ fy ht
fmem : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), s(fx ht, fy ht) ∈ G.edgeFinset \ H.edgeFinset
f : { x // x ∈ tris } → Sym2 α := fun t => s(fx ⋯, fy ⋯)
hf : ∀ x ∈ tris.attach, f x ∈ G.edgeFinset \ H.edgeFinset
t₁ : Finset α
ht₁ : t₁ ∈ tris
t₂ : Finset α
ht₂ : t₂ ∈ tris
tne : ⟨t₁, ht₁⟩ ≠ ⟨t₂, ht₂⟩
t : fx ⋯ = fx ⋯ ∧ fy ⋯ = fy ⋯ ∨ fx ⋯ = fy ⋯ ∧ fy ⋯ = fx ⋯
i : (↑t₁ ∩ ↑t₂).Subsingleton
⊢ False

tactic: obtain t | t := t
state_before: case intro.mk.intro.intro.mk.intro.intro
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
fx fy : ⦃t : Finset α⦄ → t ∈ tris → α
hfx : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ∈ t
hfy : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fy ht ∈ t
hfne : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ≠ fy ht
fmem : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), s(fx ht, fy ht) ∈ G.edgeFinset \ H.edgeFinset
f : { x // x ∈ tris } → Sym2 α := fun t => s(fx ⋯, fy ⋯)
hf : ∀ x ∈ tris.attach, f x ∈ G.edgeFinset \ H.edgeFinset
t₁ : Finset α
ht₁ : t₁ ∈ tris
t₂ : Finset α
ht₂ : t₂ ∈ tris
tne : ⟨t₁, ht₁⟩ ≠ ⟨t₂, ht₂⟩
t : fx ⋯ = fx ⋯ ∧ fy ⋯ = fy ⋯ ∨ fx ⋯ = fy ⋯ ∧ fy ⋯ = fx ⋯
i : (↑t₁ ∩ ↑t₂).Subsingleton
⊢ False
state_after: case intro.mk.intro.intro.mk.intro.intro.inl
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
fx fy : ⦃t : Finset α⦄ → t ∈ tris → α
hfx : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ∈ t
hfy : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fy ht ∈ t
hfne : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ≠ fy ht
fmem : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), s(fx ht, fy ht) ∈ G.edgeFinset \ H.edgeFinset
f : { x // x ∈ tris } → Sym2 α := fun t => s(fx ⋯, fy ⋯)
hf : ∀ x ∈ tris.attach, f x ∈ G.edgeFinset \ H.edgeFinset
t₁ : Finset α
ht₁ : t₁ ∈ tris
t₂ : Finset α
ht₂ : t₂ ∈ tris
tne : ⟨t₁, ht₁⟩ ≠ ⟨t₂, ht₂⟩
i : (↑t₁ ∩ ↑t₂).Subsingleton
t : fx ⋯ = fx ⋯ ∧ fy ⋯ = fy ⋯
⊢ False

case intro.mk.intro.intro.mk.intro.intro.inr
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
fx fy : ⦃t : Finset α⦄ → t ∈ tris → α
hfx : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ∈ t
hfy : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fy ht ∈ t
hfne : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ≠ fy ht
fmem : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), s(fx ht, fy ht) ∈ G.edgeFinset \ H.edgeFinset
f : { x // x ∈ tris } → Sym2 α := fun t => s(fx ⋯, fy ⋯)
hf : ∀ x ∈ tris.attach, f x ∈ G.edgeFinset \ H.edgeFinset
t₁ : Finset α
ht₁ : t₁ ∈ tris
t₂ : Finset α
ht₂ : t₂ ∈ tris
tne : ⟨t₁, ht₁⟩ ≠ ⟨t₂, ht₂⟩
i : (↑t₁ ∩ ↑t₂).Subsingleton
t : fx ⋯ = fy ⋯ ∧ fy ⋯ = fx ⋯
⊢ False

tactic: by_contra! h
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
t : Finset α
ht : t ∈ tris
⊢ ∃ x y, x ∈ t ∧ y ∈ t ∧ x ≠ y ∧ s(x, y) ∈ G.edgeFinset \ H.edgeFinset
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
t : Finset α
ht : t ∈ tris
h : ∀ (x y : α), x ∈ t → y ∈ t → x ≠ y → s(x, y) ∉ G.edgeFinset \ H.edgeFinset
⊢ False

tactic: refine hH t ?_
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
t : Finset α
ht : t ∈ tris
h : ∀ (x y : α), x ∈ t → y ∈ t → x ≠ y → s(x, y) ∉ G.edgeFinset \ H.edgeFinset
⊢ False
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
t : Finset α
ht : t ∈ tris
h : ∀ (x y : α), x ∈ t → y ∈ t → x ≠ y → s(x, y) ∉ G.edgeFinset \ H.edgeFinset
⊢ H.IsNClique 3 t

tactic: simp only [not_and, mem_sdiff, not_not, mem_edgeFinset, mem_edgeSet] at h
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
t : Finset α
ht : t ∈ tris
h : ∀ (x y : α), x ∈ t → y ∈ t → x ≠ y → s(x, y) ∉ G.edgeFinset \ H.edgeFinset
⊢ H.IsNClique 3 t
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
t : Finset α
ht : t ∈ tris
h : ∀ (x y : α), x ∈ t → y ∈ t → x ≠ y → G.Adj x y → H.Adj x y
⊢ H.IsNClique 3 t

tactic: obtain ⟨x, y, z, xy, xz, yz, rfl⟩ := is3Clique_iff.1 (mem_cliqueFinset_iff.1 $ htris ht)
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
t : Finset α
ht : t ∈ tris
h : ∀ (x y : α), x ∈ t → y ∈ t → x ≠ y → G.Adj x y → H.Adj x y
⊢ H.IsNClique 3 t
state_after: case intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
x y z : α
xy : G.Adj x y
xz : G.Adj x z
yz : G.Adj y z
ht : {x, y, z} ∈ tris
h : ∀ (x_1 y_1 : α), x_1 ∈ {x, y, z} → y_1 ∈ {x, y, z} → x_1 ≠ y_1 → G.Adj x_1 y_1 → H.Adj x_1 y_1
⊢ H.IsNClique 3 {x, y, z}

tactic: rw [is3Clique_triple_iff]
state_before: case intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
x y z : α
xy : G.Adj x y
xz : G.Adj x z
yz : G.Adj y z
ht : {x, y, z} ∈ tris
h : ∀ (x_1 y_1 : α), x_1 ∈ {x, y, z} → y_1 ∈ {x, y, z} → x_1 ≠ y_1 → G.Adj x_1 y_1 → H.Adj x_1 y_1
⊢ H.IsNClique 3 {x, y, z}
state_after: case intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
x y z : α
xy : G.Adj x y
xz : G.Adj x z
yz : G.Adj y z
ht : {x, y, z} ∈ tris
h : ∀ (x_1 y_1 : α), x_1 ∈ {x, y, z} → y_1 ∈ {x, y, z} → x_1 ≠ y_1 → G.Adj x_1 y_1 → H.Adj x_1 y_1
⊢ H.Adj x y ∧ H.Adj x z ∧ H.Adj y z

tactic: refine ⟨h _ _ ?_ ?_ xy.ne xy, h _ _ ?_ ?_ xz.ne xz, h _ _ ?_ ?_ yz.ne yz⟩ <;> simp
state_before: case intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
x y z : α
xy : G.Adj x y
xz : G.Adj x z
yz : G.Adj y z
ht : {x, y, z} ∈ tris
h : ∀ (x_1 y_1 : α), x_1 ∈ {x, y, z} → y_1 ∈ {x, y, z} → x_1 ≠ y_1 → G.Adj x_1 y_1 → H.Adj x_1 y_1
⊢ H.Adj x y ∧ H.Adj x z ∧ H.Adj y z
state_after: no goals

tactic: exact hfne _ (i ⟨hfx ht₁, t.1.symm ▸ hfx ht₂⟩ ⟨hfy ht₁, t.2.symm ▸ hfy ht₂⟩)
state_before: case intro.mk.intro.intro.mk.intro.intro.inl
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
fx fy : ⦃t : Finset α⦄ → t ∈ tris → α
hfx : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ∈ t
hfy : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fy ht ∈ t
hfne : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ≠ fy ht
fmem : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), s(fx ht, fy ht) ∈ G.edgeFinset \ H.edgeFinset
f : { x // x ∈ tris } → Sym2 α := fun t => s(fx ⋯, fy ⋯)
hf : ∀ x ∈ tris.attach, f x ∈ G.edgeFinset \ H.edgeFinset
t₁ : Finset α
ht₁ : t₁ ∈ tris
t₂ : Finset α
ht₂ : t₂ ∈ tris
tne : ⟨t₁, ht₁⟩ ≠ ⟨t₂, ht₂⟩
i : (↑t₁ ∩ ↑t₂).Subsingleton
t : fx ⋯ = fx ⋯ ∧ fy ⋯ = fy ⋯
⊢ False
state_after: no goals

tactic: exact hfne _ (i ⟨hfx ht₁, t.1.symm ▸ hfy ht₂⟩ ⟨hfy ht₁, t.2.symm ▸ hfx ht₂⟩)
state_before: case intro.mk.intro.intro.mk.intro.intro.inr
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableEq α
inst✝¹ : DecidableRel G.Adj
inst✝ : DecidableRel H.Adj
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
hHG : H ≤ G
hH : H.CliqueFree 3
hG : (G.edgeFinset \ H.edgeFinset).card < tris.attach.card
fx fy : ⦃t : Finset α⦄ → t ∈ tris → α
hfx : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ∈ t
hfy : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fy ht ∈ t
hfne : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), fx ht ≠ fy ht
fmem : ∀ ⦃t : Finset α⦄ (ht : t ∈ tris), s(fx ht, fy ht) ∈ G.edgeFinset \ H.edgeFinset
f : { x // x ∈ tris } → Sym2 α := fun t => s(fx ⋯, fy ⋯)
hf : ∀ x ∈ tris.attach, f x ∈ G.edgeFinset \ H.edgeFinset
t₁ : Finset α
ht₁ : t₁ ∈ tris
t₂ : Finset α
ht₂ : t₂ ∈ tris
tne : ⟨t₁, ht₁⟩ ≠ ⟨t₂, ht₂⟩
i : (↑t₁ ∩ ↑t₂).Subsingleton
t : fx ⋯ = fy ⋯ ∧ fy ⋯ = fx ⋯
⊢ False
state_after: no goals