Theorem: SimpleGraph.TripartiteFromTriangles.map_toTriangle_disjoint
File: Mathlib/Combinatorics/SimpleGraph/Triangle/Tripartite.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a a' : α
b b' : β
c c' : γ
x : α × β × γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
⊢ (↑(map toTriangle t)).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a a' : α
b b' : β
c c' : γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
⊢ (↑(map toTriangle t)).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
tactic: clear x
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a a' : α
b b' : β
c c' : γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
⊢ (↑(map toTriangle t)).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a a' : α
b b' : β
c c' : γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
x✝ : Finset (α ⊕ β ⊕ γ)
⊢ x✝ ∈ ↑(map toTriangle t) →
    ∀ ⦃y : Finset (α ⊕ β ⊕ γ)⦄, y ∈ ↑(map toTriangle t) → x✝ ≠ y → (fun x y => (↑x ∩ ↑y).Subsingleton) x✝ y
tactic: intro
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a a' : α
b b' : β
c c' : γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
x✝ : Finset (α ⊕ β ⊕ γ)
⊢ x✝ ∈ ↑(map toTriangle t) →
    ∀ ⦃y : Finset (α ⊕ β ⊕ γ)⦄, y ∈ ↑(map toTriangle t) → x✝ ≠ y → (fun x y => (↑x ∩ ↑y).Subsingleton) x✝ y
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a a' : α
b b' : β
c c' : γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
x✝ : Finset (α ⊕ β ⊕ γ)
⊢ ∀ (x : α) (x_1 : β) (x_2 : γ),
    (x, x_1, x_2) ∈ t →
      toTriangle (x, x_1, x_2) = x✝ →
        ∀ ⦃y : Finset (α ⊕ β ⊕ γ)⦄ (x : α) (x_3 : β) (x_4 : γ),
          (x, x_3, x_4) ∈ t → toTriangle (x, x_3, x_4) = y → ¬x✝ = y → (↑x✝ ∩ ↑y).Subsingleton
tactic: simp only [Finset.coe_map, Set.mem_image, Finset.mem_coe, Prod.exists, Ne,
    forall_exists_index, and_imp]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a a' : α
