3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-07-13 10:36:25 +00:00

Replace lp_simple_solver in nielsen with context_solver using smt::kernel (seq_len)

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2026-03-10 21:39:29 +00:00
parent a4f2c4a217
commit 5744958e46
5 changed files with 83 additions and 188 deletions

View file

@ -0,0 +1,64 @@
/*++
Copyright (c) 2026 Microsoft Corporation
Module Name:
nseq_context_solver.h
Abstract:
context_solver: concrete implementation of seq::simple_solver
that delegates arithmetic feasibility checks to an smt::kernel
configured with seq.solver = "seq_len".
Author:
Nikolaj Bjorner (nbjorner) 2026-03-10
--*/
#pragma once
#include "smt/seq/seq_nielsen.h"
#include "smt/smt_kernel.h"
#include "params/smt_params.h"
namespace smt {
/**
* Concrete simple_solver that wraps smt::kernel.
* Initializes the kernel with seq.solver = "seq_len" so that
* sequence length constraints are handled by theory_seq_len.
*/
class context_solver : public seq::simple_solver {
smt_params m_params; // must be declared before m_kernel
smt::kernel m_kernel;
static smt_params make_seq_len_params() {
smt_params p;
p.m_string_solver = symbol("seq_len");
return p;
}
public:
context_solver(ast_manager& m) :
m_params(make_seq_len_params()),
m_kernel(m, m_params) {}
lbool check() override {
return m_kernel.check();
}
void assert_expr(expr* e) override {
m_kernel.assert_expr(e);
}
void push() override {
m_kernel.push();
}
void pop(unsigned num_scopes) override {
m_kernel.pop(num_scopes);
}
};
}