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
sin a finite abelian groupGof odd order, we construct a tripartite graph onG ⊕ G ⊕ G. The triangle indices are(x, x + a, x + 2 * a)forxany element anda ∈ s. The explicit triangles are always edge-disjoint and there is no accidental triangle ifsis 3AP-free. - The proof of the corners theorem from the triangle removal lemma: For a set
sin 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,dare horizontal, vertical, diagonal lines that intersect in an element ofs. The explicit triangles are always edge-disjoint and there is no accidental triangle ifsis 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 → 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 → 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 → 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 → 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 → 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 → 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.