Skip to content

Commit 407f7b3

Browse files
GiggleLiuclaude
andcommitted
fix: improve CVP paper entry and add missing citations
- Fix factual errors: Kannan runs in n^O(n) (not n^n), Micciancio-Voulgaris is deterministic O*(4^n) Voronoi cell (not randomized sieve O*(2^n)) - Add Aggarwal-Dadush-Stephens-Davidowitz 2015 citation for the O*(2^n) bound - Add BibTeX entries: vanemde1981, kannan1987, micciancio2010, aggarwal2015 - Add lattice visualization figure with basis vectors, target, and closest point - Add evaluation walkthrough showing distance computation - Fix Makefile: mkdir -p tests/julia before rust-export - Regenerate problem_schemas.json and reduction_graph.json Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent c6dc4b9 commit 407f7b3

5 files changed

Lines changed: 224 additions & 115 deletions

File tree

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ cli:
153153
GRAPHS := diamond bull house petersen
154154
MODES := unweighted weighted triangular
155155
rust-export:
156+
@mkdir -p tests/julia
156157
@for graph in $(GRAPHS); do \
157158
for mode in $(MODES); do \
158159
echo "Exporting $$graph ($$mode)..."; \

docs/paper/reductions.typ

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -641,9 +641,41 @@ Integer Linear Programming is a universal modeling framework: virtually every NP
641641
#problem-def("ClosestVectorProblem")[
642642
Given a lattice basis $bold(B) in RR^(m times n)$ (columns $bold(b)_1, dots, bold(b)_n in RR^m$ spanning lattice $cal(L)(bold(B)) = {bold(B) bold(x) : bold(x) in ZZ^n}$) and target $bold(t) in RR^m$, find $bold(x) in ZZ^n$ minimizing $norm(bold(B) bold(x) - bold(t))_2$.
643643
][
644-
The Closest Vector Problem is a fundamental lattice problem, proven NP-hard by van Emde Boas @vanemde1981. CVP plays a central role in lattice-based cryptography and the geometry of numbers. Kannan's algorithm @kannan1987 solves CVP in $O^*(n^n)$ time using the Hermite normal form, later improved to $O^*(2^n)$ via the randomized sieve of Micciancio and Voulgaris @micciancio2010. CVP is closely related to the Shortest Vector Problem (SVP) and integer programming: Lenstra's algorithm for fixed-dimensional ILP @lenstra1983 proceeds via CVP in the dual lattice.
645-
646-
*Example.* Consider the 2D lattice with basis $bold(b)_1 = (2, 0)^top$, $bold(b)_2 = (1, 2)^top$ and target $bold(t) = (2.8, 1.5)^top$. The lattice points near $bold(t)$ include $bold(B)(1, 0)^top = (2, 0)^top$, $bold(B)(1, 1)^top = (3, 2)^top$, and $bold(B)(0, 1)^top = (1, 2)^top$. The closest is $bold(B)(1, 1)^top = (3, 2)^top$ with distance $norm((0.2, 0.5))_2 approx 0.539$.
644+
The Closest Vector Problem is a fundamental lattice problem, proven NP-hard by van Emde Boas @vanemde1981. CVP appears in lattice-based cryptography, coding theory, and integer programming @lenstra1983. Kannan's enumeration algorithm @kannan1987 solves CVP in $n^(O(n))$ time; Micciancio and Voulgaris @micciancio2010 improved this to deterministic $O^*(4^n)$ using Voronoi cell computations, and Aggarwal, Dadush, and Stephens-Davidowitz @aggarwal2015 achieved randomized $O^*(2^n)$.
645+
646+
*Example.* Consider the 2D lattice with basis $bold(b)_1 = (2, 0)^top$, $bold(b)_2 = (1, 2)^top$ and target $bold(t) = (2.8, 1.5)^top$. The lattice points near $bold(t)$ include $bold(B)(1, 0)^top = (2, 0)^top$, $bold(B)(0, 1)^top = (1, 2)^top$, and $bold(B)(1, 1)^top = (3, 2)^top$. The closest is $bold(B)(1, 1)^top = (3, 2)^top$ with distance $norm(bold(B)(1,1)^top - bold(t))_2 = norm((0.2, 0.5))_2 = sqrt(0.04 + 0.25) approx 0.539$.
647+
648+
#figure(
649+
canvas(length: 0.8cm, {
650+
// Lattice points: B*(x1,x2) = x1*(2,0) + x2*(1,2)
651+
for x1 in range(0, 3) {
652+
for x2 in range(0, 3) {
653+
let px = x1 * 2 + x2 * 1
654+
let py = x2 * 2
655+
let is-closest = (x1 == 1 and x2 == 1)
656+
draw.circle(
657+
(px, py),
658+
radius: if is-closest { 0.15 } else { 0.08 },
659+
fill: if is-closest { graph-colors.at(0) } else { luma(180) },
660+
stroke: if is-closest { 0.8pt + graph-colors.at(0) } else { 0.4pt + luma(120) },
661+
)
662+
}
663+
}
664+
// Target vector
665+
draw.circle((2.8, 1.5), radius: 0.1, fill: graph-colors.at(1), stroke: none)
666+
draw.content((2.8, 1.05), text(7pt)[$bold(t)$])
667+
// Dashed line from target to closest point
668+
draw.line((2.8, 1.5), (3, 2), stroke: stroke(paint: graph-colors.at(0), thickness: 0.8pt, dash: "dashed"))
669+
// Basis vectors as arrows from origin
670+
draw.line((0, 0), (2, 0), mark: (end: ">"), stroke: 0.8pt + luma(100))
671+
draw.content((1.0, -0.35), text(7pt)[$bold(b)_1$])
672+
draw.line((0, 0), (1, 2), mark: (end: ">"), stroke: 0.8pt + luma(100))
673+
draw.content((0.2, 1.1), text(7pt)[$bold(b)_2$])
674+
// Label closest point
675+
draw.content((3.45, 2.3), text(7pt)[$bold(B)(1,1)^top$])
676+
}),
677+
caption: [2D lattice with basis $bold(b)_1 = (2, 0)^top$, $bold(b)_2 = (1, 2)^top$. Target $bold(t) = (2.8, 1.5)^top$ (red) and closest lattice point $bold(B)(1,1)^top = (3, 2)^top$ (blue). Distance $norm(bold(B)(1,1)^top - bold(t))_2 approx 0.539$.],
678+
) <fig:cvp-example>
647679
]
648680

