Theorem: SimpleGraph.LocallyLinear.card_edgeFinset
File: Mathlib/Combinatorics/SimpleGraph/Triangle/Basic.lean

tactic: refine hG.edgeDisjointTriangles.card_edgeFinset_le.antisymm' ?_
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝³ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : DecidableRel G.Adj
hG : G.LocallyLinear
⊢ G.edgeFinset.card = 3 * (G.cliqueFinset 3).card
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝³ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : DecidableRel G.Adj
hG : G.LocallyLinear
⊢ G.edgeFinset.card ≤ 3 * (G.cliqueFinset 3).card

tactic: rw [← mul_comm, ← mul_one (Finset.card _)]
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝³ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : DecidableRel G.Adj
hG : G.LocallyLinear
⊢ G.edgeFinset.card ≤ 3 * (G.cliqueFinset 3).card
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝³ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : DecidableRel G.Adj
hG : G.LocallyLinear
⊢ G.edgeFinset.card * 1 ≤ (G.cliqueFinset 3).card * 3

tactic: refine card_mul_le_card_mul (fun e s ↦ e ∈ s.sym2) ?_ ?_
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝³ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : DecidableRel G.Adj
hG : G.LocallyLinear
⊢ G.edgeFinset.card * 1 ≤ (G.cliqueFinset 3).card * 3
state_after: case refine_1
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝³ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : DecidableRel G.Adj
hG : G.LocallyLinear
⊢ ∀ a ∈ G.edgeFinset, 1 ≤ (bipartiteAbove (fun e s => e ∈ s.sym2) (G.cliqueFinset 3) a).card

case refine_2
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝³ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : DecidableRel G.Adj
hG : G.LocallyLinear
⊢ ∀ b ∈ G.cliqueFinset 3, (bipartiteBelow (fun e s => e ∈ s.sym2) G.edgeFinset b).card ≤ 3

tactic: simp only [mem_cliqueFinset_iff, is3Clique_iff, forall_exists_index, and_imp]
state_before: case refine_2
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝³ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : DecidableRel G.Adj
hG : G.LocallyLinear
⊢ ∀ b ∈ G.cliqueFinset 3, (bipartiteBelow (fun e s => e ∈ s.sym2) G.edgeFinset b).card ≤ 3
state_after: case refine_2
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝³ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : DecidableRel G.Adj
hG : G.LocallyLinear
⊢ ∀ (b : Finset α) (x x_1 x_2 : α),
    G.Adj x x_1 →
      G.Adj x x_2 → G.Adj x_1 x_2 → b = {x, x_1, x_2} → (bipartiteBelow (fun e s => e ∈ s.sym2) G.edgeFinset b).card ≤ 3

tactic: rintro _ a b c hab hac hbc rfl
state_before: case refine_2
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝³ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : DecidableRel G.Adj
hG : G.LocallyLinear
⊢ ∀ (b : Finset α) (x x_1 x_2 : α),
    G.Adj x x_1 →
      G.Adj x x_2 → G.Adj x_1 x_2 → b = {x, x_1, x_2} → (bipartiteBelow (fun e s => e ∈ s.sym2) G.edgeFinset b).card ≤ 3
state_after: case refine_2
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝³ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : DecidableRel G.Adj
hG : G.LocallyLinear
a b c : α
hab : G.Adj a b
hac : G.Adj a c
hbc : G.Adj b c
⊢ (bipartiteBelow (fun e s => e ∈ s.sym2) G.edgeFinset {a, b, c}).card ≤ 3

tactic: calc
  _ ≤ ({s(a, b), s(a, c), s(b, c)} : Finset _).card := card_le_card ?_
  _ ≤ 3 := (card_insert_le _ _).trans (succ_le_succ $ (card_insert_le _ _).trans_eq $ by
    rw [card_singleton])
state_before: case refine_2
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝³ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : DecidableRel G.Adj
hG : G.LocallyLinear
a b c : α
hab : G.Adj a b
hac : G.Adj a c
hbc : G.Adj b c
⊢ (bipartiteBelow (fun e s => e ∈ s.sym2) G.edgeFinset {a, b, c}).card ≤ 3
state_after: case refine_2
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝³ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : DecidableRel G.Adj
hG : G.LocallyLinear
a b c : α
hab : G.Adj a b
hac : G.Adj a c
hbc : G.Adj b c
⊢ bipartiteBelow (fun e s => e ∈ s.sym2) G.edgeFinset {a, b, c} ⊆ {s(a, b), s(a, c), s(b, c)}

tactic: simp only [subset_iff, Sym2.forall, mem_sym2_iff, le_eq_subset, mem_bipartiteBelow, mem_insert,
  mem_edgeFinset, mem_singleton, and_imp, mem_edgeSet, Sym2.mem_iff, forall_eq_or_imp,
  forall_eq, Quotient.eq, Sym2.rel_iff]
state_before: case refine_2
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝³ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : DecidableRel G.Adj
hG : G.LocallyLinear
a b c : α
hab : G.Adj a b
hac : G.Adj a c
hbc : G.Adj b c
⊢ bipartiteBelow (fun e s => e ∈ s.sym2) G.edgeFinset {a, b, c} ⊆ {s(a, b), s(a, c), s(b, c)}
state_after: case refine_2
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝³ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : DecidableRel G.Adj
hG : G.LocallyLinear
a b c : α
hab : G.Adj a b
hac : G.Adj a c
hbc : G.Adj b c
⊢ ∀ (x y : α),
    G.Adj x y →
      x = a ∨ x = b ∨ x = c → y = a ∨ y = b ∨ y = c → s(x, y) = s(a, b) ∨ s(x, y) = s(a, c) ∨ s(x, y) = s(b, c)

tactic: rintro d e hde (rfl | rfl | rfl) (rfl | rfl | rfl) <;> simp [*] at *
state_before: case refine_2
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝³ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : DecidableRel G.Adj
hG : G.LocallyLinear
a b c : α
hab : G.Adj a b
hac : G.Adj a c
hbc : G.Adj b c
⊢ ∀ (x y : α),
    G.Adj x y →
      x = a ∨ x = b ∨ x = c → y = a ∨ y = b ∨ y = c → s(x, y) = s(a, b) ∨ s(x, y) = s(a, c) ∨ s(x, y) = s(b, c)
state_after: no goals

tactic: simpa [Sym2.forall, Nat.one_le_iff_ne_zero, -card_eq_zero, card_ne_zero, Finset.Nonempty]
  using hG.2
state_before: case refine_1
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝³ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : DecidableRel G.Adj
hG : G.LocallyLinear
⊢ ∀ a ∈ G.edgeFinset, 1 ≤ (bipartiteAbove (fun e s => e ∈ s.sym2) (G.cliqueFinset 3) a).card
state_after: no goals

tactic: rw [card_singleton]
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝³ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝² : DecidableEq α
inst✝¹ : Fintype α
inst✝ : DecidableRel G.Adj
hG : G.LocallyLinear
a b c : α
hab : G.Adj a b
hac : G.Adj a c
hbc : G.Adj b c
⊢ {s(b, c)}.card + 1 = 2
state_after: no goals