Skip to content

Commit e2f9dc2

Browse files
committed
Use the new definition type for predicates in Translate
1 parent 7a4700a commit e2f9dc2

File tree

7 files changed

+46
-25
lines changed

7 files changed

+46
-25
lines changed

src/lib/frontend/frontend.ml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ module type S = sig
145145

146146
val assume : (string * E.t * bool) process
147147

148-
val pred_def : (string * E.t) process
148+
val pred_def : E.def process
149149

150150
val query : (string * E.t * Ty.goal_sort) process
151151

@@ -350,10 +350,10 @@ module Make(SAT : Sat_solver_sig.S) : S with type sat_env = SAT.t = struct
350350
| `Unsat ->
351351
env.expl <- expl
352352

353-
let internal_pred_def ?(loc = DStd.Loc.dummy) (name, f) env =
353+
let internal_pred_def ?(loc = DStd.Loc.dummy) (E.{ name; axiom; _ } as def) env =
354354
if not (unused_context name env.used_context) then
355-
let expl = mk_root_dep name f loc in
356-
SAT.pred_def env.sat_env f name expl loc;
355+
let expl = mk_root_dep name def.E.axiom loc in
356+
SAT.pred_def env.sat_env axiom name expl loc;
357357
env.expl <- expl
358358

359359
let internal_query ?(loc = DStd.Loc.dummy) (n, f, sort) env =
@@ -447,8 +447,8 @@ module Make(SAT : Sat_solver_sig.S) : S with type sat_env = SAT.t = struct
447447
| Pop n -> check_if_over (internal_pop ~loc:d.st_loc n) env
448448
| Assume (n, f, mf) ->
449449
check_if_over (internal_assume ~loc:d.st_loc (n, f, mf)) env
450-
| PredDef (f, name) ->
451-
check_if_over (internal_pred_def ~loc:d.st_loc (name, f)) env
450+
| PredDef def ->
451+
check_if_over (internal_pred_def ~loc:d.st_loc def) env
452452
| Query (n, f, sort) ->
453453
begin
454454
(* If we have reached an unknown state, we can return it right

src/lib/frontend/frontend.mli

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ module type S = sig
7272

7373
val assume : (string * Expr.t * bool) process
7474

75-
val pred_def : (string * Expr.t) process
75+
val pred_def : Expr.def process
7676

7777
val query : (string * Expr.t * Ty.goal_sort) process
7878

src/lib/frontend/translate.ml

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1830,25 +1830,41 @@ let make file acc stmt =
18301830

18311831
begin match DStd.Tag.get tags DE.Tags.predicate with
18321832
| Some () ->
1833-
let decl_kind = E.Dpredicate defn in
1834-
let ff =
1835-
mk_expr ~loc:st_loc ~name_base
1833+
(* let decl_kind = E.Dpredicate defn in
1834+
let ff =
1835+
mk_expr ~loc:st_loc ~name_base
18361836
~toplevel:false ~decl_kind body
1837-
in
1838-
let qb = E.mk_eq ~iff:true defn ff in
1839-
let ff =
1840-
E.mk_forall name_base DStd.Loc.dummy binders [] qb
1837+
in
1838+
let qb = E.mk_eq ~iff:true defn ff in
1839+
let ff =
1840+
E.mk_forall name_base DStd.Loc.dummy binders [] qb
18411841
~toplevel:true ~decl_kind
1842-
in
1843-
assert (Var.Map.is_empty (E.free_vars ff Var.Map.empty));
1844-
let ff = E.purify_form ff in
1845-
let e =
1846-
if Ty.TvSet.is_empty (E.free_type_vars ff) then ff
1847-
else
1842+
in
1843+
assert (Var.Map.is_empty (E.free_vars ff Var.Map.empty));
1844+
let ff = E.purify_form ff in
1845+
let e =
1846+
if Ty.TvSet.is_empty (E.free_type_vars ff) then ff
1847+
else
18481848
E.mk_forall name_base st_loc
18491849
Var.Map.empty [] ff ~toplevel:true ~decl_kind
1850+
in *)
1851+
let args =
1852+
List.map (
1853+
fun (DE.{ path; id_ty; _ } as tv) ->
1854+
let ty = dty_to_ty id_ty in
1855+
let v = Var.of_string (get_basename path) in
1856+
Cache.store_sy tv (Sy.var v);
1857+
(v, ty)
1858+
) terml
1859+
in
1860+
let body =
1861+
mk_expr
1862+
~loc:st_loc ~name_base ~toplevel:false ~decl_kind:Daxiom body
1863+
in
1864+
let def =
1865+
E.mk_definition ~loc:st_loc ~name:name_base args body
18501866
in
1851-
Some C.{ st_decl = C.PredDef (e, name_base); st_loc }
1867+
Some C.{ st_decl = C.PredDef def; st_loc }
18521868
| None ->
18531869
let decl_kind = E.Dfunction defn in
18541870
let ff =

src/lib/structures/commands.ml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ module Log = (val Logs.src_log src : Logs.LOG)
3333
type sat_decl_aux =
3434
| Decl of Id.typed
3535
| Assume of string * Expr.t * bool
36-
| PredDef of Expr.t * string (*name of the predicate*)
36+
| PredDef of Expr.def
3737
| Optimize of Objective.Function.t
3838
| Query of string * Expr.t * Ty.goal_sort
3939
| ThAssume of Expr.th_elt
@@ -54,8 +54,8 @@ let print_aux fmt = function
5454

5555
| Assume (name, e, b) ->
5656
Format.fprintf fmt "assume %s(%b): @[<hov>%a@]" name b Expr.print e
57-
| PredDef (e, name) ->
58-
Format.fprintf fmt "pred-def %s: @[<hov>%a@]" name Expr.print e
57+
| PredDef def ->
58+
Format.fprintf fmt "pred-def: %a" Expr.pp_definition def
5959
| Query (name, e, sort) ->
6060
Format.fprintf fmt "query %s(%a): @[<hov>%a@]"
6161
name Ty.print_goal_sort sort Expr.print e

src/lib/structures/commands.mli

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
type sat_decl_aux =
3131
| Decl of Id.typed
3232
| Assume of string * Expr.t * bool
33-
| PredDef of Expr.t * string (*name of the predicate*)
33+
| PredDef of Expr.def
3434
| Optimize of Objective.Function.t
3535
| Query of string * Expr.t * Ty.goal_sort
3636
| ThAssume of Expr.th_elt

src/lib/structures/expr.ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2820,6 +2820,9 @@ let mk_definition ~loc ~name args body =
28202820
in
28212821
{ name; args; body; axiom; triggers }
28222822

2823+
(* TODO: create a better pretty printer. *)
2824+
let pp_definition ppf { name; _ } = Fmt.string ppf name
2825+
28232826
module Set = TSet
28242827
module Map = TMap
28252828

src/lib/structures/expr.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,8 @@ val mk_definition :
423423
t ->
424424
def
425425

426+
val pp_definition : def Fmt.t
427+
426428
val skolemize : quantified -> t
427429

428430
val elim_let : recursive:bool -> letin -> t

0 commit comments

Comments
 (0)