OAI/Combinatorics/SparsestCut/GapReduction.lean
33 declarations, 0 contain sorry, 0 declared as axioms
Encodings and reductions for uniform sparsest cut
These definitions express the polynomial-time reduction and approximation search problem in Constant-factor hardness of uniform sparsest cut by OpenAI. The last semantic implication uses rational threshold comparison.
- abbrev
OAI.UniformSparsestCut.BitStringline 19 - def
OAI.UniformSparsestCut.blockline 22Source documentation
A self-delimiting binary block: unary length, terminator, then the bits.
def block (s : BitString) : BitString := List.replicate s.length true ++ false :: s
Mentions: OAI.UniformSparsestCut.BitString
- def
OAI.UniformSparsestCut.encodeNatline 25Source documentation
Binary, not unary, representation of a natural number, with a length prefix.
def encodeNat (n : ℕ) : BitString := block (Computability.encodeNat n)
Mentions: OAI.UniformSparsestCut.BitString, OAI.UniformSparsestCut.block
- def
OAI.UniformSparsestCut.encodeRatline 28Source documentation
Signed numerator and positive denominator, both in binary.
def encodeRat (q : ℚ) : BitString := …
Mentions: OAI.UniformSparsestCut.BitString
- def
OAI.UniformSparsestCut.encodePairline 31 - def
OAI.UniformSparsestCut.encodeBoolline 33 - def
OAI.UniformSparsestCut.Polytimeline 41Source documentation
A finite-stack, finite-alphabet Turing machine with a polynomial step bound.
Mathlib's
FinTM2only supplies alphabet finiteness for the input stack. The extra condition here requires every stack alphabet to be finite. Thus one cannot store an arbitrary natural number or a function in a single stack symbol.def Polytime {α β : Type} (ea : α → BitString) (eb : β → BitString) (f : α → β) : Prop := …Mentions: OAI.UniformSparsestCut.BitString
- structure
OAI.UniformSparsestCut.Literalline 47 - structure
OAI.UniformSparsestCut.Clauseline 52 - abbrev
OAI.UniformSparsestCut.Formulaline 59Source documentation
Exactly three literals per clause; repetitions are permitted.
abbrev Formula := List Clause
Mentions: OAI.UniformSparsestCut.Clause
- def
OAI.UniformSparsestCut.Literal.evalline 61 - def
OAI.UniformSparsestCut.Clause.evalline 64 - def
OAI.UniformSparsestCut.Satisfiableline 67 - def
OAI.UniformSparsestCut.Literal.encodeline 70 - def
OAI.UniformSparsestCut.Clause.encodeline 72 - def
OAI.UniformSparsestCut.encodeFormulaline 75 - def
OAI.UniformSparsestCut.formulaSizeline 78 - def
OAI.UniformSparsestCut.encodeGraphline 80 - structure
OAI.UniformSparsestCut.Instanceline 85Source documentation
The rational threshold is additional to the graph.
structure Instance where …
- def
OAI.UniformSparsestCut.encodeInstanceline 90 - def
OAI.UniformSparsestCut.OutputBoundline 95Source documentation
This records graph size, every numeric bit length, and total output length. The polynomial is quantified inside the choice of the fixed factor.
def OutputBound (R : Formula → Instance) (p : Polynomial ℕ) : Prop := …
Mentions: OAI.UniformSparsestCut.Formula, OAI.UniformSparsestCut.Instance
- def
OAI.UniformSparsestCut.HasGapReductionline 103Source documentation
Polynomial-time gap reduction for the specific objective above.
def HasGapReduction (C : ℝ) : Prop := …
- def
OAI.UniformSparsestCut.cutOfBitsline 113Source documentation
A cut is returned as one bit per vertex, in vertex order.
def cutOfBits (G : Graph) (s : BitString) : Finset (Fin G.n) := …
Mentions: OAI.UniformSparsestCut.Graph, OAI.UniformSparsestCut.BitString
- def
OAI.UniformSparsestCut.ApproxAnswerline 117Source documentation
The approximation algorithm must return a feasible cut, not just an estimated value.
def ApproxAnswer (C : ℝ) (G : Graph) (s : BitString) : Prop := …
Mentions: OAI.UniformSparsestCut.Graph, OAI.UniformSparsestCut.BitString
- abbrev
OAI.UniformSparsestCut.Languageline 121 - def
OAI.UniformSparsestCut.InNPline 124Source documentation
NP via a deterministic polynomial-time verifier and a polynomial-length certificate.
def InNP (L : Language) : Prop := …
Mentions: OAI.UniformSparsestCut.Language
- def
OAI.UniformSparsestCut.ApproximationNPHardline 132Source documentation
NP-hardness of the factor-
Csearch problem, under one-call polynomial-time oracle reductions. The postprocessor must work for every valid approximate answer, not just for a helpful choice of answer.def ApproximationNPHard (C : ℝ) : Prop := …
- def
OAI.UniformSparsestCut.bitsOfCutline 139 - theorem
OAI.UniformSparsestCut.bitsOfCut_lengthline 142 - theorem
OAI.UniformSparsestCut.cutOfBits_bitsOfCutline 145 - theorem
OAI.UniformSparsestCut.exists_approximation_answerline 151Source documentation
Every graph has a factor-
Capproximation whenC ≥ 1.theorem exists_approximation_answer (G : Graph) {C : ℝ} (hC : 1 ≤ C) : ∃ s, ApproxAnswer C G s := by …Mentions: OAI.UniformSparsestCut.Graph, OAI.UniformSparsestCut.ApproxAnswer
- def
OAI.UniformSparsestCut.decideGapline 162Source documentation
Rational comparison of the returned cut with a fixed rational factor
B. No real-number oracle is used by this predicate.def decideGap (B : ℚ) (I : Instance) (s : BitString) : Bool := …
Mentions: OAI.UniformSparsestCut.Instance, OAI.UniformSparsestCut.BitString
- theorem
OAI.UniformSparsestCut.gap_decision_correctline 167Source documentation
A gap for a larger rational factor decides satisfiability from every valid approximation at the target real factor.
theorem gap_decision_correct {F : Formula} {I : Instance} {C : ℝ} {B : ℚ} (hC : 0 ≤ C) (hCB : C ≤ (B : ℝ)) (hyes : Satisfiable F → I.graph.phi ≤ I.threshold) (hno : ¬ Satisfiable F → (B : ℝ) * I.threshold < I.graph.phi) {s : BitString} (hs : ApproxAnswer C I.graph s) : decideGap B I s = true ↔ Satisfiable F := by …Mentions: OAI.UniformSparsestCut.Formula, OAI.UniformSparsestCut.Instance, OAI.UniformSparsestCut.Satisfiable, OAI.UniformSparsestCut.BitString, OAI.UniformSparsestCut.ApproxAnswer, OAI.UniformSparsestCut.decideGap