Documentation

LeanPool.BrillNoetherGraphs.TreewidthGonality.Treewidth.SeymourThomasInduction

The Bellenbaum--Diestel induction #

The forward half of the tree-width duality theorem: if no bramble of H has order > k, then treewidth H < k, proved exactly as in Bellenbaum--Diestel, Two short proofs concerning tree-decompositions, Theorem 5, except that the appeal to Menger's theorem is replaced by the explicit separator rerootSep below.

The induction #

A decomposition is ๐”…-admissible when every bag of order > k fails to cover ๐”…. The statement proved by induction is

for every bramble ๐”… there is a ๐”…-admissible decomposition of H,

by induction on 2 ^ |V| โˆ’ |๐”….members|, i.e. downward on the number of members: the induction hypothesis is applied to ๐”… โˆช {C} for a component C of H โˆ’ X, X a minimum cover of ๐”…. Applying the result to the empty bramble โ€” every set covers it โ€” forces every bag to have at most k vertices, hence treewidth H โ‰ค k โˆ’ 1.

The Menger-free step #

Where the paper produces โ„“ = |X| disjoint Xโ€“V_s paths from Menger's theorem and reads |W_t| โ‰ค |V_t| off them, this development exhibits the single set

rerootSep t = (bag t \ (C โˆช X)) โˆช (X \ (Z t \ bag t))

directly, proves that it separates X from bag s (rerootSep_separates, using only Lemma 1), and concludes |rerootSep t| โ‰ฅ |X| from Lemma 4 plus minimality of X โ€” the same two facts the paper already uses. The counting then falls out (rerootBag_card_le). Mathlib has no Menger's theorem, no vertex separators, and no treewidth, so this is what makes the campaign finite.

Admissibility #

def Utilities.Treewidth.Bramble.Admissible {V : Type u} [DecidableEq V] {H : SimpleGraph V} (k : โ„•) (๐”… : Bramble H) {U : Finset V} (D : PartialDecomposition H U) :

A partial decomposition is ๐”…-admissible when every bag with more than k vertices fails to cover ๐”….

