You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Prove three properties of the resolver in lib/resolve.ml + lib/module_loader.ml:
Determinism: for a fixed program + module-search-path, resolve_program_with_loader returns the same symbol table on every call (no clock / hash-iter / fs-order leakage).
Cycle-freedom: import cycles are rejected at resolve time with an ImportCycle error.
Property tests (Alcotest + a small QCheck-style generator) suffice for (1) and (3). (2) needs a graph-cycle invariant — either property tests or a small TLA+ spec.
Target file: test/test_resolve_determinism.ml. The qualified-path part has prior art at test/test_qualified_paths.ml already; extend that suite.
Size
M. Estimate: 1 week. Mostly mechanical once a generator for "valid program with N modules + K imports" is in hand.
Parent: #513
Statement
Prove three properties of the resolver in
lib/resolve.ml+lib/module_loader.ml:resolve_program_with_loaderreturns the same symbol table on every call (no clock / hash-iter / fs-order leakage).ImportCycleerror.Pkg.Type/Pkg.Effectunrepresentable (estate-wide port blocker; ADR-014) #228):Mod.TandMod::Tresolve to the same canonicalsymbol_id; an unboundMod::TraisesUnknownModuledeterministically.Mechanisation
Property tests (Alcotest + a small QCheck-style generator) suffice for (1) and (3). (2) needs a graph-cycle invariant — either property tests or a small TLA+ spec.
Target file:
test/test_resolve_determinism.ml. The qualified-path part has prior art attest/test_qualified_paths.mlalready; extend that suite.Size
M. Estimate: 1 week. Mostly mechanical once a generator for "valid program with N modules + K imports" is in hand.
Status
NOT STARTED.
🤖 Generated with Claude Code