Multiway cut
AbbreviationMultiway cut instances#✓fully proved
A multiway cut instance is a tuple \((n, E, T, K)\) consisting of a natural number \(n\) (the number of vertices), a list \(E\) of pairs of natural numbers (the edges), a list \(T\) of natural numbers (the terminals) and a natural number \(K\) (the bound on the number of cut edges).
DefinitionWell-formed multiway cut instances#✓fully proved
A multiway cut instance \((n, E, T, K)\) is well-formed when the entries of \(E\) are pairwise distinct; every entry \((u, v)\) of \(E\) satisfies \(u < n\), \(v < n\) and \(u \ne v\), and \((v, u)\) is not an entry of \(E\); the entries of \(T\) are pairwise distinct; and every entry \(t\) of \(T\) satisfies \(t < n\). Thus \(E\) lists each edge of a simple undirected graph on the vertices \(0, \dots, n-1\) exactly once, in one orientation, and \(T\) is a list of distinct vertices. No condition is imposed on \(K\).
def WellFormed (i : MultiwayCutInstance) : Prop :=
i.2.1.Nodup ∧ (∀ e ∈ i.2.1, e.1 < i.1 ∧ e.2 < i.1 ∧ e.1 ≠ e.2 ∧ (e.2, e.1) ∉ i.2.1) ∧
i.2.2.1.Nodup ∧ ∀ t ∈ i.2.2.1, t < i.1
abbrev MultiwayCutInstance := ℕ × List (ℕ × ℕ) × List ℕ × ℕ
WantedExt/Complexity/NPComplete/MultiwayCutWanted.lean:48
Uses 1 · Used by 1
DefinitionFeasible multiway cut instances#✓fully proved
Let \((n, E, T, K)\) be a multiway cut instance with terminal list \(T = (t_0, \dots, t_{k-1})\). It is feasible when there is a labelling \(f\) of the vertices \(0, \dots, n-1\) by labels in \(\{0, \dots, \max(k, 1) - 1\}\) such that \(f(t_j) = j\) for every \(j < k\), and at most \(K\) entries \((u, v)\) of \(E\), counted with repetition, satisfy \(f(u) \ne f(v)\). Here every number \(v \ge n\) counts as a vertex with label \(0\).
def MultiwayCutFeasible
(i : MultiwayCutInstance) : Prop :=
∃ assign : List ℕ, assign.length = i.1 ∧
(∀ v < i.1, assign.getD v 0 < max i.2.2.1.length 1) ∧
(∀ t < i.2.2.1.length, assign.getD (i.2.2.1.getD t 0) 0 = t) ∧
¬ ∃ cut : List (ℕ × ℕ), cut.Sublist i.2.1 ∧ cut.length = i.2.2.2 + 1 ∧
∀ e ∈ cut, assign.getD e.1 0 ≠ assign.getD e.2 0
abbrev MultiwayCutInstance := ℕ × List (ℕ × ℕ) × List ℕ × ℕ
WantedExt/Complexity/NPComplete/MultiwayCutWanted.lean:48
Uses 1 · Used by 1
DefinitionThe MULTIWAY CUT decision problem#✓fully proved
MULTIWAY CUT is the decision problem on bitstrings that accepts a bitstring \(x\) exactly when \(x\) decodes, under the canonical bitstring encoding, to a multiway cut instance \((n, E, T, K)\) that is well-formed and feasible. Bitstrings that do not decode to a multiway cut instance are rejected.
noncomputable def multiwayCutDec :
MetaMathlibExt.ComplexityTheory.DecisionProblem := fun x =>
match MetaMathlibExt.BitstringEncoding.bitDecode
(α := MultiwayCutInstance) x with
| some i => decide (WellFormed i ∧ MultiwayCutFeasible i)
| none => false
abbrev DecisionProblem := List Bool → Bool
MathlibExt/Computability/Complexity.lean:170
def bitDecode [BitstringEncoding α] (l : List Bool) : Option α := toEncoding.decode l
MathlibExt/Computability/Complexity.lean:58
abbrev MultiwayCutInstance := ℕ × List (ℕ × ℕ) × List ℕ × ℕ
WantedExt/Complexity/NPComplete/MultiwayCutWanted.lean:48
def WellFormed (i : MultiwayCutInstance) : Prop :=
i.2.1.Nodup ∧ (∀ e ∈ i.2.1, e.1 < i.1 ∧ e.2 < i.1 ∧ e.1 ≠ e.2 ∧ (e.2, e.1) ∉ i.2.1) ∧
i.2.2.1.Nodup ∧ ∀ t ∈ i.2.2.1, t < i.1
WantedExt/Complexity/NPComplete/MultiwayCutWanted.lean:51
def MultiwayCutFeasible
(i : MultiwayCutInstance) : Prop :=
∃ assign : List ℕ, assign.length = i.1 ∧
(∀ v < i.1, assign.getD v 0 < max i.2.2.1.length 1) ∧
(∀ t < i.2.2.1.length, assign.getD (i.2.2.1.getD t 0) 0 = t) ∧
¬ ∃ cut : List (ℕ × ℕ), cut.Sublist i.2.1 ∧ cut.length = i.2.2.2 + 1 ∧
∀ e ∈ cut, assign.getD e.1 0 ≠ assign.getD e.2 0
WantedExt/Complexity/NPComplete/MultiwayCutWanted.lean:56
Uses 12 · Used by 1
TheoremMULTIWAY CUT is NP-complete#●ready to prove
Let MULTIWAY CUT be the decision problem that accepts exactly the bitstrings decoding to a well-formed, feasible multiway cut instance: a simple undirected graph on the vertices \(0, \dots, n-1\), a list of distinct terminal vertices and a bound \(K\) such that deleting at most \(K\) edges of the graph leaves no two terminals connected. Then MULTIWAY CUT is in NP, and every decision problem in NP reduces to MULTIWAY CUT by a polynomial-time many-one reduction.
public theorem_wanted multiwayCut_npComplete :
multiwayCutDec ∈ MetaMathlibExt.ComplexityTheory.NP ∧
∀ L : MetaMathlibExt.ComplexityTheory.DecisionProblem,
L ∈ MetaMathlibExt.ComplexityTheory.NP →
Cslib.CookLevin.PolyManyOneRed L multiwayCutDec
noncomputable def multiwayCutDec :
MetaMathlibExt.ComplexityTheory.DecisionProblem := fun x =>
match MetaMathlibExt.BitstringEncoding.bitDecode
(α := MultiwayCutInstance) x with
| some i => decide (WellFormed i ∧ MultiwayCutFeasible i)
| none => false
WantedExt/Complexity/NPComplete/MultiwayCutWanted.lean:66
def NP : DecisionComplexityClass :=
{ L | ∃ (p : Polynomial ℕ), ∃ R : (List Bool × List Bool) → Bool,
IsPolyTime R ∧
∀ x, L x ↔ ∃ w : List Bool, w.length ≤ p.eval x.length ∧ R (x, w) }
MathlibExt/Computability/Complexity.lean:200
abbrev DecisionProblem := List Bool → Bool
MathlibExt/Computability/Complexity.lean:170
def PolyManyOneRed (L₁ L₂ : MetaMathlibExt.ComplexityTheory.DecisionProblem) : Prop :=
∃ reduce : List Bool → List Bool,
MetaMathlibExt.ComplexityTheory.IsPolyTime reduce ∧ ∀ x, L₁ x = L₂ (reduce x)
CSLibExt/Computability/CookLevin.lean:396
Sources
- M. R. Garey and D. S. Johnson, Computers and Intractability (1979), MULTIWAY CUT; E. Dahlhaus et al., "The complexity of multiterminal cuts" (1994).
Uses 5
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.