b b' : β
c c' : γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
x✝ : Finset (α ⊕ β ⊕ γ)
⊢ ∀ (x : α) (x_1 : β) (x_2 : γ),
    (x, x_1, x_2) ∈ t →
      toTriangle (x, x_1, x_2) = x✝ →
        ∀ ⦃y : Finset (α ⊕ β ⊕ γ)⦄ (x : α) (x_3 : β) (x_4 : γ),
          (x, x_3, x_4) ∈ t → toTriangle (x, x_3, x_4) = y → ¬x✝ = y → (↑x✝ ∩ ↑y).Subsingleton
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a✝ a' : α
b✝ b' : β
c✝ c' : γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
a : α
b : β
c : γ
habc : (a, b, c) ∈ t
x : α
y : β
z : γ
hxyz : (x, y, z) ∈ t
h' : ¬toTriangle (a, b, c) = toTriangle (x, y, z)
⊢ (↑(toTriangle (a, b, c)) ∩ ↑(toTriangle (x, y, z))).Subsingleton
tactic: rintro a b c habc rfl e x y z hxyz rfl h'
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a✝ a' : α
b✝ b' : β
c✝ c' : γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
a : α
b : β
c : γ
habc : (a, b, c) ∈ t
x : α
y : β
z : γ
hxyz : (x, y, z) ∈ t
h' : ¬toTriangle (a, b, c) = toTriangle (x, y, z)
⊢ (↑(toTriangle (a, b, c)) ∩ ↑(toTriangle (x, y, z))).Subsingleton
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a✝ a' : α
b✝ b' : β
c✝ c' : γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
a : α
b : β
c : γ
habc : (a, b, c) ∈ t
x : α
y : β
z : γ
hxyz : (x, y, z) ∈ t
h' : ¬toTriangle (a, b, c) = toTriangle (x, y, z)
this : (a, b, c) ≠ (x, y, z)
⊢ (↑(toTriangle (a, b, c)) ∩ ↑(toTriangle (x, y, z))).Subsingleton
tactic: have := ne_of_apply_ne _ h'
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a✝ a' : α
b✝ b' : β
c✝ c' : γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
a : α
b : β
c : γ
habc : (a, b, c) ∈ t
x : α
y : β
z : γ
hxyz : (x, y, z) ∈ t
h' : ¬toTriangle (a, b, c) = toTriangle (x, y, z)
this : (a, b, c) ≠ (x, y, z)
⊢ (↑(toTriangle (a, b, c)) ∩ ↑(toTriangle (x, y, z))).Subsingleton
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a✝ a' : α
b✝ b' : β
c✝ c' : γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
a : α
b : β
c : γ
habc : (a, b, c) ∈ t
x : α
y : β
z : γ
hxyz : (x, y, z) ∈ t
h' : ¬toTriangle (a, b, c) = toTriangle (x, y, z)
this : a = x → b = y → ¬c = z
⊢ (↑(toTriangle (a, b, c)) ∩ ↑(toTriangle (x, y, z))).Subsingleton
tactic: simp only [Ne, Prod.mk.inj_iff, not_and] at this
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a✝ a' : α
b✝ b' : β
c✝ c' : γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
a : α
b : β
c : γ
habc : (a, b, c) ∈ t
x : α
y : β
z : γ
hxyz : (x, y, z) ∈ t
h' : ¬toTriangle (a, b, c) = toTriangle (x, y, z)
this : a = x → b = y → ¬c = z
⊢ (↑(toTriangle (a, b, c)) ∩ ↑(toTriangle (x, y, z))).Subsingleton
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a✝ a' : α
b✝ b' : β
c✝ c' : γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
a : α
b : β
c : γ
habc : (a, b, c) ∈ t
x : α
y : β
z : γ
hxyz : (x, y, z) ∈ t
h' : ¬toTriangle (a, b, c) = toTriangle (x, y, z)
this : a = x → b = y → ¬c = z
⊢ (∀ (a_1 : α),
      Sum.inl a_1 = Sum.inl a →
        Sum.inl a_1 = Sum.inl x →
          (∀ (a_4 : α), Sum.inl a_4 = Sum.inl a → Sum.inl a_4 = Sum.inl x → Sum.inl a_1 = Sum.inl a_4) ∧
            (∀ (a : β),
                Sum.inr (Sum.inl a) = Sum.inr (Sum.inl b) ∨ Sum.inr (Sum.inl a) = Sum.inr (Sum.inr c) →
                  Sum.inr (Sum.inl a) = Sum.inr (Sum.inl y) ∨ Sum.inr (Sum.inl a) = Sum.inr (Sum.inr z) → False) ∧
              ∀ (b_1 : γ),
                Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inl b) ∨ Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inr c) →
                  Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inl y) ∨ Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inr z) → False) ∧
    (∀ (a_1 : β),
        Sum.inr (Sum.inl a_1) = Sum.inr (Sum.inl b) ∨ Sum.inr (Sum.inl a_1) = Sum.inr (Sum.inr c) →
          Sum.inr (Sum.inl a_1) = Sum.inr (Sum.inl y) ∨ Sum.inr (Sum.inl a_1) = Sum.inr (Sum.inr z) →
            (∀ (a_4 : α), Sum.inl a_4 = Sum.inl a → Sum.inl a_4 = Sum.inl x → False) ∧
              (∀ (a : β),
                  Sum.inr (Sum.inl a) = Sum.inr (Sum.inl b) ∨ Sum.inr (Sum.inl a) = Sum.inr (Sum.inr c) →
                    Sum.inr (Sum.inl a) = Sum.inr (Sum.inl y) ∨ Sum.inr (Sum.inl a) = Sum.inr (Sum.inr z) →
                      Sum.inr (Sum.inl a_1) = Sum.inr (Sum.inl a)) ∧
                ∀ (b_1 : γ),
                  Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inl b) ∨ Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inr c) →
                    Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inl y) ∨ Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inr z) →
                      Sum.inr (Sum.inl a_1) = Sum.inr (Sum.inr b_1)) ∧
      ∀ (b_1 : γ),
        Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inl b) ∨ Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inr c) →
          Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inl y) ∨ Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inr z) →
            (∀ (a_3 : α), Sum.inl a_3 = Sum.inl a → Sum.inl a_3 = Sum.inl x → False) ∧
              (∀ (a : β),
                  Sum.inr (Sum.inl a) = Sum.inr (Sum.inl b) ∨ Sum.inr (Sum.inl a) = Sum.inr (Sum.inr c) →
                    Sum.inr (Sum.inl a) = Sum.inr (Sum.inl y) ∨ Sum.inr (Sum.inl a) = Sum.inr (Sum.inr z) →
                      Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inl a)) ∧
                ∀ (b_2 : γ),
                  Sum.inr (Sum.inr b_2) = Sum.inr (Sum.inl b) ∨ Sum.inr (Sum.inr b_2) = Sum.inr (Sum.inr c) →
                    Sum.inr (Sum.inr b_2) = Sum.inr (Sum.inl y) ∨ Sum.inr (Sum.inr b_2) = Sum.inr (Sum.inr z) →
                      Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inr b_2)
