diff options
author | Minijackson <minijackson@riseup.net> | 2023-01-25 16:08:21 +0100 |
---|---|---|
committer | Minijackson <minijackson@riseup.net> | 2023-01-25 16:08:21 +0100 |
commit | aded390750171429dca8e7e4d83e3fca76718cbf (patch) | |
tree | 4adc7dc6f4369af3305b8045e0a8514d0f0bf762 /z3-solver/src | |
parent | 794ce6e18b22ff3887870050e0992c0814fea9b5 (diff) | |
download | diaphragm-aded390750171429dca8e7e4d83e3fca76718cbf.tar.gz diaphragm-aded390750171429dca8e7e4d83e3fca76718cbf.zip |
solving: add minimize/maximize
Diffstat (limited to 'z3-solver/src')
-rw-r--r-- | z3-solver/src/lib.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/z3-solver/src/lib.rs b/z3-solver/src/lib.rs index 6ad7ffc..2085768 100644 --- a/z3-solver/src/lib.rs +++ b/z3-solver/src/lib.rs | |||
@@ -13,7 +13,7 @@ use std::collections::HashMap; | |||
13 | #[derive(Debug)] | 13 | #[derive(Debug)] |
14 | pub struct Z3Context<'z3> { | 14 | pub struct Z3Context<'z3> { |
15 | ctx: &'z3 z3::Context, | 15 | ctx: &'z3 z3::Context, |
16 | solver: z3::Solver<'z3>, | 16 | solver: z3::Optimize<'z3>, |
17 | 17 | ||
18 | floats: HashMap<VariableHandle, z3::ast::Real<'z3>>, | 18 | floats: HashMap<VariableHandle, z3::ast::Real<'z3>>, |
19 | max_float_id: u32, | 19 | max_float_id: u32, |
@@ -57,7 +57,7 @@ impl<'z3> Z3Context<'z3> { | |||
57 | pub fn new(ctx: &'z3 z3::Context) -> Self { | 57 | pub fn new(ctx: &'z3 z3::Context) -> Self { |
58 | Self { | 58 | Self { |
59 | ctx, | 59 | ctx, |
60 | solver: z3::Solver::new(ctx), | 60 | solver: z3::Optimize::new(ctx), |
61 | floats: HashMap::new(), | 61 | floats: HashMap::new(), |
62 | max_float_id: 0, | 62 | max_float_id: 0, |
63 | bools: HashMap::new(), | 63 | bools: HashMap::new(), |
@@ -115,7 +115,7 @@ impl<'z3> Z3Context<'z3> { | |||
115 | 115 | ||
116 | impl<'z3> SolverContext for Z3Context<'z3> { | 116 | impl<'z3> SolverContext for Z3Context<'z3> { |
117 | fn solve<'a>(&'a self) -> Box<dyn SolverModel + 'a> { | 117 | fn solve<'a>(&'a self) -> Box<dyn SolverModel + 'a> { |
118 | match self.solver.check() { | 118 | match self.solver.check(&[]) { |
119 | z3::SatResult::Unsat | z3::SatResult::Unknown => panic!("Failed solving"), | 119 | z3::SatResult::Unsat | z3::SatResult::Unknown => panic!("Failed solving"), |
120 | z3::SatResult::Sat => {} | 120 | z3::SatResult::Sat => {} |
121 | } | 121 | } |
@@ -241,6 +241,14 @@ impl<'z3> SolverContext for Z3Context<'z3> { | |||
241 | self.anon_bool(result) | 241 | self.anon_bool(result) |
242 | } | 242 | } |
243 | 243 | ||
244 | fn float_maximize(&mut self, value: Float) { | ||
245 | self.solver.maximize(&self.float(value)); | ||
246 | } | ||
247 | |||
248 | fn float_minimize(&mut self, value: Float) { | ||
249 | self.solver.minimize(&self.float(value)); | ||
250 | } | ||
251 | |||
244 | // Bools | 252 | // Bools |
245 | 253 | ||
246 | fn new_free_bool(&mut self) -> Bool { | 254 | fn new_free_bool(&mut self) -> Bool { |