More functorization

This commit is contained in:
Denis Merigoux 2022-01-19 09:47:08 +01:00
parent 4852891e6c
commit 2f7059c1ac
No known key found for this signature in database
GPG Key ID: EE99DCFA365C3EE3
4 changed files with 59 additions and 35 deletions

View File

@ -31,9 +31,36 @@ module type Backend = sig
val print_model : backend_context -> model -> string val print_model : backend_context -> model -> string
val is_model_empty : model -> bool val is_model_empty : model -> bool
val translate_expr :
backend_context -> Dcalc.Ast.expr Utils.Pos.marked -> backend_context * vc_encoding
end end
module SolverIO (B : Backend) = struct module type SolverIo = sig
type vc_encoding
type backend_context
type model
type vc_encoding_result = Success of vc_encoding * backend_context | Fail of string
val print_positive_result : Conditions.verification_condition -> string
val print_negative_result :
Conditions.verification_condition -> backend_context -> model option -> string
val encode_and_check_vc :
Dcalc.Ast.decl_ctx -> Conditions.verification_condition * vc_encoding_result -> unit
end
module MakeSolverIO (B : Backend) = struct
type vc_encoding = B.vc_encoding
type backend_context = B.backend_context
type model = B.model
type vc_encoding_result = Success of B.vc_encoding * B.backend_context | Fail of string type vc_encoding_result = Success of B.vc_encoding * B.backend_context | Fail of string
let print_positive_result (vc : Conditions.verification_condition) : string = let print_positive_result (vc : Conditions.verification_condition) : string =

View File

@ -30,16 +30,31 @@ module type Backend = sig
val print_model : backend_context -> model -> string val print_model : backend_context -> model -> string
val is_model_empty : model -> bool val is_model_empty : model -> bool
val translate_expr :
backend_context -> Dcalc.Ast.expr Utils.Pos.marked -> backend_context * vc_encoding
end end
module SolverIO : functor (B : Backend) -> sig module type SolverIo = sig
type vc_encoding_result = Success of B.vc_encoding * B.backend_context | Fail of string type vc_encoding
type backend_context
type model
type vc_encoding_result = Success of vc_encoding * backend_context | Fail of string
val print_positive_result : Conditions.verification_condition -> string val print_positive_result : Conditions.verification_condition -> string
val print_negative_result : val print_negative_result :
Conditions.verification_condition -> B.backend_context -> B.model option -> string Conditions.verification_condition -> backend_context -> model option -> string
val encode_and_check_vc : val encode_and_check_vc :
Dcalc.Ast.decl_ctx -> Conditions.verification_condition * vc_encoding_result -> unit Dcalc.Ast.decl_ctx -> Conditions.verification_condition * vc_encoding_result -> unit
end end
module MakeSolverIO : functor (B : Backend) ->
SolverIo
with type vc_encoding = B.vc_encoding
and type backend_context = B.backend_context
and type model = B.model

View File

@ -580,6 +580,8 @@ module Backend = struct
let print_model (ctx : backend_context) (m : model) : string = print_model ctx m let print_model (ctx : backend_context) (m : model) : string = print_model ctx m
let is_model_empty (m : model) : bool = List.length (Z3.Model.get_decls m) = 0 let is_model_empty (m : model) : bool = List.length (Z3.Model.get_decls m) = 0
let translate_expr (ctx : backend_context) (e : Dcalc.Ast.expr Pos.marked) = translate_expr ctx e
end end
module Io = Io.SolverIO (Backend) module Io = Io.MakeSolverIO (Backend)

View File

@ -29,34 +29,14 @@ type context = {
val translate_expr : context -> Dcalc.Ast.expr Utils.Pos.marked -> context * Z3.Expr.expr val translate_expr : context -> Dcalc.Ast.expr Utils.Pos.marked -> context * Z3.Expr.expr
module Backend : sig module Backend :
type backend_context = context Io.Backend
with type vc_encoding = Z3.Expr.expr
and type backend_context = context
and type model = Z3.Model.model
type vc_encoding = Z3.Expr.expr module Io :
Io.SolverIo
val print_encoding : vc_encoding -> string with type vc_encoding = Z3.Expr.expr
and type backend_context = context
type model = Z3.Model.model and type model = Z3.Model.model
type solver_result = ProvenTrue | ProvenFalse of model option | Unknown
val solve_vc_encoding : backend_context -> vc_encoding -> solver_result
val print_model : backend_context -> model -> string
val is_model_empty : model -> bool
end
module Io : sig
type vc_encoding_result = Io.SolverIO(Backend).vc_encoding_result =
| Success of Backend.vc_encoding * Backend.backend_context
| Fail of string
val print_positive_result : Conditions.verification_condition -> string
val print_negative_result :
Conditions.verification_condition -> Backend.backend_context -> Backend.model option -> string
val encode_and_check_vc :
Dcalc.Ast.decl_ctx -> Conditions.verification_condition * vc_encoding_result -> unit
end