tactic: simp only [toTriangle_apply, in₀, in₁, in₂, Set.mem_inter_iff, mem_insert, mem_singleton,
    mem_coe, and_imp, Sum.forall, or_false, forall_eq, false_or, eq_self_iff_true, imp_true_iff,
    true_and, and_true, Set.Subsingleton]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a✝ a' : α
b✝ b' : β
c✝ c' : γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
a : α
b : β
c : γ
habc : (a, b, c) ∈ t
x : α
y : β
z : γ
hxyz : (x, y, z) ∈ t
h' : ¬toTriangle (a, b, c) = toTriangle (x, y, z)
this : a = x → b = y → ¬c = z
⊢ (∀ (a_1 : α),
      Sum.inl a_1 = Sum.inl a →
        Sum.inl a_1 = Sum.inl x →
          (∀ (a_4 : α), Sum.inl a_4 = Sum.inl a → Sum.inl a_4 = Sum.inl x → Sum.inl a_1 = Sum.inl a_4) ∧
            (∀ (a : β),
                Sum.inr (Sum.inl a) = Sum.inr (Sum.inl b) ∨ Sum.inr (Sum.inl a) = Sum.inr (Sum.inr c) →
                  Sum.inr (Sum.inl a) = Sum.inr (Sum.inl y) ∨ Sum.inr (Sum.inl a) = Sum.inr (Sum.inr z) → False) ∧
              ∀ (b_1 : γ),
                Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inl b) ∨ Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inr c) →
                  Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inl y) ∨ Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inr z) → False) ∧
    (∀ (a_1 : β),
        Sum.inr (Sum.inl a_1) = Sum.inr (Sum.inl b) ∨ Sum.inr (Sum.inl a_1) = Sum.inr (Sum.inr c) →
          Sum.inr (Sum.inl a_1) = Sum.inr (Sum.inl y) ∨ Sum.inr (Sum.inl a_1) = Sum.inr (Sum.inr z) →
            (∀ (a_4 : α), Sum.inl a_4 = Sum.inl a → Sum.inl a_4 = Sum.inl x → False) ∧
              (∀ (a : β),
                  Sum.inr (Sum.inl a) = Sum.inr (Sum.inl b) ∨ Sum.inr (Sum.inl a) = Sum.inr (Sum.inr c) →
                    Sum.inr (Sum.inl a) = Sum.inr (Sum.inl y) ∨ Sum.inr (Sum.inl a) = Sum.inr (Sum.inr z) →
                      Sum.inr (Sum.inl a_1) = Sum.inr (Sum.inl a)) ∧
                ∀ (b_1 : γ),
                  Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inl b) ∨ Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inr c) →
                    Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inl y) ∨ Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inr z) →
                      Sum.inr (Sum.inl a_1) = Sum.inr (Sum.inr b_1)) ∧
      ∀ (b_1 : γ),
        Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inl b) ∨ Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inr c) →
          Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inl y) ∨ Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inr z) →
            (∀ (a_3 : α), Sum.inl a_3 = Sum.inl a → Sum.inl a_3 = Sum.inl x → False) ∧
              (∀ (a : β),
                  Sum.inr (Sum.inl a) = Sum.inr (Sum.inl b) ∨ Sum.inr (Sum.inl a) = Sum.inr (Sum.inr c) →
                    Sum.inr (Sum.inl a) = Sum.inr (Sum.inl y) ∨ Sum.inr (Sum.inl a) = Sum.inr (Sum.inr z) →
                      Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inl a)) ∧
                ∀ (b_2 : γ),
                  Sum.inr (Sum.inr b_2) = Sum.inr (Sum.inl b) ∨ Sum.inr (Sum.inr b_2) = Sum.inr (Sum.inr c) →
                    Sum.inr (Sum.inr b_2) = Sum.inr (Sum.inl y) ∨ Sum.inr (Sum.inr b_2) = Sum.inr (Sum.inr z) →
                      Sum.inr (Sum.inr b_1) = Sum.inr (Sum.inr b_2)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a✝ a' : α
