package smtml
An SMT solver frontend for OCaml
Install
dune-project
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
0.11.0.tar.gz
md5=16c50ecaaf48b24f9c6645586ad2969f
sha512=bcad4a74db72c9071348a059ad91ce07161f580d07cadec8451ad94a9a1b5f10d3f6994541c484746edd6ef6230ea602cda2c27e2690aa62172702825b0071eb
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)"
>