Clique trees (rooted clique forests) of a finite graph #
This file introduces a reusable, Mathlib-style structure for clique trees: tree decompositions
whose bags are cliques of the ambient graph, presented in rooted form. A rooted presentation is
carried by a partial parent function together with a strictly decreasing rank, which makes the
whole ancestor calculus available by well-founded recursion and turns the running-intersection
property into a single local climb condition.
The structure is deliberately independent of chordality: this file develops the general API, and the companion files construct clique trees of chordal graphs (from a perfect elimination order, and with maximal-clique bags).
Main definitions #
SimpleGraph.CliqueTree— a rooted clique forest forG: clique bags, a parent function with strictly decreasing rank, a distinguished top nodetop vfor every vertex, edge covering, and the local climb condition.SimpleGraph.CliqueTree.IsAncestor— reflexive-transitive closure ofparent.SimpleGraph.CliqueTree.IsLeaf— a node that is nobody's parent.SimpleGraph.CliqueTree.privateVerts— vertices occurring in exactly one bag.SimpleGraph.CliqueTree.branch— the set of vertices covered by the subtree below a node.SimpleGraph.CliqueTree.edgeBag— the canonical bag assigned to an edge.
Main results #
SimpleGraph.CliqueTree.mem_bag_of_isAncestor— intersection property: the nodes whose bag contains a fixed vertex form a connected (upward closed untiltop v) part of the forest.SimpleGraph.CliqueTree.branch_separator— branch separation: for a tree edgei → j, the intersectionbag i ∩ bag jseparates the branch belowifrom the rest of the graph.SimpleGraph.CliqueTree.isSimplicial_of_mem_privateVerts— a vertex lying in a single bag is simplicial.SimpleGraph.CliqueTree.exists_bag_ne_of_isLeaf— leaf elimination: after deleting a leaf, every edge not incident to a private vertex of that leaf is still covered.SimpleGraph.CliqueTree.existsUnique_edgeBag— unique edge assignment: every edge belongs to a unique deepest bag.SimpleGraph.CliqueTree.card_edgeFinset_eq_sum_fiber— accounting: the edges ofGare partitioned by their assigned bags.
A clique tree (rooted clique forest) of G indexed by ι.
bag i are cliques of G covering all vertices and all edges; parent organises the nodes into
a rooted forest (made acyclic by the strictly decreasing rank); top v is the highest node whose
bag contains v, and mem_bag_parent is the local form of the running-intersection property: a
bag containing v which is not top v passes v on to its parent.
- bag : ι → Finset V
The bag (clique) attached to a node.
- parent : ι → Option ι
The parent of a node,
noneat a root. - rank : ι → ℕ
A rank witnessing acyclicity; it also distinguishes nodes.
- top : V → ι
The top node of a vertex: the highest bag containing it.
- rank_injective : Function.Injective self.rank
Distinct nodes have distinct ranks.
The rank strictly decreases towards the root.
Every bag is a clique.
Every vertex lies in its own top bag.
Every edge lies in some bag.
- mem_bag_parent {i : ι} {v : V} : v ∈ self.bag i → i ≠ self.top v → ∃ (j : ι), self.parent i = some j ∧ v ∈ self.bag j
Local running-intersection property.
Instances For
Every vertex lies in some bag.
T.IsAncestor i j means that j occurs on the chain of parents starting at i
(inclusively).
Equations
- T.IsAncestor i j = Relation.ReflTransGen (fun (a b : ι) => T.parent a = some b) i j
Instances For
The ancestor relation is antisymmetric.
Ancestors of a fixed node are linearly ordered.
Following parents from any bag containing v eventually reaches T.top v.
Intersection property. If v lies in the bag of i, then it lies in the bag of every node
between i and T.top v.
A leaf of the clique forest: a node which is nobody's parent.
Instances For
A finite nonempty clique forest has a leaf.
The vertices occurring in exactly one bag, namely in the bag of i.
Instances For
A vertex lying in a single bag is simplicial: all of its neighbours are in that bag, which is a clique.
Leaf elimination. Every edge whose endpoints are not private to a leaf i is covered by a
bag different from i; hence deleting the leaf together with its private vertices leaves a covered
graph.
The set of vertices covered by the subtree hanging below i.
Instances For
Branch separation. For a tree edge i → j, every G-edge leaving the branch below i
does so through the separator bag i ∩ bag j.
The separator of a tree edge disconnects: no G-edge joins the branch below i (minus the
separator) to the outside of that branch.
Unique edge assignment and accounting #
The canonical bag of an edge: the deeper of the two top bags of its endpoints.
Equations
Instances For
Unique edge assignment. Every edge lies in a unique bag below all bags containing it.
Accounting. The edges of G are partitioned according to their assigned bags.
Every edge assigned to i has both endpoints in bag i.