b✝ b' : β
c✝ c' : γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
a : α
b : β
c : γ
habc : (a, b, c) ∈ t
x : α
y : β
z : γ
hxyz : (x, y, z) ∈ t
h' : ¬toTriangle (a, b, c) = toTriangle (x, y, z)
this : a = x → b = y → ¬c = z
⊢ ¬(a = x ∧ b = y) ∧ ¬(a = x ∧ c = z) ∧ ¬(b = y ∧ c = z)
tactic: suffices ¬ (a = x ∧ b = y) ∧ ¬ (a = x ∧ c = z) ∧ ¬ (b = y ∧ c = z) by aesop
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a✝ a' : α
b✝ b' : β
c✝ c' : γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
a : α
b : β
c : γ
habc : (a, b, c) ∈ t
x : α
y : β
z : γ
hxyz : (x, y, z) ∈ t
h' : ¬toTriangle (a, b, c) = toTriangle (x, y, z)
this : a = x → b = y → ¬c = z
⊢ ¬(a = x ∧ b = y) ∧ ¬(a = x ∧ c = z) ∧ ¬(b = y ∧ c = z)
state_after: case refine_1
α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a✝ a' : α
b✝ b' : β
c✝ c' : γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
a : α
b : β
c : γ
habc : (a, b, c) ∈ t
x : α
y : β
z : γ
hxyz : (x, y, z) ∈ t
h' : ¬toTriangle (a, b, c) = toTriangle (x, y, z)
this : a = x → b = y → ¬c = z
⊢ ¬(a = x ∧ b = y)

case refine_2
α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a✝ a' : α
b✝ b' : β
c✝ c' : γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
a : α
b : β
c : γ
habc : (a, b, c) ∈ t
x : α
y : β
z : γ
hxyz : (x, y, z) ∈ t
h' : ¬toTriangle (a, b, c) = toTriangle (x, y, z)
this : a = x → b = y → ¬c = z
⊢ ¬(a = x ∧ c = z)

case refine_3
α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a✝ a' : α
b✝ b' : β
c✝ c' : γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : ExplicitDisjoint t
a : α
b : β
c : γ
habc : (a, b, c) ∈ t
x : α
y : β
z : γ
hxyz : (x, y, z) ∈ t
h' : ¬toTriangle (a, b, c) = toTriangle (x, y, z)
this : a = x → b = y → ¬c = z
⊢ ¬(b = y ∧ c = z)
tactic: refine ⟨?_, ?_, ?_⟩