The bounded projected round-or-cut search
Lax263307.ProjectedOracle · concepts/Lax263307/ProjectedOracle.lean · lax-263307
No public endorsements yet.
Loading review…
Sign in with ORCIDNatural Language Statement
Theorem
The actual registered LP certificate decides whether to reject, separate by a projection cut, or call the computed near-relaxation oracle. Both cut branches preserve the same explicit dyadic cube about every scaled independent-set encoding. The bounded rounded ellipsoid loop therefore returns an approximate independent set or a valid upper bound strictly below the requested positive target.
Concept map
Evidence
Each proof establishes this claim relative to its assumptions.
-
- thm✓
Lax263307.AlgorithmParameters - thm✓
Lax263307.CoordinateCatalog - thm✓
Lax263307.DistanceProjection - thm✓
Lax263307.MomentLP - thm✓
Lax263307.NearOracle - thm✓
Lax263307.RationalCutBuffer - thm✓
Lax263307.RationalProjection - thm✓
Lax263307.RegisteredLP - thm✓
Lax263307.RelaxationFeasibility - thm✓
Lax263307.RoundedOracleSearch
- thm✓
Lean source view on GitHub
| 1 | import Lax263307.NearOracle |
| 2 | import Lax263307.RegisteredLP |
| 3 | import Lax263307.RationalProjection |
| 4 | import Lax263307.RationalCutBuffer |
| 5 | |
| 6 | /-! |
| 7 | --- |
| 8 | title: The bounded projected round-or-cut search |
| 9 | type: theorem |
| 10 | --- |
| 11 | The actual registered LP certificate decides whether to reject, separate |
| 12 | by a projection cut, or call the computed near-relaxation oracle. |
| 13 | Both cut branches preserve the same explicit dyadic cube about every |
| 14 | scaled independent-set encoding. The bounded rounded ellipsoid loop |
| 15 | therefore returns an approximate independent set or a valid upper bound |
| 16 | strictly below the requested positive target. |
| 17 | |
| 18 | # Formalization notes |
| 19 | |
| 20 | The only recursive hypothesis concerns answers on balanced child parts. |
| 21 | The LP and flow functions are fixed for the class and have the registered |
| 22 | RAM polynomial-time guarantees. The surrounding computable search still |
| 23 | needs its own finite RAM implementation and time bound. |
| 24 | -/ |
| 25 | |
| 26 | namespace Lax263307.ProjectedOracle |
| 27 | |
| 28 | open LinearRelaxation AlgorithmParameters |
| 29 | |
| 30 | def tolerance (a K B n D : ℕ) : ℚ := momentFloor a K B n D / (32 * (n : ℚ)^2 * (D : ℚ)^2) |
| 31 | |
| 32 | def raw {N : ℕ} (center : Fin N → ℚ) : Fin N → ℚ := fun i => 4 * (N : ℚ) * center i |
| 33 | |
| 34 | def run {n : ℕ} (lp flow : List ℕ → List ℕ) (a K B D : ℕ) |
| 35 | (G : SimpleGraph (Fin n)) [DecidableRel G.Adj] (k : ℕ) |
| 36 | (child : Finset (Fin n) → ℕ → Option (Finset (Fin n))) |
| 37 | (center : MomentLP.Index n (level a K B n D) → ℚ) : |
| 38 | RoundedOracleSearch.Reply (MomentLP.dimension n (level a K B n D)) (Finset (Fin n)) := |
| 39 | let P := MomentLP.program G k (level a K B n D) |
| 40 | match RationalProjection.classify P (tolerance a K B n D) |
| 41 | (RegisteredLP.certificate lp (DistanceProjection.distanceProgram P (raw center))) with |
| 42 | | .reject => .reject |
| 43 | | .far normal _ => .cut (RationalCutBuffer.integerNormal normal) |
| 44 | | .near y => |
| 45 | match NearOracle.run flow a K B D G k (MomentLP.decode y) child with |
| 46 | | .reject => .reject |
| 47 | | .found I => .found I |
| 48 | | .cut A C u => .cut (RationalCutBuffer.integerNormal |
| 49 | (RoundedOracleSearch.rationalNormal (MomentLP.encode (ComponentCutEncoding.coefficient A C u)))) |
| 50 | |
| 51 | def Good {n : ℕ} (G : SimpleGraph (Fin n)) (k h D : ℕ) (I : Finset (Fin n)) : Prop := |
| 52 | G.IsIndepSet (I : Set (Fin n)) ∧ (1 - 4 * (1 / (D : ℝ))) ^ (h+1) * (k : ℝ) ≤ I.card |
| 53 | |
| 54 | def Correct {n : ℕ} (G : SimpleGraph (Fin n)) (k h a K B D : ℕ) |
| 55 | (center : MomentLP.Index n (level a K B n D) → ℚ) : |
| 56 | RoundedOracleSearch.Reply (MomentLP.dimension n (level a K B n D)) (Finset (Fin n)) → Prop |
| 57 | | .found I => Good G k h D I |
| 58 | | .reject => independentSetHull G k (level a K B n D) = ∅ |
| 59 | | .cut normal => (∃ i, normal i ≠ 0) ∧ |
| 60 | ∀ z ∈ independentSetHull G k (level a K B n D), |
| 61 | ∀ e : MomentLP.Index n (level a K B n D) → ℝ, |
| 62 | (∀ i, |e i| ≤ ((2 : ℝ) ^ precision a K B n D)⁻¹) → |
| 63 | (fun i => (normal i : ℝ)) ⬝ᵥ |
| 64 | (BufferedEllipsoid.scale (MomentLP.encode z) + e - (fun i => (center i : ℝ))) ≤ 0 |
| 65 | |
| 66 | def search {n : ℕ} (lp flow : List ℕ → List ℕ) (a K B D : ℕ) |
| 67 | (G : SimpleGraph (Fin n)) [DecidableRel G.Adj] (k : ℕ) |
| 68 | (child : Finset (Fin n) → ℕ → Option (Finset (Fin n))) : Option (Finset (Fin n)) := |
| 69 | RoundedOracleSearch.search (fun _ center => run lp flow a K B D G k child center) |
| 70 | (precision a K B n D) |
| 71 | |
| 72 | def SearchCorrect {n : ℕ} (G : SimpleGraph (Fin n)) (k h D : ℕ) : Option (Finset (Fin n)) → Prop |
| 73 | | some I => Good G k h D I |
| 74 | | none => IsIndependenceBound G Finset.univ (k-1) |
| 75 | |
| 76 | open GraphClasses PowerBagBounds |
| 77 | |
| 78 | axiom exists_search (C : GraphClass) (hereditary : IsHereditary C) |
| 79 | (a A : ℕ) (ha : 0 < a) (hA : 0 < A) (class_bound : HasPowerBagBound C a A) : |
| 80 | ∃ (lp flow : List ℕ → List ℕ) (K B : ℕ), |
| 81 | Lax759944.RamPolytime.RamPolytime lp ∧ Lax759944.RamPolytime.RamPolytime flow ∧ |
| 82 | 0 < K ∧ 0 < B ∧ ∀ (n : ℕ) (G : SimpleGraph (Fin n)) [DecidableRel G.Adj], |
| 83 | G ∈ C n → 0 < n → ∀ (D k h : ℕ), 4 ≤ D → cutoff a K B n D < k → |
| 84 | ∀ (child : Finset (Fin n) → ℕ → Option (Finset (Fin n))), |
| 85 | Lax263307.NearOracle.ChildCorrect G D h child → |
| 86 | SearchCorrect G k h D (search lp flow a K B D G k child) |
| 87 | |
| 88 | end Lax263307.ProjectedOracle |
| 89 |
Formalization notes
The only recursive hypothesis concerns answers on balanced child parts. The LP and flow functions are fixed for the class and have the registered RAM polynomial-time guarantees. The surrounding computable search still needs its own finite RAM implementation and time bound.
Builds on
Used by
From Mathlib
none
Discussion
Ask a question or add context. Endorsements and structured flags are kept in the review panel above.
0 comments