package smtml
An SMT solver frontend for OCaml
Install
Dune Dependency
Authors
-
JJoão Pereira <joaomhmpereira@tecnico.ulisboa.pt>
-
FFilipe Marques <filipe.s.marques@tecnico.ulisboa.pt>
-
HHichem Rami Ait El Hara <hra@ocamlpro.com>
-
LLéo Andrès <contact@ndrs.fr>
-
AArthur Carcano <arthur.carcano@ocamlpro.com>
-
PPierre Chambart <pierre.chambart@ocamlpro.com>
-
JJosé Fragoso Santos <jose.fragoso@tecnico.ulisboa.pt>
Maintainers
Sources
v0.8.0.tar.gz
md5=f3384afc4c52ea0fcda2b434892f8412
sha512=47a70d32fae1c833b6a4765ab1152b241e1c60078a30c27b4669bb4a7fe499228d5c5783aca4462ed553408fa16488903924bad11b050bb22a985770796f56af
doc/src/smtml/optimizer.ml.html
Source file optimizer.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
(* SPDX-License-Identifier: MIT *) (* Copyright (C) 2023-2024 formalsec *) (* Written by the Smtml programmers *) include Optimizer_intf let solver_time = ref 0.0 let ( let+ ) o f = Option.map f o module Make (M : Mappings_intf.S) = struct module O = M.Optimizer type t = M.optimize let create () : t = O.make () let push (opt : t) : unit = O.push opt let pop (opt : t) : unit = O.pop opt let add (opt : t) (es : Expr.t list) : unit = O.add opt es let protect (opt : t) (f : unit -> 'a) : 'a = push opt; let result = f () in pop opt; result let check (opt : t) = Utils.run_and_time_call ~use:(fun time -> solver_time := !solver_time +. time) (fun () -> O.check opt) let model opt = let+ model = O.model opt in M.values_of_model model let maximize (opt : t) (e : Expr.t) : Value.t option = let _ : M.handle = O.maximize opt e in match check opt with | `Sat -> let+ model = O.model opt in M.value model e | _ -> None let minimize (opt : t) (e : Expr.t) : Value.t option = let _ : M.handle = O.minimize opt e in match check opt with | `Sat -> let+ model = O.model opt in M.value model e | _ -> None let get_statistics (opt : t) : Statistics.t = M.Optimizer.get_statistics opt end module Z3 = Make (Z3_mappings)
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>