Exact-cardinality subset sum
AbbreviationExact-cardinality subset-sum instances#✓fully proved
An exact-cardinality subset-sum instance is a triple \((a, K, T)\) consisting of a list \(a\) of natural numbers, a natural number \(K\) (the cardinality) and a natural number \(T\) (the target).
abbrev CardinalitySubsetSumInstance := List ℕ × ℕ × ℕ
DefinitionFeasibility of an exact-cardinality subset-sum instance#✓fully proved
An exact-cardinality subset-sum instance \((a, K, T)\) is feasible when some subsequence of the list \(a\) (entries kept in order, not necessarily contiguous) has exactly \(K\) entries and sum \(T\).
def CardinalitySubsetSumFeasible
(i : CardinalitySubsetSumInstance) : Prop :=
∃ s : List ℕ, s.Sublist i.1 ∧ s.length = i.2.1 ∧ s.sum = i.2.2
abbrev CardinalitySubsetSumInstance := List ℕ × ℕ × ℕ
WantedExt/Complexity/NPComplete/CardinalitySubsetSumWanted.lean:49
Uses 1 · Used by 1
DefinitionExact-cardinality subset sum as a decision problem#✓fully proved
The decision problem EXACT-CARDINALITY SUBSET SUM accepts a bitstring \(x\) exactly when \(x\) decodes, under the canonical bitstring encoding, to an exact-cardinality subset-sum instance that is feasible; it rejects every bitstring that does not decode.
noncomputable def cardinalitySubsetSumDec :
MetaMathlibExt.ComplexityTheory.DecisionProblem := fun x =>
match MetaMathlibExt.BitstringEncoding.bitDecode
(α := CardinalitySubsetSumInstance) x with
| some i => decide (CardinalitySubsetSumFeasible 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 CardinalitySubsetSumInstance := List ℕ × ℕ × ℕ
WantedExt/Complexity/NPComplete/CardinalitySubsetSumWanted.lean:49
def CardinalitySubsetSumFeasible
(i : CardinalitySubsetSumInstance) : Prop :=
∃ s : List ℕ, s.Sublist i.1 ∧ s.length = i.2.1 ∧ s.sum = i.2.2
WantedExt/Complexity/NPComplete/CardinalitySubsetSumWanted.lean:52
Uses 11 · Used by 1
TheoremEXACT-CARDINALITY SUBSET SUM is NP-complete#●ready to prove
The decision problem EXACT-CARDINALITY SUBSET SUM lies in NP, and every decision problem in NP has a polynomial-time many-one reduction to it.
public theorem_wanted cardinalitySubsetSum_npComplete :
cardinalitySubsetSumDec ∈ MetaMathlibExt.ComplexityTheory.NP ∧
∀ L : MetaMathlibExt.ComplexityTheory.DecisionProblem,
L ∈ MetaMathlibExt.ComplexityTheory.NP →
Cslib.CookLevin.PolyManyOneRed L cardinalitySubsetSumDec
noncomputable def cardinalitySubsetSumDec :
MetaMathlibExt.ComplexityTheory.DecisionProblem := fun x =>
match MetaMathlibExt.BitstringEncoding.bitDecode
(α := CardinalitySubsetSumInstance) x with
| some i => decide (CardinalitySubsetSumFeasible i)
| none => false
WantedExt/Complexity/NPComplete/CardinalitySubsetSumWanted.lean:58
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), SUBSET SUM; NP-completeness via the zero-padding reduction from ordinary subset sum.
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.