Commit a8ab6cc1 authored by Andrei Paskevich's avatar Andrei Paskevich

Merge branch 'no_t_vars'

parents c76541ab 3b84117c
(* Why3 driver for beagle (* Why3 driver for beagle
see http://users.cecs.anu.edu.au/~baumgart/systems/beagle/ *) see http://users.cecs.anu.edu.au/~baumgart/systems/beagle/ *)
printer "tptp-tff" printer "tptp-tff0"
filename "%f-%t-%g.p" filename "%f-%t-%g.p"
valid "Proof found" valid "Proof found"
...@@ -34,8 +34,10 @@ transformation "eliminate_algebraic" ...@@ -34,8 +34,10 @@ transformation "eliminate_algebraic"
transformation "eliminate_let" transformation "eliminate_let"
transformation "eliminate_if" transformation "eliminate_if"
transformation "discriminate"
transformation "encoding_smt" transformation "encoding_smt"
transformation "encoding_sort"
import "discrimination.gen"
theory BuiltIn theory BuiltIn
syntax predicate (=) "(%1 = %2)" syntax predicate (=) "(%1 = %2)"
...@@ -45,11 +47,6 @@ theory BuiltIn ...@@ -45,11 +47,6 @@ theory BuiltIn
meta "encoding : kept" type int meta "encoding : kept" type int
meta "encoding : kept" type real meta "encoding : kept" type real
meta "eliminate_algebraic" "no_index" meta "eliminate_algebraic" "no_index"
meta "select_inst" "all"
meta "select_lskept" "all"
meta "select_lsinst" "all"
meta "select_kept" "all"
end end
theory int.Int theory int.Int
......
(* Why3 driver for princess (* Why3 driver for princess
see http://www.philipp.ruemmer.org/princess.shtml *) see http://www.philipp.ruemmer.org/princess.shtml *)
printer "tptp-tff" printer "tptp-tff0"
filename "%f-%t-%g.p" filename "%f-%t-%g.p"
valid "Proof found" valid "Proof found"
...@@ -36,7 +36,8 @@ transformation "eliminate_if" ...@@ -36,7 +36,8 @@ transformation "eliminate_if"
transformation "discriminate" transformation "discriminate"
transformation "encoding_smt" transformation "encoding_smt"
transformation "encoding_sort"
import "discrimination.gen"
theory BuiltIn theory BuiltIn
syntax predicate (=) "(%1 = %2)" syntax predicate (=) "(%1 = %2)"
...@@ -46,11 +47,6 @@ theory BuiltIn ...@@ -46,11 +47,6 @@ theory BuiltIn
meta "encoding : kept" type int meta "encoding : kept" type int
meta "encoding : kept" type real meta "encoding : kept" type real
meta "eliminate_algebraic" "no_index" meta "eliminate_algebraic" "no_index"
meta "select_inst" "all"
meta "select_lskept" "all"
meta "select_lsinst" "all"
meta "select_kept" "all"
end end
theory int.Int theory int.Int
......
...@@ -28,18 +28,12 @@ trigger they can't appear since = can't appear *) ...@@ -28,18 +28,12 @@ trigger they can't appear since = can't appear *)
(*transformation "filter_trigger_builtin"*) (*transformation "filter_trigger_builtin"*)
(* this is sound as long as int is the only kept type *) (* this is sound as long as int is the only kept type *)
transformation "encoding_smt" transformation "encoding_tptp"
theory BuiltIn theory BuiltIn
syntax predicate (=) "(EQ %1 %2)" syntax predicate (=) "(EQ %1 %2)"
meta "encoding : kept" type int meta "encoding : base" type int
(* no symbol discrimination, no kept types *)
meta "select_inst" "none"
meta "select_lskept" "none"
meta "select_lsinst" "none"
meta "select_kept" "none"
end end
theory int.Int theory int.Int
......
(* Why driver for first-order tptp provers supporting TFF0 *) (* Why driver for first-order tptp provers supporting TFF0 *)
printer "tptp-tff" printer "tptp-tff0"
filename "%f-%t-%g.p" filename "%f-%t-%g.p"
valid "Proof found" valid "Proof found"
...@@ -29,8 +29,10 @@ transformation "eliminate_definition" ...@@ -29,8 +29,10 @@ transformation "eliminate_definition"
transformation "eliminate_inductive" transformation "eliminate_inductive"
transformation "eliminate_algebraic" transformation "eliminate_algebraic"
transformation "discriminate"
transformation "encoding_smt" transformation "encoding_smt"
transformation "encoding_sort"
import "discrimination.gen"
theory BuiltIn theory BuiltIn
syntax predicate (=) "(%1 = %2)" syntax predicate (=) "(%1 = %2)"
...@@ -40,11 +42,6 @@ theory BuiltIn ...@@ -40,11 +42,6 @@ theory BuiltIn
meta "encoding : kept" type int meta "encoding : kept" type int
meta "encoding : kept" type real meta "encoding : kept" type real
meta "eliminate_algebraic" "no_index" meta "eliminate_algebraic" "no_index"
meta "select_inst" "all"
meta "select_lskept" "all"
meta "select_lsinst" "all"
meta "select_kept" "all"
end end
theory int.Int theory int.Int
......
(* Why driver for first-order tptp provers supporting TFF1 *)
printer "tptp-tff1"
filename "%f-%t-%g.p"
valid "Proof found"
invalid "Completion found"
valid "^% SZS status Theorem"
valid "^% SZS status Unsatisfiable"
unknown "^% SZS status CounterSatisfiable" ""
unknown "^% SZS status Satisfiable" ""
timeout "^% SZS status Timeout"
unknown "^% SZS status GaveUp" ""
fail "^% SZS status Error" ""
timeout "Ran out of time"
timeout "CPU time limit exceeded"
outofmemory "Out of Memory"
unknown "No Proof Found" ""
fail "Failure.*" "\"\\0\""
time "why3cpulimit time : %s s"
(* to be improved *)
transformation "inline_trivial"
transformation "eliminate_builtin"
transformation "eliminate_definition"
transformation "eliminate_inductive"
transformation "eliminate_algebraic"
theory BuiltIn
syntax predicate (=) "(%1 = %2)"
syntax type int "$int"
syntax type real "$real"
meta "eliminate_algebraic" "no_index"
end
theory int.Int
syntax function zero "0"
syntax function one "1"
syntax function (+) "$sum(%1,%2)"
syntax function (-) "$difference(%1,%2)"
syntax function (*) "$product(%1,%2)"
syntax function (-_) "$uminus(%1)"
syntax predicate (<=) "$lesseq(%1,%2)"
syntax predicate (<) "$less(%1,%2)"
syntax predicate (>=) "$greatereq(%1,%2)"
syntax predicate (>) "$greater(%1,%2)"
remove prop CommutativeGroup.Comm.Comm
remove prop CommutativeGroup.Assoc
remove prop CommutativeGroup.Unit_def_l
remove prop CommutativeGroup.Unit_def_r
remove prop CommutativeGroup.Inv_def_l
remove prop CommutativeGroup.Inv_def_r
remove prop Assoc.Assoc
remove prop Mul_distr_l
remove prop Mul_distr_r
remove prop Comm.Comm
remove prop Unitary
remove prop Refl
remove prop Trans
remove prop Antisymm
remove prop Total
remove prop NonTrivialRing
remove prop CompatOrderAdd
remove prop ZeroLessOne
end
theory real.Real
syntax function zero "0.0"
syntax function one "1.0"
syntax function (+) "$sum(%1,%2)"
syntax function (-) "$difference(%1,%2)"
syntax function (*) "$product(%1,%2)"
syntax function (-_) "$uminus(%1)"
syntax function (/) "$quotient(%1,%2)"
syntax function inv "$quotient(1.0,%1)"
syntax predicate (<=) "$lesseq(%1,%2)"
syntax predicate (<) "$less(%1,%2)"
syntax predicate (>=) "$greatereq(%1,%2)"
syntax predicate (>) "$greater(%1,%2)"
remove prop CommutativeGroup.Comm.Comm
remove prop CommutativeGroup.Assoc
remove prop CommutativeGroup.Unit_def_l
remove prop CommutativeGroup.Unit_def_r
remove prop CommutativeGroup.Inv_def_l
remove prop CommutativeGroup.Inv_def_r
remove prop Assoc.Assoc
remove prop Mul_distr_l
remove prop Mul_distr_r
remove prop Comm.Comm
remove prop Unitary
remove prop Inverse
remove prop Refl
remove prop Trans
remove prop Antisymm
remove prop Total
remove prop NonTrivialRing
remove prop CompatOrderAdd
remove prop ZeroLessOne
end
theory int.EuclideanDivision
syntax function div "$quotient_e(%1,%2)"
syntax function mod "$remainder_e(%1,%2)"
remove prop Div_mod
remove prop Div_bound
remove prop Mod_bound
remove prop Mod_1
remove prop Div_1
remove prop Div_inf
remove prop Div_inf_neg
remove prop Mod_0
remove prop Div_1_left
remove prop Div_minus1_left
remove prop Mod_1_left
remove prop Mod_minus1_left
end
theory tptp.Univ
syntax type iType "$i"
end
theory tptp.IntTrunc
syntax function floor "$floor(%1)"
syntax function ceil "$ceil(%1)"
syntax function truncate "$truncate(%1)"
syntax function round "$round(%1)"
syntax function to_int "$to_int(%1)"
syntax predicate is_int "$is_int(%1)"
syntax predicate is_rat "$is_rat(%1)"
end
theory tptp.IntDivT
syntax function div_t "$quotient_t(%1,%2)"
syntax function mod_t "$remainder_t(%1,%2)"
end
theory tptp.IntDivF
syntax function div_f "$quotient_f(%1,%2)"
syntax function mod_f "$remainder_f(%1,%2)"
end
theory tptp.Rat
syntax type rat "$rat"
syntax function zero "0/1"
syntax function one "1/1"
syntax function (+) "$sum(%1,%2)"
syntax function (-) "$difference(%1,%2)"
syntax function (*) "$product(%1,%2)"
syntax function (-_) "$uminus(%1)"
syntax function (/) "$quotient(%1,%2)"
syntax function inv "$quotient(1.0,%1)"
syntax predicate (<=) "$lesseq(%1,%2)"
syntax predicate (<) "$less(%1,%2)"
syntax predicate (>=) "$greatereq(%1,%2)"
syntax predicate (>) "$greater(%1,%2)"
syntax function to_rat "$to_rat(%1)"
syntax predicate is_int "$is_int(%1)"
syntax predicate is_rat "$is_rat(%1)"
remove prop CommutativeGroup.Comm.Comm
remove prop CommutativeGroup.Assoc
remove prop CommutativeGroup.Unit_def_l
remove prop CommutativeGroup.Unit_def_r
remove prop CommutativeGroup.Inv_def_l
remove prop CommutativeGroup.Inv_def_r
remove prop Assoc.Assoc
remove prop Mul_distr_l
remove prop Mul_distr_r
remove prop Comm.Comm
remove prop Unitary
remove prop Refl
remove prop Trans
remove prop Antisymm
remove prop Total
remove prop NonTrivialRing
remove prop CompatOrderAdd
remove prop ZeroLessOne
end
theory tptp.RatTrunc
syntax function floor "$floor(%1)"
syntax function ceil "$ceil(%1)"
syntax function truncate "$truncate(%1)"
syntax function round "$round(%1)"
syntax function to_int "$to_int(%1)"
end
theory tptp.RatDivE
syntax function div "$quotient_e(%1,%2)"
syntax function mod "$remainder_e(%1,%2)"
end
theory tptp.RatDivT
syntax function div_t "$quotient_t(%1,%2)"
syntax function mod_t "$remainder_t(%1,%2)"
end
theory tptp.RatDivF
syntax function div_f "$quotient_f(%1,%2)"
syntax function mod_f "$remainder_f(%1,%2)"
end
theory tptp.Real
syntax function to_real "$to_real(%1)"
end
theory real.Truncate
syntax function floor "$floor(%1)"
syntax function ceil "$ceil(%1)"
syntax function truncate "$truncate(%1)"
end
theory tptp.RealTrunc
syntax function round "$round(%1)"
syntax function to_int "$to_int(%1)"
syntax predicate is_int "$is_int(%1)"
syntax predicate is_rat "$is_rat(%1)"
end
theory tptp.RealDivE
syntax function div "$quotient_e(%1,%2)"
syntax function mod "$remainder_e(%1,%2)"
end
theory tptp.RealDivT
syntax function div_t "$quotient_t(%1,%2)"
syntax function mod_t "$remainder_t(%1,%2)"
end
theory tptp.RealDivF
syntax function div_f "$quotient_f(%1,%2)"
syntax function mod_f "$remainder_f(%1,%2)"
end
theory tptp.IntToRat
syntax function to_rat "$to_rat(%1)"
end
theory tptp.IntToReal
syntax function to_real "$to_real(%1)"
end
theory tptp.RealToRat
syntax function to_rat "$to_rat(%1)"
end
theory tptp.RatToReal
syntax function to_real "$to_real(%1)"
end
(*
Local Variables:
mode: why
compile-command: "unset LANG; make -C .. bench"
End:
*)
...@@ -22,7 +22,6 @@ transformation "simplify_formula" ...@@ -22,7 +22,6 @@ transformation "simplify_formula"
(*transformation "simplify_trivial_quantification"*) (*transformation "simplify_trivial_quantification"*)
transformation "encoding_smt" transformation "encoding_smt"
transformation "encoding_sort"
theory BuiltIn theory BuiltIn
syntax type int "Int" syntax type int "Int"
......
...@@ -45,22 +45,46 @@ let print_pr fmt pr = ...@@ -45,22 +45,46 @@ let print_pr fmt pr =
let forget_var v = forget_id ident_printer v.vs_name let forget_var v = forget_id ident_printer v.vs_name
let forget_tvar v = forget_id ident_printer v.tv_name let forget_tvar v = forget_id ident_printer v.tv_name
type tptp_format = FOF | TFF0 | TFF1
type info = { type info = {
info_syn : syntax_map; info_syn : syntax_map;
info_fof : bool; info_fmt : tptp_format;
info_srt : ty Mty.t ref;
info_urg : string list ref;
} }
let complex_type = Wty.memoize 3 (fun ty ->
let s = Pp.string_of_wnl Pretty.print_ty ty in
create_tysymbol (id_fresh s) [] None)
let rec print_type info fmt ty = match ty.ty_node with let rec print_type info fmt ty = match ty.ty_node with
| Tyvar _ when info.info_fmt = TFF0 ->
unsupported "TFF0 does not support polymorphic types"
| Tyvar tv -> print_tvar fmt tv | Tyvar tv -> print_tvar fmt tv
| Tyapp (ts, tl) -> begin match query_syntax info.info_syn ts.ts_name with | Tyapp (ts, tl) ->
| Some s -> syntax_arguments s (print_type info) fmt tl begin match query_syntax info.info_syn ts.ts_name, tl with
| None -> begin match tl with | Some s, _ -> syntax_arguments s (print_type info) fmt tl
| [] -> print_symbol fmt ts.ts_name | None, [] -> print_symbol fmt ts.ts_name
| _ -> fprintf fmt "@[%a(%a)@]" print_symbol ts.ts_name | None, _ when info.info_fmt = TFF0 ->
(print_list comma (print_type info)) tl begin match Mty.find_opt ty !(info.info_srt) with
| Some ty -> print_type info fmt ty
| None ->
let ts = complex_type ty in let cty = ty_app ts [] in
let us = sprintf "@[<hov 2>tff(%s, type,@ %a:@ $tType).@]@\n@\n"
(id_unique pr_printer ts.ts_name) print_symbol ts.ts_name in
info.info_srt := Mty.add ty cty !(info.info_srt);
info.info_urg := us :: !(info.info_urg);
print_type info fmt cty
end end
| None, tl ->
fprintf fmt "@[%a(%a)@]" print_symbol ts.ts_name
(print_list comma (print_type info)) tl
end end
let print_type info fmt ty = try print_type info fmt ty
with Unsupported s -> raise (UnsupportedType (ty,s))
let number_format = { let number_format = {
Number.long_int_support = true; Number.long_int_support = true;
Number.extra_leading_zeros_support = false; Number.extra_leading_zeros_support = false;
...@@ -73,8 +97,7 @@ let number_format = { ...@@ -73,8 +97,7 @@ let number_format = {
Number.hex_real_support = Number.Number_unsupported; Number.hex_real_support = Number.Number_unsupported;
Number.frac_real_support = Number.Number_custom Number.frac_real_support = Number.Number_custom
(Number.PrintFracReal ("%s", "(%s * %s)", "(%s / %s)")); (Number.PrintFracReal ("%s", "(%s * %s)", "(%s / %s)"));
Number.def_real_support = Number.Number_unsupported Number.def_real_support = Number.Number_unsupported;
;
} }
let rec print_app info fmt ls tl oty = let rec print_app info fmt ls tl oty =
...@@ -131,7 +154,7 @@ and print_fmla info fmt f = match f.t_node with ...@@ -131,7 +154,7 @@ and print_fmla info fmt f = match f.t_node with
let q = match q with Tforall -> "!" | Texists -> "?" in let q = match q with Tforall -> "!" | Texists -> "?" in
let vl, _tl, f = t_open_quant fq in let vl, _tl, f = t_open_quant fq in
let print_vsty fmt vs = let print_vsty fmt vs =
if info.info_fof then fprintf fmt "%a" print_var vs if info.info_fmt = FOF then fprintf fmt "%a" print_var vs
else fprintf fmt "%a:@,%a" print_var vs (print_type info) vs.vs_ty in else fprintf fmt "%a:@,%a" print_var vs (print_type info) vs.vs_ty in
fprintf fmt "%s[%a]:@ %a" q fprintf fmt "%s[%a]:@ %a" q
(print_list comma print_vsty) vl (print_fmla info) f; (print_list comma print_vsty) vl (print_fmla info) f;
...@@ -160,8 +183,9 @@ let print_fmla info fmt f = ...@@ -160,8 +183,9 @@ let print_fmla info fmt f =
Stv.iter forget_tvar tvs Stv.iter forget_tvar tvs
let print_decl info fmt d = match d.d_node with let print_decl info fmt d = match d.d_node with
| Dtype _ when info.info_fof -> () | Dtype _ when info.info_fmt = FOF -> ()
| Dtype { ts_def = Some _ } -> () | Dtype { ts_def = Some _ } -> ()
| Dtype { ts_args = _::_ } when info.info_fmt = TFF0 -> ()
| Dtype ts when query_syntax info.info_syn ts.ts_name <> None -> () | Dtype ts when query_syntax info.info_syn ts.ts_name <> None -> ()
| Dtype ts -> | Dtype ts ->
let print_arg fmt _ = fprintf fmt "$tType" in let print_arg fmt _ = fprintf fmt "$tType" in
...@@ -173,7 +197,7 @@ let print_decl info fmt d = match d.d_node with ...@@ -173,7 +197,7 @@ let print_decl info fmt d = match d.d_node with
fprintf fmt "@[<hov 2>tff(%s, type,@ %a:@ %a).@]@\n@\n" fprintf fmt "@[<hov 2>tff(%s, type,@ %a:@ %a).@]@\n@\n"
(id_unique pr_printer ts.ts_name) (id_unique pr_printer ts.ts_name)
print_symbol ts.ts_name print_sig ts print_symbol ts.ts_name print_sig ts
| Dparam _ when info.info_fof -> () | Dparam _ when info.info_fmt = FOF -> ()
| Dparam ls when query_syntax info.info_syn ls.ls_name <> None -> () | Dparam ls when query_syntax info.info_syn ls.ls_name <> None -> ()
| Dparam ls -> | Dparam ls ->
let print_type = print_type info in let print_type = print_type info in
...@@ -208,30 +232,43 @@ let print_decl info fmt d = match d.d_node with ...@@ -208,30 +232,43 @@ let print_decl info fmt d = match d.d_node with
"TPTP does not support inductive predicates, use eliminate_inductive" "TPTP does not support inductive predicates, use eliminate_inductive"
| Dprop (Paxiom, pr, _) when Mid.mem pr.pr_name info.info_syn -> () | Dprop (Paxiom, pr, _) when Mid.mem pr.pr_name info.info_syn -> ()
| Dprop (Paxiom, pr, f) -> | Dprop (Paxiom, pr, f) ->
let head = if info.info_fof then "fof" else "tff" in let head = if info.info_fmt = FOF then "fof" else "tff" in
fprintf fmt "@[<hov 2>%s(%a, axiom,@ %a).@]@\n@\n" fprintf fmt "@[<hov 2>%s(%a, axiom,@ %a).@]@\n@\n"
head print_pr pr (print_fmla info) f head print_pr pr (print_fmla info) f
| Dprop (Pgoal, pr, f) -> | Dprop (Pgoal, pr, f) ->
let head = if info.info_fof then "fof" else "tff" in let head = if info.info_fmt = FOF then "fof" else "tff" in
fprintf fmt "@[<hov 2>%s(%a, conjecture,@ %a).@]@\n" fprintf fmt "@[<hov 2>%s(%a, conjecture,@ %a).@]@\n"
head print_pr pr (print_fmla info) f head print_pr pr (print_fmla info) f
| Dprop ((Plemma|Pskip), _, _) -> assert false | Dprop ((Plemma|Pskip), _, _) -> assert false
let print_decl info fmt = catch_unsupportedDecl (print_decl info fmt) let print_decls fm =
let print_decl (sm,fm,ct) fmt d =
let print_task fof _env pr thpr _blacklist ?old:_ fmt task = let info = { info_syn = sm; info_fmt = fm;
forget_all ident_printer; info_srt = ref ct; info_urg = ref [] } in
forget_all pr_printer; try print_decl info fmt d;
print_prelude fmt pr; (sm,fm,!(info.info_srt)), !(info.info_urg)
print_th_prelude task fmt thpr; with Unsupported s -> raise (UnsupportedDecl (d,s)) in
let info = { info_syn = get_syntax_map task; info_fof = fof } in let print_decl = Printer.sprint_decl print_decl in
fprintf fmt "@[%a@]@." let print_decl task acc = print_decl task.Task.task_decl acc in
(print_list nothing (print_decl info)) (Task.task_decls task) Discriminate.on_syntax_map (fun sm ->
Trans.fold print_decl ((sm,fm,Mty.empty),[]))
let () = register_printer "tptp-tff" (print_task false) ~desc:"TPTP TFF format"
let () = register_printer "tptp-fof" (print_task true) ~desc:"TPTP FOF format" let print_task fm =
let print_decls = print_decls fm in
fun _env pr thpr _blacklist ?old:_ fmt task ->
(* In trans-based p-printing [forget_all] is a no-no *)
(* forget_all ident_printer; *)
print_prelude fmt pr;
print_th_prelude task fmt thpr;
let rec print = function
| x :: r -> print r; Pp.string fmt x
| [] -> () in
print (snd (Trans.apply print_decls task));
pp_print_flush fmt ()
let () = register_printer "tptp-tff0" (print_task TFF0) ~desc:"TPTP TFF0 format"
let () = register_printer "tptp-tff1" (print_task TFF1) ~desc:"TPTP TFF1 format"
let () = register_printer "tptp-fof" (print_task FOF) ~desc:"TPTP FOF format"
(** DFG input format for SPASS >= 3.8 (** DFG input format for SPASS >= 3.8
(with the help of Daniel Wand) (with the help of Daniel Wand)
...@@ -364,7 +401,11 @@ let print_dfg _env pr thpr _blacklist ?old:_ fmt task = ...@@ -364,7 +401,11 @@ let print_dfg _env pr thpr _blacklist ?old:_ fmt task =
fprintf fmt fprintf fmt
"name({**}). author({**}). status(unknown). description({**}).@\n"; "name({**}). author({**}). status(unknown). description({**}).@\n";
fprintf fmt "end_of_list.@\n@\n"; fprintf fmt "end_of_list.@\n@\n";
let info = { info_syn = get_syntax_map task; info_fof = true } in let info = {
info_syn = get_syntax_map task;
info_fmt = FOF;
info_urg = ref [];
info_srt = ref Mty.empty } in
let dl = Task.task_decls task in let dl = Task.task_decls task in
let tl = List.filter (is_type info) dl in let tl = List.filter (is_type info) dl in
let fl = List.filter (is_function info) dl in let fl = List.filter (is_function info) dl in
......
...@@ -649,7 +649,7 @@ let typecheck lib path ast = ...@@ -649,7 +649,7 @@ let typecheck lib path ast =
let f,_ = fmla denv env impl (Some pol) [] e in let f,_ = fmla denv env impl (Some pol) [] e in
let f = if strict then f else let f = if strict then f else
let q = if pol then Texists else Tforall in let q = if pol then Texists else Tforall in
let vl = Mvs.keys f.t_vars in let vl = Mvs.keys (t_vars f) in
t_quant_close q vl [] f in t_quant_close q vl [] f in
let env,uc = flush_impl ~strict env uc impl in let env,uc = flush_impl ~strict env uc impl in
......
...@@ -30,7 +30,7 @@ type logic_decl = lsymbol * ls_defn ...@@ -30,7 +30,7 @@ type logic_decl = lsymbol * ls_defn
exception UnboundVar of vsymbol exception UnboundVar of vsymbol
let check_fvs f = let check_fvs f =
Mvs.iter (fun vs _ -> raise (UnboundVar vs)) f.t_vars; t_v_fold (fun _ vs -> raise (UnboundVar vs)) () f;
t_prop f t_prop f