mirror of
https://github.com/c-cube/sidekick.git
synced 2025-12-06 11:15:43 -05:00
wip: Tracer for SMT
This commit is contained in:
parent
342bf87759
commit
8f563c838f
5 changed files with 58 additions and 2 deletions
|
|
@ -16,6 +16,7 @@ module Theory = Theory
|
||||||
module Theory_id = Theory_id
|
module Theory_id = Theory_id
|
||||||
module Preprocess = Preprocess
|
module Preprocess = Preprocess
|
||||||
module Find_foreign = Find_foreign
|
module Find_foreign = Find_foreign
|
||||||
|
module Tracer = Tracer
|
||||||
|
|
||||||
type theory = Theory.t
|
type theory = Theory.t
|
||||||
type solver = Solver.t
|
type solver = Solver.t
|
||||||
|
|
|
||||||
|
|
@ -3,5 +3,5 @@
|
||||||
(public_name sidekick.smt-solver)
|
(public_name sidekick.smt-solver)
|
||||||
(synopsis "main SMT solver")
|
(synopsis "main SMT solver")
|
||||||
(libraries containers iter sidekick.core sidekick.util sidekick.cc
|
(libraries containers iter sidekick.core sidekick.util sidekick.cc
|
||||||
sidekick.sat sidekick.simplify sidekick.model)
|
sidekick.sat sidekick.simplify sidekick.model sidekick.trace)
|
||||||
(flags :standard -w +32 -open Sidekick_util))
|
(flags :standard -w +32 -open Sidekick_util))
|
||||||
|
|
|
||||||
35
src/smt/tracer.ml
Normal file
35
src/smt/tracer.ml
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
open Sidekick_core
|
||||||
|
module Tr = Sidekick_trace
|
||||||
|
module V = Ser_value
|
||||||
|
|
||||||
|
type Tr.entry_view += Assert of Term.t | Assert_clause of Lit.t list
|
||||||
|
|
||||||
|
class t (sink : Tr.Sink.t) =
|
||||||
|
object
|
||||||
|
inherit Term.Tracer.t ~sink as emit_t
|
||||||
|
|
||||||
|
method emit_assert_term t =
|
||||||
|
let id_t = emit_t#emit_term t in
|
||||||
|
let v = V.int id_t in
|
||||||
|
let id = Tr.Sink.emit sink ~tag:"AssT" v in
|
||||||
|
id
|
||||||
|
|
||||||
|
method emit_assert_clause (c : Lit.t list) =
|
||||||
|
(* get a list of pairs *)
|
||||||
|
let l =
|
||||||
|
List.map
|
||||||
|
(fun lit ->
|
||||||
|
let sign = Lit.sign lit in
|
||||||
|
let id_t = emit_t#emit_term @@ Lit.term lit in
|
||||||
|
V.(list [ bool sign; int id_t ]))
|
||||||
|
c
|
||||||
|
|> V.list
|
||||||
|
in
|
||||||
|
let id = Tr.Sink.emit sink ~tag:"AssC" l in
|
||||||
|
id
|
||||||
|
end
|
||||||
|
|
||||||
|
let assert_term (self : #t) t = self#emit_assert_term t
|
||||||
|
let assert_term' (self : #t) t = ignore (assert_term self t : Tr.Entry_id.t)
|
||||||
|
let assert_clause (self : #t) c = self#emit_assert_clause c
|
||||||
|
let assert_clause' (self : #t) c = ignore (assert_clause self c : Tr.Entry_id.t)
|
||||||
21
src/smt/tracer.mli
Normal file
21
src/smt/tracer.mli
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
open Sidekick_core
|
||||||
|
module Tr = Sidekick_trace
|
||||||
|
|
||||||
|
type Tr.entry_view += Assert of Term.t | Assert_clause of Lit.t list
|
||||||
|
|
||||||
|
class t :
|
||||||
|
Tr.Sink.t
|
||||||
|
-> object
|
||||||
|
inherit Term.Tracer.t
|
||||||
|
|
||||||
|
method emit_assert_term : Term.t -> Tr.Entry_id.t
|
||||||
|
(** Emit an assertion *)
|
||||||
|
|
||||||
|
method emit_assert_clause : Lit.t list -> Tr.Entry_id.t
|
||||||
|
(** Emit an assertion *)
|
||||||
|
end
|
||||||
|
|
||||||
|
val assert_term : #t -> Term.t -> Tr.Entry_id.t
|
||||||
|
val assert_term' : #t -> Term.t -> unit
|
||||||
|
val assert_clause : #t -> Lit.t list -> Tr.Entry_id.t
|
||||||
|
val assert_clause' : #t -> Lit.t list -> unit
|
||||||
|
|
@ -19,7 +19,6 @@
|
||||||
(** {2 Exports} *)
|
(** {2 Exports} *)
|
||||||
|
|
||||||
module Entry_view = Entry_view
|
module Entry_view = Entry_view
|
||||||
module Entry_read = Entry_read
|
|
||||||
module Sink = Sink
|
module Sink = Sink
|
||||||
module Source = Source
|
module Source = Source
|
||||||
module Entry_id = Entry_id
|
module Entry_id = Entry_id
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue