3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-07-12 10:06:23 +00:00

First attempt for monadic decomposition

This commit is contained in:
CEisenhofer 2026-06-05 18:40:36 +02:00
parent 9de196b3cb
commit c20bc0e631
10 changed files with 546 additions and 242 deletions

View file

@ -59,6 +59,7 @@ void smt_params::updt_local_params(params_ref const & _p) {
m_nseq_parikh = p.nseq_parikh();
m_nseq_regex_precheck = p.nseq_regex_precheck();
m_nseq_regex_factorization_threshold = p.nseq_regex_factorization_threshold();
m_nseq_regex_factorization_eager = p.nseq_regex_factorization_eager();
m_nseq_signature = p.nseq_signature();
m_nseq_axiomatize_diseq = p.nseq_axiomatize_diseq();
m_up_persist_clauses = p.up_persist_clauses();
@ -175,6 +176,7 @@ void smt_params::display(std::ostream & out) const {
DISPLAY_PARAM(m_nseq_parikh);
DISPLAY_PARAM(m_nseq_regex_precheck);
DISPLAY_PARAM(m_nseq_regex_factorization_threshold);
DISPLAY_PARAM(m_nseq_regex_factorization_eager);
DISPLAY_PARAM(m_nseq_axiomatize_diseq);
DISPLAY_PARAM(m_profile_res_sub);

View file

@ -254,6 +254,7 @@ struct smt_params : public preprocessor_params,
bool m_nseq_parikh = false;
bool m_nseq_regex_precheck = true;
unsigned m_nseq_regex_factorization_threshold = 1;
bool m_nseq_regex_factorization_eager = false;
bool m_nseq_signature = false;
bool m_nseq_axiomatize_diseq = false;

View file

@ -138,6 +138,7 @@ def_module_params(module_name='smt',
('nseq.parikh', BOOL, False, 'enable Parikh image checks in nseq solver'),
('nseq.regex_precheck', BOOL, True, 'enable regex membership pre-check before DFS in theory_nseq: checks intersection emptiness per-variable and short-circuits SAT/UNSAT for regex-only problems'),
('nseq.regex_factorization_threshold', UINT, 1, 'maximum number of cases to factor a classical regex into in a single step (gives completeness on classical regexes)'),
('nseq.regex_factorization_eager', BOOL, False, 'apply regex factorization (sigma splitting) eagerly in the theory interface (propagate_pos_mem) instead of lazily inside the Nielsen graph'),
('nseq.signature', BOOL, False, 'enable heuristic signature-based string equation splitting in Nielsen solver'),
('nseq.axiomatize_diseq', BOOL, False, 'eagerly axiomatize sequence disequalities'),
('core.validate', BOOL, False, '[internal] validate unsat core produced by SMT context. This option is intended for debugging'),