Equations
Instances For
    theorem Utilities.Treewidth.Bramble.admissible_single {V : Type u} [DecidableEq V] {H : SimpleGraph V} (๐”… : Bramble H) {k : โ„•} {X : Finset V} (h : X.card โ‰ค k) :

    The one-bag decomposition is admissible as soon as its bag is small.

    theorem Utilities.Treewidth.Bramble.admissible_pairDecomp {V : Type u} [DecidableEq V] {H : SimpleGraph V} (๐”… : Bramble H) {k : โ„•} {X Y : Finset V} (hedge : โˆ€ v โˆˆ X โˆช Y, โˆ€ w โˆˆ X โˆช Y, H.Adj v w โ†’ v โˆˆ X โˆง w โˆˆ X โˆจ v โˆˆ Y โˆง w โˆˆ Y) (hX : X.card โ‰ค k) (hY : ยฌ๐”….IsHittingSet Y) :

    The two-bag decomposition is admissible when one bag is small and the other fails to cover.

    theorem Utilities.Treewidth.Bramble.admissible_join {V : Type u} [DecidableEq V] {H : SimpleGraph V} (๐”… : Bramble H) {k : โ„•} {Uโ‚ Uโ‚‚ X : Finset V} {Dโ‚ : PartialDecomposition H Uโ‚} {rโ‚ : Dโ‚.Node} {hโ‚ : Dโ‚.bag rโ‚ = X} {Dโ‚‚ : PartialDecomposition H Uโ‚‚} {rโ‚‚ : Dโ‚‚.Node} {hโ‚‚ : Dโ‚‚.bag rโ‚‚ = X} {hcap : โˆ€ v โˆˆ Uโ‚, v โˆˆ Uโ‚‚ โ†’ v โˆˆ X} {hsep : โˆ€ v โˆˆ Uโ‚, โˆ€ w โˆˆ Uโ‚‚, v โˆ‰ X โ†’ w โˆ‰ X โ†’ ยฌH.Adj v w} (aโ‚ : Admissible k ๐”… Dโ‚) (aโ‚‚ : Admissible k ๐”… Dโ‚‚) :
    Admissible k ๐”… (Dโ‚.join rโ‚ hโ‚ Dโ‚‚ rโ‚‚ hโ‚‚ hcap hsep)

    A join of admissible decompositions is admissible: its bags are exactly the bags of the two pieces.

    Two small brambles #

    The empty bramble. Every set covers it, which is what makes the base case of the induction say something.

    Equations
    Instances For

      A one-element vertex set induces a connected subgraph.

      The one-member bramble {{v}}, of order 1. It is what rules out k = 0 when V is nonempty.

      Equations
      Instances For

        Adding one member #

        def Utilities.Treewidth.Bramble.insertMember {V : Type u} [DecidableEq V] {H : SimpleGraph V} (๐”… : Bramble H) (C : Finset V) (hC : (SimpleGraph.induce (โ†‘C) H).Connected) (htouch : โˆ€ B โˆˆ ๐”….members, (SimpleGraph.induce (โ†‘(C โˆช B)) H).Connected) :

        Adjoin a connected set touching every member.

        Equations
        Instances For
          @[simp]
          theorem Utilities.Treewidth.Bramble.insertMember_members {V : Type u} [DecidableEq V] {H : SimpleGraph V} (๐”… : Bramble H) (C : Finset V) (hC : (SimpleGraph.induce (โ†‘C) H).Connected) (htouch : โˆ€ B โˆˆ ๐”….members, (SimpleGraph.induce (โ†‘(C โˆช B)) H).Connected) :
          (๐”….insertMember C hC htouch).members = insert C ๐”….members
          theorem Utilities.Treewidth.Bramble.card_lt_card_insertMember {V : Type u} [DecidableEq V] {H : SimpleGraph V} (๐”… : Bramble H) (C : Finset V) (hC : (SimpleGraph.induce (โ†‘C) H).Connected) (htouch : โˆ€ B โˆˆ ๐”….members, (SimpleGraph.induce (โ†‘(C โˆช B)) H).Connected) (hCnot : C โˆ‰ ๐”….members) :
          ๐”….members.card < (๐”….insertMember C hC htouch).members.card

          The rerooted decomposition ๐’Ÿ_s(H) #

          noncomputable def Utilities.Treewidth.rerootZ {V : Type u} [Fintype V] {H : SimpleGraph V} (D : PartialDecomposition H Finset.univ) (s : D.Node) (X : Finset V) (home : V โ†’ D.Node) (t : D.Node) :

          The paper's {x โˆˆ X | t โˆˆ t_x T s}.

          Equations
          Instances For
            theorem Utilities.Treewidth.mem_rerootZ_iff {V : Type u} [Fintype V] {H : SimpleGraph V} (D : PartialDecomposition H Finset.univ) (s : D.Node) (X : Finset V) (home : V โ†’ D.Node) (t : D.Node) (x : V) :
            x โˆˆ rerootZ D s X home t โ†” x โˆˆ X โˆง t โˆˆ Anc โ‹ฏ s (home x)
            noncomputable def Utilities.Treewidth.rerootBag {V : Type u} [Fintype V] [DecidableEq V] {H : SimpleGraph V} (D : PartialDecomposition H Finset.univ) (s : D.Node) (X C : Finset V) (home : V โ†’ D.Node) (t : D.Node) :

            The paper's W_t := (V_t โˆฉ V(H)) โˆช {x โˆˆ X | t โˆˆ t_x T s}, with V(H) = C โˆช X.

            Equations
            Instances For
              noncomputable def Utilities.Treewidth.rerootSep {V : Type u} [Fintype V] [DecidableEq V] {H : SimpleGraph V} (D : PartialDecomposition H Finset.univ) (s : D.Node) (X C : Finset V) (home : V โ†’ D.Node) (t : D.Node) :

              The separator that replaces Menger's theorem: S t = (V_t \ (C โˆช X)) โˆช (X \ Y_t) with Y_t = Z_t \ V_t.

              Equations
              Instances For
                theorem Utilities.Treewidth.rerootSep_separates {V : Type u} [Fintype V] [DecidableEq V] {H : SimpleGraph V} {D : PartialDecomposition H Finset.univ} {s : D.Node} {X C : Finset V} {home : V โ†’ D.Node} (hhome : โˆ€ x โˆˆ X, x โˆˆ D.bag (home x)) (hC : IsComponent H X C) (hsC : โˆ€ v โˆˆ D.bag s, v โˆ‰ C) (t : D.Node) (a : V) :
                a โˆˆ X โ†’ โˆ€ b โˆˆ D.bag s, โˆ€ (p : H.Walk a b), โˆƒ x โˆˆ p.support, x โˆˆ rerootSep D s X C home t

                The Menger-free separation lemma (blueprint ยง4, Lemma ST-Sep). Screened exhaustively over all configurations with |V| โ‰ค 4 and |T| โ‰ค 3 (680496 of them) and randomly to |V| = 7 before being written down.

                Discharge plan. Suppose a walk from a โˆˆ X to b โˆˆ bag s avoids rerootSep t. Pass to a path P meeting X only in its first vertex x and bag s only in its last vertex v (Walk.dropUntil at the last X-vertex, then Walk.takeUntil at the first bag s-vertex; both preserve avoidance). Then x โˆ‰ rerootSep t forces x โˆˆ Z t and x โˆ‰ bag t.

                • If t = s: v โˆˆ bag s = bag t, and avoidance puts v โˆˆ C โˆช X; v โˆˆ C contradicts hsC, and v โˆˆ X forces v = x, contradicting x โˆ‰ bag t.
                • Otherwise separates_of_mem_anc (with na := home x, nb := s, using anc_root for t โˆ‰ Anc s s) puts a vertex y โˆˆ bag t on P; avoidance gives y โˆˆ C โˆช X; y โˆˆ X forces y = x, again impossible, so y โˆˆ C. But P starts outside C and ends outside C, so the successor of the last C-vertex of P is an H-neighbour of C outside C, hence in X by hC.closed, hence equal to x โ€” impossible, since P is a path and x is its first vertex.
                theorem Utilities.Treewidth.rerootBag_card_le {V : Type u} [Fintype V] [DecidableEq V] {H : SimpleGraph V} {D : PartialDecomposition H Finset.univ} {s : D.Node} {X C : Finset V} {home : V โ†’ D.Node} (๐”… : Bramble H) (hXcov : ๐”….IsHittingSet X) (hXmin : โˆ€ (S : Finset V), ๐”….IsHittingSet S โ†’ X.card โ‰ค S.card) (hscov : ๐”….IsHittingSet (D.bag s)) (hhome : โˆ€ x โˆˆ X, x โˆˆ D.bag (home x)) (hC : IsComponent H X C) (hsC : โˆ€ v โˆˆ D.bag s, v โˆ‰ C) (t : D.Node) :
                (rerootBag D s X C home t).card โ‰ค (D.bag t).card

                Lemma 2, Menger-free (blueprint ยง4, Lemma ST-Card).

                Discharge plan: rerootSep_separates + Bramble.isHittingSet_of_separates (Lemma 4) make rerootSep t a cover of ๐”…, so hXmin gives X.card โ‰ค (rerootSep t).card. The two pieces of rerootSep t are disjoint, so this reads |Z t \ bag t| โ‰ค |bag t \ (C โˆช X)|; add |bag t โˆฉ (C โˆช X)| to both sides.

                noncomputable def Utilities.Treewidth.rerootDecomp {V : Type u} [Fintype V] [DecidableEq V] {H : SimpleGraph V} {D : PartialDecomposition H Finset.univ} {s : D.Node} {X C : Finset V} {home : V โ†’ D.Node} (hhome : โˆ€ x โˆˆ X, x โˆˆ D.bag (home x)) (_hsC : โˆ€ v โˆˆ D.bag s, v โˆ‰ C) (_hC : IsComponent H X C) :

                ๐’Ÿ_s(H): the same tree, the same isTree, only the bags change. This is why the campaign never needs to re-root a tree.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  @[simp]
                  theorem Utilities.Treewidth.rerootDecomp_bag {V : Type u} [Fintype V] [DecidableEq V] {H : SimpleGraph V} {D : PartialDecomposition H Finset.univ} {s : D.Node} {X C : Finset V} {home : V โ†’ D.Node} (hhome : โˆ€ x โˆˆ X, x โˆˆ D.bag (home x)) (hsC : โˆ€ v โˆˆ D.bag s, v โˆ‰ C) (hC : IsComponent H X C) (t : D.Node) :
                  (rerootDecomp hhome hsC hC).bag t = rerootBag D s X C home t
                  theorem Utilities.Treewidth.rerootBag_root {V : Type u} [Fintype V] [DecidableEq V] {H : SimpleGraph V} {D : PartialDecomposition H Finset.univ} {s : D.Node} {X C : Finset V} {home : V โ†’ D.Node} (_hhome : โˆ€ x โˆˆ X, x โˆˆ D.bag (home x)) (hsC : โˆ€ v โˆˆ D.bag s, v โˆ‰ C) :
                  rerootBag D s X C home s = X

                  W_s = X.

                  The per-component step #

                  theorem Utilities.Treewidth.component_step {V : Type u} [Fintype V] [DecidableEq V] {H : SimpleGraph V} (k : โ„•) (๐”… : Bramble H) (IH : โˆ€ (๐”…' : Bramble H), ๐”….members.card < ๐”…'.members.card โ†’ โˆƒ (D : PartialDecomposition H Finset.univ), Bramble.Admissible k ๐”…' D) (hno : ยฌโˆƒ (D : PartialDecomposition H Finset.univ), Bramble.Admissible k ๐”… D) (X : Finset V) (hXcov : ๐”….IsHittingSet X) (hXmin : โˆ€ (S : Finset V), ๐”….IsHittingSet S โ†’ X.card โ‰ค S.card) (hXk : X.card โ‰ค k) (C : Finset V) (hC : IsComponent H X C) :
                  โˆƒ (D : PartialDecomposition H (C โˆช X)), Bramble.Admissible k ๐”… D โˆง โˆƒ (r : D.Node), D.bag r = X

                  The paper's (โˆ—), with the "there is nothing more to show" escape already discharged by the ambient hno.

                  Discharge plan. Put ๐”…' := ๐”… โˆช {C}.

                  • If some B โˆˆ ๐”….members fails to touch C, then Y := C โˆช N(C) misses B, so PartialDecomposition.pairDecomp H X Y is admissible (Bramble.admissible_pairDecomp), and N(C) โІ X makes X โˆช Y = C โˆช X.
                  • Otherwise ๐”…' is a bramble with strictly more members (C โˆ‰ ๐”….members because X covers ๐”… and C โˆฉ X = โˆ…), so IH gives a ๐”…'-admissible ๐’Ÿ. By hno, ๐’Ÿ is not ๐”…-admissible: some bag s with k < |bag s| covers ๐”…. Since ๐’Ÿ is ๐”…'-admissible, bag s misses C. Then rerootDecomp is the required decomposition: rerootBag_root gives the X part, and admissibility is the paper's last paragraph โ€” a bag W t with k < |W t| meets C, so V t meets C, so V t misses some B โˆˆ ๐”… (๐”…'-admissibility of ๐’Ÿ and k < |W t| โ‰ค |V t| by rerootBag_card_le); and W t misses that same B, since a vertex of W t โˆฉ B outside V t lies in X, making B a connected set meeting bag s and bag (home x) but not bag t, contradicting separates_of_mem_anc.

                  Gluing over the components #

                  theorem Utilities.Treewidth.exists_admissible_of_closed {V : Type u} [DecidableEq V] {H : SimpleGraph V} (k : โ„•) (๐”… : Bramble H) (X : Finset V) (hXk : X.card โ‰ค k) (hstep : โˆ€ (C : Finset V), IsComponent H X C โ†’ โˆƒ (D : PartialDecomposition H (C โˆช X)), Bramble.Admissible k ๐”… D โˆง โˆƒ (r : D.Node), D.bag r = X) (n : โ„•) (R : Finset V) :
                  R.card โ‰ค n โ†’ IsClosedAway H X R โ†’ โˆƒ (D : PartialDecomposition H (R โˆช X)), Bramble.Admissible k ๐”… D โˆง โˆƒ (r : D.Node), D.bag r = X

                  Fold PartialDecomposition.join over a closed set of vertices, one component at a time.

                  Discharge plan: strong induction on R.card. R = โˆ… is PartialDecomposition.single H X (Bramble.admissible_single). Otherwise pick v โˆˆ R, put C := compOf H X R v (a component by isComponent_compOf, inside R by compOf_subset), apply hstep to C and the induction hypothesis to R \ C (closed by isClosedAway_sdiff, smaller by card_sdiff_compOf_lt), and join them along X. hcap holds because C and R \ C are disjoint and both miss X; hsep holds because hC.closed forbids H-edges from C to R \ C.

                  The induction, and its consequence for the treewidth #

                  theorem Utilities.Treewidth.exists_admissible {V : Type u} [Fintype V] [DecidableEq V] {H : SimpleGraph V} (k : โ„•) (hk : โˆ€ (๐”… : Bramble H), ๐”….order โ‰ค k) (๐”… : Bramble H) :
                  โˆƒ (D : PartialDecomposition H Finset.univ), Bramble.Admissible k ๐”… D

                  Theorem 5, forward direction. If no bramble of H has order > k, then every bramble has an admissible decomposition.

                  Discharge plan: induction on n bounding Fintype.card (Finset V) โˆ’ ๐”….members.card. by_contra hno; take X a minimum cover of ๐”… (Bramble.exists_isHittingSet_card_eq_order plus Bramble.order_le_card_of_isHittingSet), note X.card = ๐”….order โ‰ค k by hk; feed component_step into exists_admissible_of_closed with R := Finset.univ \ X, and rewrite (Finset.univ \ X) โˆช X = Finset.univ.

                  theorem Utilities.Treewidth.treewidth_le_of_forall_order_le {V : Type u} [DecidableEq V] {H : SimpleGraph V} [Finite V] (k : โ„•) (hk : โˆ€ (๐”… : Bramble H), ๐”….order โ‰ค k) :

                  Applying exists_admissible to the empty bramble bounds the treewidth.

                  Discharge plan: admissibility for Bramble.empty says no bag has more than k vertices (every set covers the empty bramble, Bramble.isHittingSet_empty), so width โ‰ค k โˆ’ 1; then treewidth_le_width on toTreeDecomposition.

                  theorem Utilities.Treewidth.exists_bramble_treewidth_succ_le {V : Type u} [DecidableEq V] [Finite V] [Nonempty V] (H : SimpleGraph V) :
                  โˆƒ (๐”… : Bramble H), treewidth H + 1 โ‰ค ๐”….order

                  The hard half of Seymour--Thomas duality: some bramble has order at least treewidth H + 1.

                  Discharge plan: apply treewidth_le_of_forall_order_le with k := treewidth H. If every bramble had order โ‰ค treewidth H we would get treewidth H โ‰ค treewidth H โˆ’ 1, impossible unless treewidth H = 0; and treewidth H = 0 is excluded because Bramble.singletonBramble H v has order โ‰ฅ 1 (this is where Nonempty V is used).