Graph Coloring #
This module defines colorings of simple graphs (also known as proper colorings in the literature). A graph coloring is the attribution of "colors" to all of its vertices such that adjacent vertices have different colors. A coloring can be represented as a homomorphism into a complete graph, whose vertices represent the colors.
Main definitions #
-
G.Coloring αis the type ofα-colorings of a simple graphG, withαbeing the set of available colors. The type is defined to be homomorphisms fromGinto the complete graph onα, and colorings have a coercion toV → α. -
G.Colorable nis the proposition thatGisn-colorable, which is whether there exists a coloring with at most n colors. -
G.chromaticNumberis the minimalnsuch thatGisn-colorable, or⊤if it cannot be colored with finitely many colors. (Cardinal-valued chromatic numbers are more niche, so we stick toℕ∞.) We writeG.chromaticNumber ≠ ⊤to mean a graph is colorable with finitely many colors. -
C.colorClass cis the set of vertices colored byc : αin the coloringC : G.Coloring α. -
C.colorClassesis the set containing all color classes.
Todo: #
-
Gather material from:
- https://github.com/leanprover-community/mathlib/blob/simple_graph_matching/src/combinatorics/simple_graph/coloring.lean
- https://github.com/kmill/lean-graphcoloring/blob/master/src/graph.lean
-
Trees
-
Planar graphs
-
Chromatic polynomials
-
develop API for partial colorings, likely as colorings of subgraphs (
H.coe.Coloring α)
An α-coloring of a simple graph G is a homomorphism of G into the complete graph on α.
This is also known as a proper coloring.
Equations
- SimpleGraph.Coloring G α = (G →g ⊤)
Instances For
Construct a term of SimpleGraph.Coloring using a function that
assigns vertices to colors and a proof that it is as proper coloring.
(Note: this is a definitionally the constructor for SimpleGraph.Hom,
but with a syntactically better proper coloring hypothesis.)
Equations
- SimpleGraph.Coloring.mk color valid = { toFun := color, map_rel' := valid }
Instances For
The color class of a given color.
Equations
- SimpleGraph.Coloring.colorClass C c = {v : V | C v = c}
Instances For
The set containing all color classes.
Equations
Instances For
Equations
- SimpleGraph.instFintypeColoring = let_fun this := Fintype.ofInjective (fun (f : G.Adj →r ⊤.Adj) => ⇑f) ⋯; this
Whether a graph can be colored by at most n colors.
Equations
- SimpleGraph.Colorable G n = Nonempty (SimpleGraph.Coloring G (Fin n))
Instances For
The coloring of an empty graph.
Equations
- SimpleGraph.coloringOfIsEmpty G = SimpleGraph.Coloring.mk (fun (a : V) => isEmptyElim a) ⋯
Instances For
The "tautological" coloring of a graph, using the vertices of the graph as colors.
Equations
Instances For
The chromatic number of a graph is the minimal number of colors needed to color it.
This is ⊤ (infinity) iff G isn't colorable with finitely many colors.
If G is colorable, then ENat.toNat G.chromaticNumber is the ℕ-valued chromatic number.
Equations
- SimpleGraph.chromaticNumber G = ⨅ n ∈ setOf (SimpleGraph.Colorable G), ↑n
Instances For
Given an embedding, there is an induced embedding of colorings.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Given an equivalence, there is an induced equivalence between colorings.
Equations
- One or more equations did not get rendered due to their size.
Instances For
There is a noncomputable embedding of α-colorings to β-colorings if
β has at least as large a cardinality as α.
Equations
Instances For
Noncomputably get a coloring from colorability.
Equations
- SimpleGraph.Colorable.toColoring hc hn = (SimpleGraph.recolorOfCardLE G ⋯) (Nonempty.some hc)
Instances For
The bicoloring of a complete bipartite graph using whether a vertex is on the left or on the right.
Equations
- SimpleGraph.CompleteBipartiteGraph.bicoloring V W = SimpleGraph.Coloring.mk (fun (v : V ⊕ W) => Sum.isRight v) ⋯