Я новичок в OCaml. Я установил модуль Z3, как указано в этом linkОшибка при использовании модуля Z3 в OCaml
Я звоню Z3 с помощью команды:
ocamlc -custom -o ml_example.byte -I ~/Downloads/z3-unstable/build/api/ml -cclib "-L ~/Downloads/z3-unstable/build/ -lz3" nums.cma z3ml.cma $1
где $ 1 заменяется на имя файла.
type loc = int
type var = string
type exp =
| Mul of int * exp
| Add of exp * exp
| Sub of exp * exp
| Const of int
| Var of var
type formula =
| Eq of exp * exp
| Geq of exp
| Gt of exp
type stmt =
| Assign of var * exp
| Assume of formula
type transition = loc * stmt * loc
module OrdVar =
struct
type t = var
let compare = Pervasives.compare
end
module VarSets = Set.Make(OrdVar)
type vars = VarSets.t
module OrdTrans =
struct
type t = transition
let compare = Pervasives.compare
end
module TransitionSets = Set.Make(OrdTrans)
type transitionSet = TransitionSets.t
type program = vars * loc * transitionSet * loc
let ex1() : program =
let vset = VarSets.empty in
let vset = VarSets.add "x" vset in
let vset = VarSets.add "y" vset in
let vset = VarSets.add "z" vset in
let ts = TransitionSets.empty in
(* 0 X' = X + 1 *)
let stmt1 = Assign("x", Add(Var("x"), Const(1))) in
let tr1 = (0,stmt1,1) in
let ts = TransitionSets.add tr1 ts in
(vset,0,ts,10)
В приведенном выше коде я определяю некоторые типы. Теперь, если я включаю команду «открыть Z3», я получаю сообщение «Ошибка: Unbound module Set.Make».
Я могу запустить тестовый код, который использует Z3-модуль без каких-либо трудностей, но не может работать с указанным выше кодом.
где делать вы ставите 'открытый Z3'? Можете ли вы предоставить код, который не компилируется – ivg
Я попытался положить «открытый Z3» в верхней части кода, а также в конце кода, который я разместил выше. Я даже не начал использовать команды z3, но все равно получаю синтаксическую ошибку –
Это не имеет смысла. Если бы вы получали 'Unbound module Z3', это было бы понятно, но не было предварительной обработки вашего файла, который мог бы генерировать синтаксически неправильный код. – ChriS