yams/formal/topology/Yams/Topology/RetrievalCoordinates.lean
Trevon 3f37e8f564
Sync experimental into main: Search retrieval improvements (#60)
* fix(graph): handle qualified C++ symbols

Signed-off-by: trvon <me@trevon.dev>

* refactor(vector)!: remove dead transition APIs

Split Simeon vector and retrieval linkage so consumers inherit only the runtime surface they use.

BREAKING CHANGE: remove unused async/model/config helpers and the undefined vector-backend factory from public headers.

Signed-off-by: trvon <me@trevon.dev>

* fix(vector): harden PQ snapshot lifecycle

Validate and atomically install persisted generations, revalidate after races, and fall back to exact search when a snapshot is stale. Add the exact-scan reference lane and distinguish observed work counters from unavailable backend metrics.

Signed-off-by: trvon <me@trevon.dev>

* feat(topology): expose route coordinates

Persist chart distortion and local-dimension evidence, retain pre-scalarization route axes, and emit detailed trace rows without treating unavailable vector work as zero.

Signed-off-by: trvon <me@trevon.dev>

* feat(xplan): add vector decision gates

Track binary and corpus identity, preserve missing-work semantics, and add repeated PQ routing, crossover, and rerank plans with quality and cost summaries.

Signed-off-by: trvon <me@trevon.dev>

* feat(topology): formalize coordinate routing

Separate chart geometry from route-risk admission and prove candidate-stage recall and strict-focus boundaries. Record the measured atlas limitations and literature basis for the next construction experiment.

Signed-off-by: trvon <me@trevon.dev>

* fix(search): serialize SymSpell readers

SQLite-backed lookups reuse mutable prepared statements, so shared-reader locking is unsafe. Advance the owned SymSpell revision for batched delete insertion and cover concurrent root lookups under TSAN.

Signed-off-by: trvon <me@trevon.dev>

* fix(vector): make mutations atomic

Preserve stored vectors on replacement and commit failures, reject cross-thread writes during explicit transactions, and restore exact reranking for quantized-primary PQ rows.

* fix(search)!: surface SymSpell write errors

Propagate persistent dictionary failures through metadata ingestion, roll back failed batches, and make clear remove stored terms.

BREAKING CHANGE: SymSpellSearch mutations now return Result values.

* feat(topology): formalize candidate expansion

* feat(vector): add coordinate-aware embeddings

* feat(topology): preserve protected relation cover

* feat(search): add graph candidate rescue

* feat(daemon): expose retrieval hydration telemetry

* feat(xplan): add rescue and hydration gates

* refactor(content): dedupe media handlers

Reuse shared graph presenter helpers and centralize repeated audio/video/archive buffer processing, validation, lifecycle, and stats helper logic.

* feat(lifecycle): prune stale corpus data

Keep cleanup preview-first while retention stays opt-in and long prune work no longer holds IPC responses open.

* feat(search): add topology candidate rescue

Preserve high-value routed candidates across vector backends while keeping exact rerank diagnostics explicit.

* feat(search): expose evidence paths

* docs: define mobile host contract

* formal: model bounded candidate rescue

* fix(prune): inspect extensionless signatures

* fix(prune): tolerate stale extensions

---------

Signed-off-by: trvon <me@trevon.dev>
2026-07-24 19:00:22 -04:00

366 lines
18 KiB
Lean4
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Yams.Topology.SelectiveRouting
namespace Yams.SearchEngine
/-!
Protected-relation covers for selective topology routing.
Embeddings locate query anchors, but do not certify that a narrowed candidate
set preserves recall. The proof boundary is instead an explicit overlapping
cover whose fibers retain observed retrieval relations. Those relations may
come from judged relevance, reciprocal semantic edges, citations, links, or
other retrieval-specific producers.
-/
/-- One selected cover fiber and its observed relation-preservation counts. -/
structure ProtectedRelationCoverObservation where
coverId : String := ""
cover : TopologyCoverLevel := {}
protectedPairs : Nat := 0
preservedProtectedPairs : Nat := 0
deriving Repr, BEq
/-- A cover can certify narrowing only when it has observed at least one
protected relation and preserved all observed relations. -/
def ProtectedRelationCoverAdmissible
(observation : ProtectedRelationCoverObservation) : Prop :=
0 < observation.protectedPairs ∧
observation.preservedProtectedPairs = observation.protectedPairs
/-- A retrieval cover is a finite family of possibly overlapping relation fibers. -/
structure ProtectedRelationAtlas where
fibers : List ProtectedRelationCoverObservation := []
deriving Repr, BEq
def AtlasCoversCorpus
(atlas : ProtectedRelationAtlas) (corpus : List Yams.Core.DocumentId) : Prop :=
∀ doc ∈ corpus,
∃ fiber ∈ atlas.fibers, doc ∈ coverDocs fiber.cover
/-- A document belongs to the query's protected neighborhood when a measured
relation connects it to the query anchor in either direction. The relation may
represent judged relevance, a reciprocal semantic edge, a citation, or another
retrieval-specific invariant. -/
def InProtectedQueryNeighborhood
(anchor doc : Yams.Core.DocumentId)
(pairs : List ProtectedDocumentPair) : Prop :=
∃ pair ∈ pairs,
(pair.left = anchor ∧ pair.right = doc) ∨
(pair.left = doc ∧ pair.right = anchor)
/-- Completeness assumption connecting unknown relevance to observable local
relations. This is an explicit construction/calibration obligation, not a
consequence of embedding proximity. -/
def RelevantSetProtected
(anchor : Yams.Core.DocumentId)
(pairs : List ProtectedDocumentPair)
(relevantDocs : List Yams.Core.DocumentId) : Prop :=
∀ doc ∈ relevantDocs, InProtectedQueryNeighborhood anchor doc pairs
/-- Runtime materialization connects a selected chart cover to the document
allow-list consumed by the vector leg. It permits extra allowed documents. -/
def CertificateMaterializesCover
(certificate : SelectiveRouteCertificate) (cover : TopologyCoverLevel) : Prop :=
∀ doc ∈ coverDocs cover, doc ∈ certificate.allowedDocs
/-- A protected document is fiber-represented when some document in the
selected cover has an observed protected relation to it. -/
def ProtectedFibersRepresented
(protectedRelation : Yams.Core.DocumentId → Yams.Core.DocumentId → Prop)
(cover : TopologyCoverLevel)
(protectedDocs : List Yams.Core.DocumentId) : Prop :=
∀ doc ∈ protectedDocs,
∃ representative ∈ coverDocs cover, protectedRelation representative doc
/-- A materialized certificate is saturated over protected-relation fibers
when selecting one representative cannot discard a related protected document. -/
def CertificateSaturatesProtectedFibers
(protectedRelation : Yams.Core.DocumentId → Yams.Core.DocumentId → Prop)
(certificate : SelectiveRouteCertificate)
(protectedDocs : List Yams.Core.DocumentId) : Prop :=
∀ representative ∈ certificate.allowedDocs,
∀ doc ∈ protectedDocs,
protectedRelation representative doc → doc ∈ certificate.allowedDocs
/-- Fiber representation, complete cover materialization, and fiber saturation
jointly cover the protected set. No geometric premise is used. -/
theorem represented_materialized_saturatedFibers_coverProtected
{protectedRelation : Yams.Core.DocumentId → Yams.Core.DocumentId → Prop}
{cover : TopologyCoverLevel}
{certificate : SelectiveRouteCertificate}
{protectedDocs : List Yams.Core.DocumentId}
(hRepresented : ProtectedFibersRepresented protectedRelation cover protectedDocs)
(hMaterialized : CertificateMaterializesCover certificate cover)
(hSaturated :
CertificateSaturatesProtectedFibers protectedRelation certificate protectedDocs) :
∀ doc ∈ protectedDocs, doc ∈ certificate.allowedDocs := by
intro doc hProtected
rcases hRepresented doc hProtected with ⟨representative, hCover, hRelation⟩
exact hSaturated representative (hMaterialized representative hCover)
doc hProtected hRelation
/-- Candidate-stage membership in the declared relevant set. -/
def CandidateDocsWithin
(candidates : List ComponentCandidate)
(docs : List Yams.Core.DocumentId) : Prop :=
∀ candidate ∈ candidates, candidate.doc ∈ docs
/-- Pair preservation plus cover materialization derives relevant-document
coverage instead of assuming certificate coverage directly. -/
theorem preservedNeighborhood_materializedCover_coversRelevant
{anchor : Yams.Core.DocumentId}
{pairs : List ProtectedDocumentPair}
{relevantDocs : List Yams.Core.DocumentId}
{cover : TopologyCoverLevel}
{certificate : SelectiveRouteCertificate}
(hRelevant : RelevantSetProtected anchor pairs relevantDocs)
(hPairs : PreservesLocalPairs cover pairs)
(hMaterialized : CertificateMaterializesCover certificate cover) :
∀ doc ∈ relevantDocs, doc ∈ certificate.allowedDocs := by
intro doc hDoc
rcases hRelevant doc hDoc with ⟨pair, hPair, hEndpoints⟩
rcases hPairs pair hPair with ⟨cluster, hCluster, hLeft, hRight⟩
apply hMaterialized
simp [coverDocs, fragmentUnionDocs]
refine ⟨cluster, hCluster, ?_⟩
rcases hEndpoints with ⟨_, hDocRight⟩ | ⟨hDocLeft, _⟩
· simpa [hDocRight] using hRight
· simpa [hDocLeft] using hLeft
/-- Route selection evidence and narrowing admission remain separate. An
embedding-selected cover cannot masquerade as a recall certificate. -/
structure CoordinateRouteObservation where
relationCover : ProtectedRelationCoverObservation := {}
certificate : SelectiveRouteCertificate := {}
coordinateSpaceAlignmentObserved : Bool := false
protectedRelationCoverageObserved : Bool := false
protectedFibersRepresentedObserved : Bool := false
protectedFiberSaturationObserved : Bool := false
routeRiskObserved : Bool := false
workObserved : Bool := false
deriving Repr, BEq
structure CoordinateRoutingConfig where
route : SelectiveRouteConfig := {}
deriving Repr, BEq
/-- Hard narrowing requires positive observation status for every certificate
class. A zero-valued counter is evidence only when its producer marked that
counter as observed. -/
def RequiredCoordinateEvidenceObserved (observation : CoordinateRouteObservation) : Prop :=
observation.coordinateSpaceAlignmentObserved = true ∧
observation.protectedRelationCoverageObserved = true ∧
observation.protectedFibersRepresentedObserved = true ∧
observation.protectedFiberSaturationObserved = true ∧
observation.routeRiskObserved = true ∧
observation.workObserved = true
def CoordinateRouteAdmissible
(cfg : CoordinateRoutingConfig) (observation : CoordinateRouteObservation) : Prop :=
RequiredCoordinateEvidenceObserved observation ∧
ProtectedRelationCoverAdmissible observation.relationCover ∧
RouteCertificateAdmissible cfg.route observation.certificate
instance coordinateRouteAdmissibleDecidable
(cfg : CoordinateRoutingConfig)
(observation : CoordinateRouteObservation) :
Decidable (CoordinateRouteAdmissible cfg observation) := by
unfold CoordinateRouteAdmissible RequiredCoordinateEvidenceObserved
ProtectedRelationCoverAdmissible RouteCertificateAdmissible
EmpiricalMissRiskWithin EffortWithinBudget
infer_instance
/-- The relation-cover policy keeps the existing global/augment/narrow
actions. A useful uncertified route may still augment the global candidate set. -/
def selectCoordinateRoutingAction
(cfg : CoordinateRoutingConfig)
(observation : CoordinateRouteObservation) : SelectiveRoutingAction :=
if CoordinateRouteAdmissible cfg observation then
.narrow
else if observation.certificate.allowedDocs.isEmpty then
.global
else
.augment
/-- Candidate-set effect of relation-cover routing before ordinary fusion and
top-k truncation. -/
def applyCoordinateRoute
(cfg : CoordinateRoutingConfig)
(observation : CoordinateRouteObservation)
(globalCandidates : List ComponentCandidate) : List ComponentCandidate :=
match selectCoordinateRoutingAction cfg observation with
| .global => globalCandidates
| .augment =>
globalCandidates ++ allowedDocumentCandidates observation.certificate.allowedDocs
| .narrow =>
globalCandidates.filter
(fun candidate => observation.certificate.allowedDocs.contains candidate.doc)
/-- Protected-relation bridge at the candidate stage. If the ideal relevant
top-k is present in global retrieval, belongs to the protected query
neighborhood, and the selected cover preserves and materializes that
neighborhood, routing cannot remove it. This theorem does not claim
that later fusion or top-k truncation preserves ranking. -/
theorem coordinateRoute_relevantTopK_subset_routedCandidates
{cfg : CoordinateRoutingConfig}
{observation : CoordinateRouteObservation}
{globalCandidates relevantTopK : List ComponentCandidate}
{anchor : Yams.Core.DocumentId}
{pairs : List ProtectedDocumentPair}
{relevantDocs : List Yams.Core.DocumentId}
(hGlobal : ∀ candidate ∈ relevantTopK, candidate ∈ globalCandidates)
(hTopKRelevant : CandidateDocsWithin relevantTopK relevantDocs)
(hRelevant : RelevantSetProtected anchor pairs relevantDocs)
(hPairs : PreservesLocalPairs observation.relationCover.cover pairs)
(hMaterialized :
CertificateMaterializesCover observation.certificate observation.relationCover.cover) :
∀ candidate ∈ relevantTopK,
candidate ∈ applyCoordinateRoute cfg observation globalCandidates := by
intro candidate hTopK
have hAllowed : candidate.doc ∈ observation.certificate.allowedDocs :=
preservedNeighborhood_materializedCover_coversRelevant
hRelevant hPairs hMaterialized candidate.doc (hTopKRelevant candidate hTopK)
by_cases hAdmissible : CoordinateRouteAdmissible cfg observation
· simp [applyCoordinateRoute, selectCoordinateRoutingAction, hAdmissible,
hGlobal candidate hTopK, hAllowed]
· by_cases hEmpty : observation.certificate.allowedDocs = []
· simpa [applyCoordinateRoute, selectCoordinateRoutingAction, hAdmissible, hEmpty] using
hGlobal candidate hTopK
· simp [applyCoordinateRoute, selectCoordinateRoutingAction, hAdmissible, hEmpty,
hGlobal candidate hTopK]
/-- Alternative protected-relation fiber bridge for the candidate stage.
Representation supplies a cover witness and saturation closes every related
protected fiber touched by the materialized certificate. -/
theorem coordinateRoute_fiberProtectedTopK_subset_routedCandidates
{protectedRelation : Yams.Core.DocumentId → Yams.Core.DocumentId → Prop}
{cfg : CoordinateRoutingConfig}
{observation : CoordinateRouteObservation}
{globalCandidates protectedTopK : List ComponentCandidate}
{protectedDocs : List Yams.Core.DocumentId}
(hGlobal : ∀ candidate ∈ protectedTopK, candidate ∈ globalCandidates)
(hTopKProtected : CandidateDocsWithin protectedTopK protectedDocs)
(hRepresented :
ProtectedFibersRepresented
protectedRelation observation.relationCover.cover protectedDocs)
(hMaterialized :
CertificateMaterializesCover observation.certificate observation.relationCover.cover)
(hSaturated :
CertificateSaturatesProtectedFibers
protectedRelation observation.certificate protectedDocs) :
∀ candidate ∈ protectedTopK,
candidate ∈ applyCoordinateRoute cfg observation globalCandidates := by
intro candidate hTopK
have hAllowed : candidate.doc ∈ observation.certificate.allowedDocs :=
represented_materialized_saturatedFibers_coverProtected
hRepresented hMaterialized hSaturated candidate.doc
(hTopKProtected candidate hTopK)
by_cases hAdmissible : CoordinateRouteAdmissible cfg observation
· simp [applyCoordinateRoute, selectCoordinateRoutingAction, hAdmissible,
hGlobal candidate hTopK, hAllowed]
· by_cases hEmpty : observation.certificate.allowedDocs = []
· simpa [applyCoordinateRoute, selectCoordinateRoutingAction, hAdmissible, hEmpty] using
hGlobal candidate hTopK
· simp [applyCoordinateRoute, selectCoordinateRoutingAction, hAdmissible, hEmpty,
hGlobal candidate hTopK]
/-- Candidate-level meaning of a strictly better-focused route: it retains the
declared relevant set, invents nothing outside the global candidate set, and
removes at least one global candidate. This does not order the retained set. -/
def StrictlyFocusesCandidates
(relevant baseline routed : List ComponentCandidate) : Prop :=
(∀ candidate ∈ relevant, candidate ∈ routed) ∧
(∀ candidate ∈ routed, candidate ∈ baseline) ∧
∃ candidate ∈ baseline, candidate ∉ routed
/-- An admitted route is strictly better-focused when the relation cover
preserves the relevant top-k and at least one global candidate lies outside
the materialized cover. -/
theorem coordinateRoute_admitted_strictlyFocusesRelevantTopK
{cfg : CoordinateRoutingConfig}
{observation : CoordinateRouteObservation}
{globalCandidates relevantTopK : List ComponentCandidate}
{anchor : Yams.Core.DocumentId}
{pairs : List ProtectedDocumentPair}
{relevantDocs : List Yams.Core.DocumentId}
{outside : ComponentCandidate}
(hAdmitted : CoordinateRouteAdmissible cfg observation)
(hGlobal : ∀ candidate ∈ relevantTopK, candidate ∈ globalCandidates)
(hTopKRelevant : CandidateDocsWithin relevantTopK relevantDocs)
(hRelevant : RelevantSetProtected anchor pairs relevantDocs)
(hPairs : PreservesLocalPairs observation.relationCover.cover pairs)
(hMaterialized :
CertificateMaterializesCover observation.certificate observation.relationCover.cover)
(hOutsideGlobal : outside ∈ globalCandidates)
(hOutsideAllowed : outside.doc ∉ observation.certificate.allowedDocs) :
StrictlyFocusesCandidates relevantTopK globalCandidates
(applyCoordinateRoute cfg observation globalCandidates) := by
refine ⟨coordinateRoute_relevantTopK_subset_routedCandidates
hGlobal hTopKRelevant hRelevant hPairs hMaterialized, ?_, ?_⟩
· intro candidate hRouted
have hFiltered : candidate ∈ globalCandidates ∧
candidate.doc ∈ observation.certificate.allowedDocs := by
simpa [applyCoordinateRoute, selectCoordinateRoutingAction, hAdmitted] using hRouted
exact hFiltered.1
· refine ⟨outside, hOutsideGlobal, ?_⟩
intro hRouted
have hFiltered : outside ∈ globalCandidates ∧
outside.doc ∈ observation.certificate.allowedDocs := by
simpa [applyCoordinateRoute, selectCoordinateRoutingAction, hAdmitted] using hRouted
exact hOutsideAllowed hFiltered.2
/-- Hard narrowing is selected exactly when both the relation cover and the
empirical route certificate are admissible and their required observations are available. -/
theorem coordinateRoute_narrow_iff_admissible
(cfg : CoordinateRoutingConfig)
(observation : CoordinateRouteObservation) :
selectCoordinateRoutingAction cfg observation = .narrow ↔
CoordinateRouteAdmissible cfg observation := by
by_cases hAdmissible : CoordinateRouteAdmissible cfg observation
· simp [selectCoordinateRoutingAction, hAdmissible]
· by_cases hEmpty : observation.certificate.allowedDocs = []
· simp [selectCoordinateRoutingAction, hAdmissible, hEmpty]
· simp [selectCoordinateRoutingAction, hAdmissible, hEmpty]
/-- Admission exposes the protected-relation obligation independently of the
miss-risk and work-budget certificate. -/
theorem coordinateRoute_admitted_relationCoverCertified
{cfg : CoordinateRoutingConfig}
{observation : CoordinateRouteObservation}
(hAdmitted : CoordinateRouteAdmissible cfg observation) :
ProtectedRelationCoverAdmissible observation.relationCover := by
exact hAdmitted.2.1
/-- Coordinate admission also preserves the existing route-risk and work
contract. -/
theorem coordinateRoute_admitted_routeCertified
{cfg : CoordinateRoutingConfig}
{observation : CoordinateRouteObservation}
(hAdmitted : CoordinateRouteAdmissible cfg observation) :
RouteCertificateAdmissible cfg.route observation.certificate := by
exact hAdmitted.2.2
/-- Missing required observations force the policy to abstain from hard
narrowing even if default-valued counters happen to satisfy numeric bounds. -/
theorem coordinateRoute_unobserved_neverNarrows
{cfg : CoordinateRoutingConfig}
{observation : CoordinateRouteObservation}
(hUnobserved : ¬ RequiredCoordinateEvidenceObserved observation) :
selectCoordinateRoutingAction cfg observation ≠ .narrow := by
intro hNarrow
have hAdmissible :=
(coordinateRoute_narrow_iff_admissible cfg observation).mp hNarrow
exact hUnobserved hAdmissible.1
/-- Without a protected-relation cover certificate, the action cannot be hard narrowing. -/
theorem coordinateRoute_uncoveredRelation_neverNarrows
{cfg : CoordinateRoutingConfig}
{observation : CoordinateRouteObservation}
(hUntrusted : ¬ ProtectedRelationCoverAdmissible observation.relationCover) :
selectCoordinateRoutingAction cfg observation ≠ .narrow := by
intro hNarrow
have hAdmissible :=
(coordinateRoute_narrow_iff_admissible cfg observation).mp hNarrow
exact hUntrusted hAdmissible.2.1
end Yams.SearchEngine