From fc1d0588f38bbe5793d90e4571dd55a5f6e591f8 Mon Sep 17 00:00:00 2001 From: Andrei Paskevich <andrei@lri.fr> Date: Fri, 21 Sep 2018 11:24:20 +0200 Subject: [PATCH] Vc: avoid generating trivial VCs --- src/mlw/vc.ml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/mlw/vc.ml b/src/mlw/vc.ml index 1391e53ca..9d8bb0cef 100644 --- a/src/mlw/vc.ml +++ b/src/mlw/vc.ml @@ -1503,15 +1503,19 @@ let mk_vc_decl kn id f = Eval_match.eval_match kn f in create_pure_decl (create_prop_decl Pgoal pr f) +let add_vc_decl kn id f vcl = + if can_simp f then vcl else mk_vc_decl kn id f :: vcl + let vc env kn tuc d = match d.pd_node with | PDlet (LDsym (s, {c_node = Cfun e; c_cty = cty})) -> let env = mk_env env kn tuc in let f = vc_fun env (Debug.test_noflag debug_sp) cty e in - [mk_vc_decl kn s.rs_name f] + add_vc_decl kn s.rs_name f [] | PDlet (LDrec rdl) -> let env = mk_env env kn tuc in let fl = vc_rec env (Debug.test_noflag debug_sp) rdl in - List.map2 (fun rd f -> mk_vc_decl kn rd.rec_sym.rs_name f) rdl fl + let add rd f vcl = add_vc_decl kn rd.rec_sym.rs_name f vcl in + List.fold_right2 add rdl fl [] | PDtype tdl -> let add_witness d vcl = let add_fd (mv,ldl) fd e = @@ -1529,14 +1533,14 @@ let vc env kn tuc d = match d.pd_node with let c = c_fun [] [] [] Mxs.empty Mpv.empty e in let f = vc_fun (mk_env env kn tuc) (Debug.test_noflag debug_sp) c.c_cty e in - mk_vc_decl kn d.itd_its.its_ts.ts_name f :: vcl in + add_vc_decl kn d.itd_its.its_ts.ts_name f vcl in let add_invariant d vcl = let vs_of_rs fd = (fd_of_rs fd).pv_vs in let vl = List.map vs_of_rs d.itd_fields in let expl f = vc_expl None Sattr.empty expl_type_inv f in let f = t_and_asym_l (List.map expl d.itd_invariant) in let f = t_exists_close_simp vl [] f in - mk_vc_decl kn d.itd_its.its_ts.ts_name f :: vcl in + add_vc_decl kn d.itd_its.its_ts.ts_name f vcl in let add_itd d vcl = if d.itd_witness <> [] then add_witness d vcl else if d.itd_invariant <> [] then add_invariant d vcl else -- GitLab