Documentation

Complexitylib.Circuits.Frontier.Layouts.MultiCompression

Terminal compression in every degree #

Keep all edges between blocks, including parallel edges. Endpoint charging bounds the edge count of the terminal core by 3d/(2d-3) times the original cycle rank. Expanding a layout of this multigraph core costs only d log₂ |V| + d.

def Complexity.Frontier.Multigraph.Compression.External {V : Type u_1} {E : Type u_2} {G : Multigraph V E} {d : ℕ} (c : G.Compression d) :
Set E

Edges whose endpoints lie in different blocks.

Equations
Instances For
    noncomputable def Complexity.Frontier.Multigraph.Compression.multiQuotient {V : Type u_1} {E : Type u_2} {G : Multigraph V E} {d : ℕ} (c : G.Compression d) :

    The quotient retaining every edge between blocks.

    Equations
    Instances For
      theorem Complexity.Frontier.Multigraph.Compression.external_of_cut {V : Type u_1} {E : Type u_2} {G : Multigraph V E} {d : ℕ} (c : G.Compression d) {B : ↥c.blocks} {e : E} (he : e ∈ G.cut {v : V | v ∈ ↑B}) :
      theorem Complexity.Frontier.Multigraph.Compression.Terminal.multi_degree_ge_three {V : Type u_1} {E : Type u_2} {G : Multigraph V E} {d : ℕ} (c : G.Compression d) [Finite E] (hc : c.Terminal) (hG : G.Connected) (two : 2 ≤ c.blocks.card) (B : ↥c.blocks) :

      Every merge moves at least one edge inside a block.

      A nontrivial terminal core has at least as many edges as blocks.

      theorem Complexity.Frontier.Multigraph.Compression.Terminal.multi_edge_bound {V : Type u_1} {E : Type u_2} {G : Multigraph V E} {d : ℕ} (c : G.Compression d) [Finite E] (hc : c.Terminal) (hG : G.Connected) (two : 2 ≤ c.blocks.card) :
      (2 * d - 3) * c.External.ncard ≤ 3 * d * G.cycleRank

      The terminal multigraph core has at most 3d/(2d-3) times the original cycle rank edges, expressed without division.

      theorem Complexity.Frontier.Multigraph.Compression.exists_layout_multi {V : Type u_1} {E : Type u_2} {G : Multigraph V E} {d : ℕ} (c : G.Compression d) [Finite V] [Finite E] {key : ↥c.blocks → ℕ} (hkey : Function.Injective key) {X : ℝ} (hX : ∀ (q : ℕ), ↑(c.multiQuotient.cut {B : ↥c.blocks | key B < q}).ncard ≤ X) :
      ∃ (π : Layout V), ∀ (t : ℕ), ↑(G.cut (π.initial t)).ncard ≤ X + ↑d * ↑(Nat.log 2 (Nat.card V)) + ↑d

      Expand any layout of the multigraph core, with only logarithmic additional width.