CIRCT 23.0.0git
Loading...
Searching...
No Matches
SATSolver.h
Go to the documentation of this file.
1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This header defines an abstract incremental SAT interface
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef CIRCT_SUPPORT_SATSOLVER_H
14#define CIRCT_SUPPORT_SATSOLVER_H
15
16#include <memory>
17
18namespace circt {
19
20/// Abstract interface for incremental SAT solvers with an IPASIR-style API.
22public:
23 enum Result : int { kSAT = 10, kUNSAT = 20, kUNKNOWN = 0 };
24
25 virtual ~IncrementalSATSolver() = default;
26
27 virtual void add(int lit) = 0;
28 virtual void assume(int lit) = 0;
29 virtual Result solve() = 0;
30 virtual int val(int v) const = 0;
31
32 virtual void reserveVars(int maxVar) {}
33};
34
35/// Construct a Z3-backed incremental IPASIR-style SAT solver.
36std::unique_ptr<IncrementalSATSolver> createZ3SATSolver();
37
38} // namespace circt
39
40#endif // CIRCT_SUPPORT_SATSOLVER_H
Abstract interface for incremental SAT solvers with an IPASIR-style API.
Definition SATSolver.h:21
virtual void reserveVars(int maxVar)
Definition SATSolver.h:32
virtual ~IncrementalSATSolver()=default
virtual void add(int lit)=0
virtual int val(int v) const =0
virtual Result solve()=0
virtual void assume(int lit)=0
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
std::unique_ptr< IncrementalSATSolver > createZ3SATSolver()
Construct a Z3-backed incremental IPASIR-style SAT solver.