nx_avatar_split.nx
buildroot/runtime/nx_avatar_split.nx
about
nx_avatar_split.nx -- AVATAR-style clause splitting.
Per Vampire-displacement roadmap Phase 2. AVATAR (Voronkov 2014)
splits multi-component clauses into independent sub-clauses; full
AVATAR uses a SAT solver to coordinate which split combinations
to explore.
This commit ships the SPLIT-ONLY primitive (trivial AVATAR). For
each multi-component input clause, emit one output clause per
component containing only that component's literals. Single-
component clauses pass through unchanged.
Sound when split components are ground or when each split's
variables don't escape into the SAT-side coordination -- which is
always the case here because we're splitting variable-disjoint
components. The components don't share variables by construction
(that's what "component" means), so each can be saturated
independently and any UNSAT in any sub-clause is UNSAT for the
whole clause set.
API:
nx_avatar_split_clause(c, out, cap) -> n_emitted
nx_avatar_split_all(in, n_in, out, cap) -> n_emitted
dependencies 7 imports · 5 importers
imports: nx_syscalls.nxnx_runtime.nxnx_tier.nxnx_result.nxnx_unify.nxnx_resolution.nxnx_clause_components.nx
imported by: nx_avatar_encode.nxnx_avatar_encode_test.nxnx_avatar_solve_test.nxnx_avatar_split_test.nxnx_solve.nx
structs
| none |
consts
| none |
functions
| 43 | func nx_avatar_split_clause(c: *Clause, out: *Clause, cap: nx_int) -> nx_int called by 2: nx_avatar_split_allmain calls 4: sys_mmapnx_clause_components_classifynx_clause_lit_atnx_clause_add |
| 110 | func nx_avatar_count_splittable(input: *Clause, n_in: nx_int) -> nx_int |
| 123 | func nx_avatar_split_all(input: *Clause, n_in: nx_int, |