649681
== Satisfiability Problems

docs/paper/references.bib

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,43 @@ @article{epping2004
307307
doi = {10.1016/S0166-218X(03)00442-6}
308308
}
309309

310+
@techreport{vanemde1981,
311+
author = {Peter van Emde Boas},
312+
title = {Another NP-complete Problem and the Complexity of Computing Short Vectors in a Lattice},
313+
institution = {Mathematisch Instituut, Universiteit van Amsterdam},
314+
number = {81-04},
315+
year = {1981}
316+
}
317+
318+
@article{kannan1987,
319+
author = {Ravi Kannan},
320+
title = {Minkowski's Convex Body Theorem and Integer Programming},
321+
journal = {Mathematics of Operations Research},
322+
volume = {12},
323+
number = {3},
324+
pages = {415--440},
325+
year = {1987},
326+
doi = {10.1287/moor.12.3.415}
327+
}
328+
329+
@inproceedings{micciancio2010,
330+
author = {Daniele Micciancio and Panagiotis Voulgaris},
331+
title = {A Deterministic Single Exponential Time Algorithm for Most Lattice Problems Based on {V}oronoi Cell Computations},
332+
booktitle = {Proceedings of the 42nd ACM Symposium on Theory of Computing (STOC)},
333+
pages = {351--358},
334+
year = {2010},
335+
doi = {10.1145/1806689.1806739}
336+
}
337+
338+
@inproceedings{aggarwal2015,
339+
author = {Divesh Aggarwal and Daniel Dadush and Noah Stephens-Davidowitz},
340+
title = {Solving the Closest Vector Problem in $2^n$ Time -- The Discrete {G}aussian Strikes Again!},
341+
booktitle = {Proceedings of the 56th IEEE Symposium on Foundations of Computer Science (FOCS)},
342+
pages = {563--580},
343+
year = {2015},
344+
doi = {10.1109/FOCS.2015.41}
345+
}
346+
310347
@article{shannon1956,
311348
author = {Claude E. Shannon},
312349
title = {The zero error capacity of a noisy channel},

docs/src/reductions/problem_schemas.json

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,27 @@
8383
}
8484
]
8585
},
86+
{
87+
"name": "ClosestVectorProblem",
88+
"description": "Find the closest lattice point to a target vector",
89+
"fields": [
90+
{
91+
"name": "basis",
92+
"type_name": "Vec<Vec<T>>",
93+
"description": "Basis matrix B as column vectors"
94+
},
95+
{
96+
"name": "target",
97+
"type_name": "Vec<f64>",
98+
"description": "Target vector t"
99+
},
100+
{
101+
"name": "bounds",
102+
"type_name": "Vec<VarBounds>",
103+
"description": "Integer bounds per variable"
104+
}
105+
]
106+
},
86107
{
87108
"name": "Factoring",
88109
"description": "Factor a composite integer into two factors",

0 commit comments

Comments
 (0)