The clique tree of maximal cliques #
The bag decomposition attached to a perfect elimination order (CliqueTree/PEO.lean) does not ask
the bags to be maximal cliques, so it usually contains redundant bags. This file removes them:
for a finite chordal graph we build a clique tree whose bags are exactly the maximal cliques of
the graph, each occurring once (bag is injective).
The construction is by elimination of simplicial vertices. Writing S' = S \ {v} for a simplicial
vertex v of G[S] and C = N(v) ∩ S':
- if
Cis already a maximal clique ofG[S'], the bagCis replaced byC ∪ {v}; - otherwise a new leaf bag
C ∪ {v}is attached to a maximal clique ofG[S']containingC.
Both steps preserve the running-intersection property, the maximality of every bag and the fact that every maximal clique occurs as a bag.
Main definitions #
SimpleGraph.IsMaximalCliqueOn— maximal cliques of the subgraph induced on a finite vertex setSimpleGraph.MaxCliqueForest— the data produced by the induction
Main results #
SimpleGraph.IsChordal.exists_maximalCliqueTree— a finite chordal graph has a clique tree whose bags are precisely its maximal cliques, without repetitionsSimpleGraph.IsPEO.exists_eq_peoBag_of_isMaximalCliqueOn— every maximal clique is one of the PEO bags, namely the bag of its earliest vertex (so removing redundant bags loses nothing)
Simplicial elimination: how the maximal cliques change #
The closed neighbourhood of a simplicial vertex is a clique.
The open neighbourhood of a simplicial vertex is a clique.
The closed neighbourhood of a simplicial vertex is a maximal clique.
A maximal clique containing the eliminated vertex is its closed neighbourhood.
A maximal clique avoiding the eliminated vertex stays maximal after the elimination.
Conversely, a maximal clique of the smaller graph other than the neighbourhood C is still a
maximal clique of the bigger one.
The maximal-clique forest #
The data assembled by the simplicial-elimination induction: a rooted forest of bags indexed by
naturals below size, whose bags are exactly the maximal cliques of G[S].
- size : ℕ
Number of nodes.
The bag of a node.
The parent of a node.
- top : V → ℕ
The highest node whose bag contains a given vertex.
There is at least one node.
Parents have smaller indices.
- bag_maximal (i : ℕ) : i < self.size → G.IsMaximalCliqueOn S (self.bag i)
Every bag is a maximal clique of
G[S]. - exists_bag (K : Finset V) : G.IsMaximalCliqueOn S K → ∃ i < self.size, self.bag i = K
Every maximal clique of
G[S]is a bag. No bag is repeated.
Tops are nodes.
Every vertex of
Slies in its top bag.- climb (i : ℕ) : i < self.size → ∀ v ∈ self.bag i, i ≠ self.top v → ∃ (j : ℕ), self.parent i = some j ∧ v ∈ self.bag j
Local running-intersection property.
Instances For
The empty vertex set carries a one-node forest.
Elimination step when the neighbourhood of the simplicial vertex is already a maximal clique: the corresponding bag is enlarged by the eliminated vertex.
Elimination step when the neighbourhood of the simplicial vertex is not maximal: a new leaf bag is attached to a maximal clique containing it.
Simplicial elimination. A finite chordal graph has a maximal-clique forest on every vertex subset.
The clique tree of maximal cliques. A finite chordal graph carries a clique tree whose bags are exactly its maximal cliques, each occurring exactly once.
No maximal clique is lost by removing redundant bags. Along a perfect elimination order, every maximal clique is the bag of its earliest vertex.