Construct a tripartite graph from its triangles #
This file contains the construction of a simple graph on α ⊕ β ⊕ γ
from a list of triangles
(a, b, c)
(with a
in the first component, b
in the second, c
in the third).
We call
t : Finset (α × β × γ)
the set of triangle indices (its elements are not triangles within the graph but instead index them).- explicit a triangle of the constructed graph coming from a triangle index.
- accidental a triangle of the constructed graph not coming from a triangle index.
The two important properties of this construction are:
SimpleGraph.TripartiteFromTriangles.ExplicitDisjoint
: Whether the explicit triangles are edge-disjoint.SimpleGraph.TripartiteFromTriangles.NoAccidental
: Whether all triangles are explicit.
This construction shows up unrelatedly twice in the theory of Roth numbers:
- The lower bound of the Ruzsa-Szemerédi problem: From a set
s
in a finite abelian groupG
of odd order, we construct a tripartite graph onG ⊕ G ⊕ G
. The triangle indices are(x, x + a, x + 2 * a)
forx
any element anda ∈ s
. The explicit triangles are always edge-disjoint and there is no accidental triangle ifs
is 3AP-free. - The proof of the corners theorem from the triangle removal lemma: For a set
s
in a finite abelian groupG
, we construct a tripartite graph onG ⊕ G ⊕ G
, whose vertices correspond to the horizontal, vertical and diagonal lines inG × G
. The explicit triangles are(h, v, d)
whereh
,v
,d
are horizontal, vertical, diagonal lines that intersect in an element ofs
. The explicit triangles are always edge-disjoint and there is no accidental triangle ifs
is corner-free.
The underlying relation of the tripartite-from-triangles graph.
Two vertices are related iff there exists a triangle index containing them both.
- in₀₁: ∀ {α : Type u_1} {β : Type u_2} {γ : Type u_3} {t : Finset (α × β × γ)} ⦃a : α⦄ ⦃b : β⦄ ⦃c : γ⦄, (a, b, c) ∈ t → SimpleGraph.TripartiteFromTriangles.Rel t (Sum3.in₀ a) (Sum3.in₁ b)
- in₁₀: ∀ {α : Type u_1} {β : Type u_2} {γ : Type u_3} {t : Finset (α × β × γ)} ⦃a : α⦄ ⦃b : β⦄ ⦃c : γ⦄, (a, b, c) ∈ t → SimpleGraph.TripartiteFromTriangles.Rel t (Sum3.in₁ b) (Sum3.in₀ a)
- in₀₂: ∀ {α : Type u_1} {β : Type u_2} {γ : Type u_3} {t : Finset (α × β × γ)} ⦃a : α⦄ ⦃b : β⦄ ⦃c : γ⦄, (a, b, c) ∈ t → SimpleGraph.TripartiteFromTriangles.Rel t (Sum3.in₀ a) (Sum3.in₂ c)
- in₂₀: ∀ {α : Type u_1} {β : Type u_2} {γ : Type u_3} {t : Finset (α × β × γ)} ⦃a : α⦄ ⦃b : β⦄ ⦃c : γ⦄, (a, b, c) ∈ t → SimpleGraph.TripartiteFromTriangles.Rel t (Sum3.in₂ c) (Sum3.in₀ a)
- in₁₂: ∀ {α : Type u_1} {β : Type u_2} {γ : Type u_3} {t : Finset (α × β × γ)} ⦃a : α⦄ ⦃b : β⦄ ⦃c : γ⦄, (a, b, c) ∈ t → SimpleGraph.TripartiteFromTriangles.Rel t (Sum3.in₁ b) (Sum3.in₂ c)
- in₂₁: ∀ {α : Type u_1} {β : Type u_2} {γ : Type u_3} {t : Finset (α × β × γ)} ⦃a : α⦄ ⦃b : β⦄ ⦃c : γ⦄, (a, b, c) ∈ t → SimpleGraph.TripartiteFromTriangles.Rel t (Sum3.in₂ c) (Sum3.in₁ b)
Instances For
The tripartite-from-triangles graph. Two vertices are related iff there exists a triangle index containing them both.
Equations
- SimpleGraph.TripartiteFromTriangles.graph t = { Adj := SimpleGraph.TripartiteFromTriangles.Rel t, symm := ⋯, loopless := ⋯ }
Instances For
Predicate on the triangle indices for there to be no accidental triangle.
Note that we cheat a bit, since the exact translation of this informal description would have
(a', b', c') ∈ t
as a conclusion rather than a = a' ∨ b = b' ∨ c = c'
. Those conditions are
equivalent when the explicit triangles are edge-disjoint (which is the case we care about).
Instances
Equations
- SimpleGraph.TripartiteFromTriangles.graph.instDecidableRelAdj (Sum.inl _a) (Sum.inl _a') = isFalse ⋯
- SimpleGraph.TripartiteFromTriangles.graph.instDecidableRelAdj (Sum.inl _a) (Sum.inr (Sum.inl _b')) = decidable_of_iff' (∃ x ∈ t, x.1 = _a ∧ x.2.1 = _b') ⋯
- SimpleGraph.TripartiteFromTriangles.graph.instDecidableRelAdj (Sum.inl _a) (Sum.inr (Sum.inr _c')) = decidable_of_iff' (∃ x ∈ t, x.1 = _a ∧ x.2.2 = _c') ⋯
- SimpleGraph.TripartiteFromTriangles.graph.instDecidableRelAdj (Sum.inr (Sum.inl _b)) (Sum.inl _a') = decidable_of_iff' (∃ x ∈ t, x.2.1 = _b ∧ x.1 = _a') ⋯
- SimpleGraph.TripartiteFromTriangles.graph.instDecidableRelAdj (Sum.inr (Sum.inl _b)) (Sum.inr (Sum.inl _b')) = isFalse ⋯
- SimpleGraph.TripartiteFromTriangles.graph.instDecidableRelAdj (Sum.inr (Sum.inl _b)) (Sum.inr (Sum.inr _b')) = decidable_of_iff' (∃ x ∈ t, x.2.1 = _b ∧ x.2.2 = _b') ⋯
- SimpleGraph.TripartiteFromTriangles.graph.instDecidableRelAdj (Sum.inr (Sum.inr _c)) (Sum.inl _a') = decidable_of_iff' (∃ x ∈ t, x.2.2 = _c ∧ x.1 = _a') ⋯
- SimpleGraph.TripartiteFromTriangles.graph.instDecidableRelAdj (Sum.inr (Sum.inr _c)) (Sum.inr (Sum.inl _b')) = decidable_of_iff' (∃ x ∈ t, x.2.2 = _c ∧ x.2.1 = _b') ⋯
- SimpleGraph.TripartiteFromTriangles.graph.instDecidableRelAdj (Sum.inr (Sum.inr _c)) (Sum.inr (Sum.inr _b')) = isFalse ⋯
This lemma reorders the elements of a triangle in the tripartite graph. It turns a triangle
{x, y, z}
into a triangle {a, b, c}
where a : α
, b : β
, c : γ
.
The map that turns a triangle index into an explicit triangle.