code wiki / (root) / nx_saturation.nx

nx_saturation.nx

buildroot/runtime/nx_saturation.nx

27486 B661 linesdepth 7pulls 10 transitivereach 15 importersview sourcekind library
docsdependenciesstructsconstsfunctions

about

nx_saturation.nx -- given-clause saturation loop with factoring. Per user 2026-05-14 "keep going till we can submit to casc". This is the proof-search engine on top of unify + resolution. Given a set of clauses (typically the negation of a conjecture), iterate resolution + factoring until either: - the empty clause is derived -> UNSAT (proof of original conjecture) - no new clauses can be derived -> UNKNOWN / SAT - resource budget exhausted -> TIMEOUT Discovery-Otter-Vampire-E-SPASS use this same skeleton; their performance differences come from clause selection heuristic + indexing + subsumption.

dependencies 10 imports · 15 importers

nx_syscalls.nx nx_runtime.nx nx_tier.nx nx_result.nx nx_unify.nx nx_resolution.nx nx_subsumption.nx nx_tautology.nx nx_disctree.nx nx_paramodulation.nx nx_saturation.nx nx_avatar_solve_test.nx nx_backward_subsume_test.nx nx_casc_bench.nx nx_casc_runner_test.nx nx_clause_weight_test.nx nx_discount_test.nx nx_fof_cnf_test.nx nx_fof_tseitin_test.nx nx_indexed_subsume_test.nx nx_saturation_test.nx

diagram shows first 10 each side; +0 more imports, +5 more importers in the complete lists below.

imports: nx_syscalls.nxnx_runtime.nxnx_tier.nxnx_result.nxnx_unify.nxnx_resolution.nxnx_subsumption.nxnx_tautology.nxnx_disctree.nxnx_paramodulation.nx

imported by: nx_avatar_solve_test.nxnx_backward_subsume_test.nxnx_casc_bench.nxnx_casc_runner_test.nxnx_clause_weight_test.nxnx_discount_test.nxnx_fof_cnf_test.nxnx_fof_tseitin_test.nxnx_indexed_subsume_test.nxnx_saturation_test.nxnx_solve.nxnx_solve_test.nxnx_tptp_formula_test.nxnx_tptp_load_test.nxnx_tptp_write_test.nx

structs

83struct Saturation

consts

31const NX_MAGIC_9223372036854775807: i64 = 9223372036854775807
80const NX_SAT_MAX_PROCESSED: nx_int = 256
81const NX_SAT_MAX_UNPROCESSED: nx_int = 1024
104const NX_SAT_BYTES: nx_int = 72
170const NX_SAT_VERDICT_UNSAT: nx_int = 2
171const NX_SAT_VERDICT_UNKNOWN: nx_int = 5

functions

39func nx_factor(c: *Clause, i: nx_int, j: nx_int, c_out: *Clause) -> *NxResult
106func nx_saturation_new(initial_budget: nx_int) -> *Saturation
125func nx_sat_proc_subsumes_indexed(s: *Saturation, c: *Clause) -> nx_int;
128func nx_sat_rebuild_index(s: *Saturation);
131func nx_sat_unproc_at(s: *Saturation, i: nx_int) -> *Clause
135func nx_sat_proc_at(s: *Saturation, i: nx_int) -> *Clause
140func nx_sat_add_unproc(s: *Saturation, c: *Clause) -> *NxResult
150func nx_sat_pick_given(s: *Saturation) -> *Clause
158func nx_sat_move_to_processed(s: *Saturation, given: *Clause) -> *NxResult
173func nx_sat_try_resolve_pair(s: *Saturation, given: *Clause, other: *Clause) -> nx_int
192func nx_sat_run(s: *Saturation) -> nx_int
240func nx_sat_proc_subsumes(s: *Saturation, c: *Clause) -> nx_int
255func nx_sat_clause_dedup(c: *Clause) -> *Clause
288func nx_sat_add_unproc_filtered(s: *Saturation, c: *Clause, eq_sym: nx_int) -> nx_int
302func nx_sat_try_paramodulate_pair_filtered(s: *Saturation, eq_clause: *Clause,
336func nx_sat_try_resolve_pair_filtered(s: *Saturation, given: *Clause,
367func nx_sat_backward_subsume(s: *Saturation, newest: *Clause) -> nx_int
400func nx_sat_index_clause(s: *Saturation, clause_idx: nx_int)
423func nx_sat_proc_subsumes_indexed(s: *Saturation, c: *Clause) -> nx_int
460func nx_clause_weight_term(t: *Term) -> nx_int
472func nx_clause_weight(c: *Clause) -> nx_int
489func nx_sat_pick_given_best_first(s: *Saturation) -> *Clause
508func nx_sat_pick_given_oldest_unpicked(s: *Saturation) -> *Clause
532func nx_sat_pick_given_lrs(s: *Saturation, counter: nx_int, ratio: nx_int) -> *Clause
541func nx_sat_run_discount_lrs(s: *Saturation, eq_sym: nx_int, ratio: nx_int) -> nx_int
589func nx_sat_rebuild_index(s: *Saturation)
609func nx_sat_run_discount(s: *Saturation, eq_sym: nx_int) -> nx_int