LEC point-site candidate completeness (NTS.Proofs 474) - #22
Merged
cursor[bot] merged 4 commits intoAug 16, 2026
Merged
Conversation
…ate classes. When obstacles flatten to points and the domain is a 2-D polygon (or a polygonal convex hull), enumerate Voronoi vertices, bisector × boundary crossings, and domain vertices, then pick the max ObstacleDistance clearance. Non-point obstacles and the disc closed form stay on the existing grid. The two-point hull is not treated as a polygon (F8). Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
usedPointSiteCandidates is set in compute(), which runs on getCenter / getRadiusLine. Asserting the flag first was a false fail. Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Private tryPointSiteCandidates() after the disc short-circuit: point sites in a 2-D polygonal domain walk VoronoiDiagramBuilder / QuadEdgeSubdivision plus domain vertices, score with ObstacleDistance, and return null to fall through to the grid. No new type. F8 keeps two-nearest bisector × edge crossings. Family I pins tri_candidates. Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
GitHub auto-links locationtech#474 in this repo to jts#474. The candidate- completeness theorem is grootstebozewolf/NetTopologySuite.Proofs#474 (merge 69119abc on that main, not jts). Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
This was referenced Aug 16, 2026
This was referenced Aug 16, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implement the first honest slice of LEC candidate completeness for point sites off
feature/sfa-curve-rgr(PR #7 @ 210f1b1). Inspect of merged grootstebozewolf/NetTopologySuite.Proofs#474 (main@ 69119abc) is in. Not stacked on OV-P2 drafts #16–#20. Does not merge to locationtech master.Why
grootstebozewolf/NetTopologySuite.Proofs#474 (
feat/lec-candidate-complete@ 3cfce602 / merge69119abc) is the general candidate-completeness theorem for arbitrary finite point-site sets.Headlines in
theories/LECCandidateComplete.v(negation-form corollaries ofimprovement_kernelon dist²):lec_candidate_completeness_interior— an interior maximiser cannot have its nearest sites covered by two points. It is a Voronoi vertex with ≥ 3 nearest sites.lec_candidate_completeness_boundary_edge— a maximiser strictly inside a domain edge cannot have a unique nearest site. It is a bisector × boundary crossing.Witness-scoped list in
LECCandidateVertex.v(tri_candidates): vertex(2, 5/6), crossings(2,0),(1, 3/2),(3, 3/2), and the three sites. Ledger F2 / F3 / F8 indocs/lec-optimal-path.md.What this PR does
Teaches existing
LargestEmptyCircle.compute()only. After the certified-disc short-circuit, if every flattened obstacle is a point and the domain is a 2-D polygonal region, a private three-class walk runs and returnsnullto fall through to the current grid. No new public type.ObstacleDistanceis unchanged; it is only used to score candidates.The walk reuses
VoronoiDiagramBuilder/QuadEdgeSubdivision:Public signatures (
getCenter/getRadiusLine/hasCertifiedClosedForm) are unchanged.hasCertifiedClosedFormstays disc-only.Non-point obstacles (lines, polygons, arcs, discs, mixed) keep the grid. Lipschitz slack is untouched (F2).
F8 (load-bearing)
Dropping the interiority premise is false (
f8_interiority_load_bearing). Sites(0,0)and(2,0), domain = the connecting segment, midpoint(1,0)radius 1, exactly two nearest sites. Degenerate empty-interior domains use the edge theorem — this walk does not filter “not ≥ 3”. JTSboundarymust bePolygonal; the two-point hull is aLineStringand is not treated as a domain. F8 is pinned with an explicit thin rectangle containing the segment so the maximiser is forced onto the bisector × edge class.Not this PR
oracle_bin/ JNI in production LEC.Tests
(0,0),(4,0),(2,3)on the hull — unique maximiser(2, 5/6)radius13/6; candidates include that vertex,(2,0),(1, 3/2),(3, 3/2), and the three sites. Exact vs the grid at a tight tolerance.Verification