@@ -7,6 +7,7 @@ open EcEnv
77open EcFol
88open EcReduction
99open EcBaseLogic
10+ open EcMemory
1011module BI = EcBigInt
1112
1213(* -------------------------------------------------------------------- *)
@@ -297,7 +298,7 @@ and try_reduce_fixdef
297298 subst bds cargs)
298299 subst bds pargs in
299300
300- let body = EcFol. form_of_expr EcFol. mhr body in
301+ let body = EcFol. form_of_expr body in
301302 let body =
302303 Tvar. f_subst ~freshen: true (List. map fst op.EcDecl. op_tparams) tys body in
303304
@@ -457,7 +458,7 @@ and cbv (st : state) (s : subst) (f : form) (args : args) : form =
457458 if st.st_ri.modpath
458459 then EcEnv.NormMp. norm_pvar st.st_env pv
459460 else pv in
460- app_red st (f_pvar pv f.f_ty m) args
461+ app_red st (f_pvar pv f.f_ty m).inv args
461462
462463 | Fop _ -> app_red st (Subst. subst s f) args
463464
@@ -479,11 +480,12 @@ and cbv (st : state) (s : subst) (f : form) (args : args) : form =
479480
480481 | FhoareF hf ->
481482 assert (Args. isempty args);
482- assert (not (Subst. has_mem s mhr ));
483- let hf_pr = norm st s hf.hf_pr in
484- let hf_po = norm st s hf.hf_po in
483+ assert (not (Subst. has_mem s hf.hf_m ));
484+ let hf_pr = norm st s hf.hf_pr [ @ alert " -priv_pl " ] in
485+ let hf_po = norm st s hf.hf_po [ @ alert " -priv_pl " ] in
485486 let hf_f = norm_xfun st s hf.hf_f in
486- f_hoareF_r { hf_pr; hf_f; hf_po }
487+ let (m,_) = norm_me s (abstract hf.hf_m) in
488+ f_hoareF {m;inv= hf_pr} hf_f {m;inv= hf_po}
487489
488490 | FhoareS hs ->
489491 assert (Args. isempty args);
@@ -492,33 +494,36 @@ and cbv (st : state) (s : subst) (f : form) (args : args) : form =
492494 let hs_po = norm st s hs.hs_po in
493495 let hs_s = norm_stmt s hs.hs_s in
494496 let hs_m = norm_me s hs.hs_m in
495- f_hoareS_r { hs_pr; hs_po; hs_s; hs_m }
497+ let m = fst hs_m in
498+ f_hoareS (snd hs_m) {m;inv= hs_pr} hs_s {m;inv= hs_po}
496499
497500 | FeHoareF hf ->
498501 assert (Args. isempty args);
499502 assert (not (Subst. has_mem s mhr));
500503 let ehf_pr = norm st s hf.ehf_pr in
501504 let ehf_po = norm st s hf.ehf_po in
502505 let ehf_f = norm_xfun st s hf.ehf_f in
503- f_eHoareF_r { ehf_pr; ehf_f; ehf_po; }
506+ let (m,_) = norm_me s (abstract hf.ehf_m) in
507+ f_eHoareF {m;inv= ehf_pr} ehf_f {m;inv= ehf_po}
504508
505509 | FeHoareS hs ->
506510 assert (Args. isempty args);
507511 assert (not (Subst. has_mem s (fst hs.ehs_m)));
508512 let ehs_pr = norm st s hs.ehs_pr in
509513 let ehs_po = norm st s hs.ehs_po in
510514 let ehs_s = norm_stmt s hs.ehs_s in
511- let ehs_m = norm_me s hs.ehs_m in
512- f_eHoareS_r { ehs_pr; ehs_po; ehs_s; ehs_m }
515+ let (m,mt) = norm_me s hs.ehs_m in
516+ f_eHoareS mt {m;inv = ehs_pr} ehs_s {m;inv = ehs_po }
513517
514518 | FbdHoareF hf ->
515519 assert (Args. isempty args);
516- assert (not (Subst. has_mem s mhr ));
520+ assert (not (Subst. has_mem s hf.bhf_m ));
517521 let bhf_pr = norm st s hf.bhf_pr in
518522 let bhf_po = norm st s hf.bhf_po in
519523 let bhf_f = norm_xfun st s hf.bhf_f in
520524 let bhf_bd = norm st s hf.bhf_bd in
521- f_bdHoareF_r { hf with bhf_pr; bhf_po; bhf_f; bhf_bd }
525+ let (m,_) = norm_me s (abstract hf.bhf_m) in
526+ f_bdHoareF {m;inv= bhf_pr} bhf_f {m;inv= bhf_po} hf.bhf_cmp {m;inv= bhf_bd}
522527
523528 | FbdHoareS bhs ->
524529 assert (Args. isempty args);
@@ -527,18 +532,20 @@ and cbv (st : state) (s : subst) (f : form) (args : args) : form =
527532 let bhs_po = norm st s bhs.bhs_po in
528533 let bhs_s = norm_stmt s bhs.bhs_s in
529534 let bhs_bd = norm st s bhs.bhs_bd in
530- let bhs_m = norm_me s bhs.bhs_m in
531- f_bdHoareS_r { bhs with bhs_m; bhs_pr; bhs_po; bhs_s; bhs_bd }
535+ let (m,mt) = norm_me s bhs.bhs_m in
536+ f_bdHoareS mt {m;inv = bhs_pr} bhs_s {m;inv = bhs_po} bhs.bhs_cmp {m;inv = bhs_bd }
532537
533538 | FequivF ef ->
534539 assert (Args. isempty args);
535- assert (not (Subst. has_mem s mleft ));
536- assert (not (Subst. has_mem s mright ));
540+ assert (not (Subst. has_mem s ef.ef_ml ));
541+ assert (not (Subst. has_mem s ef.ef_mr ));
537542 let ef_pr = norm st s ef.ef_pr in
538543 let ef_po = norm st s ef.ef_po in
539544 let ef_fl = norm_xfun st s ef.ef_fl in
540545 let ef_fr = norm_xfun st s ef.ef_fr in
541- f_equivF_r {ef_pr; ef_fl; ef_fr; ef_po }
546+ let (ml,_) = norm_me s (abstract ef.ef_ml) in
547+ let (mr,_) = norm_me s (abstract ef.ef_mr) in
548+ f_equivF {ml;mr;inv= ef_pr} ef_fl ef_fr {ml;mr;inv= ef_po}
542549
543550 | FequivS es ->
544551 assert (Args. isempty args);
@@ -548,9 +555,9 @@ and cbv (st : state) (s : subst) (f : form) (args : args) : form =
548555 let es_po = norm st s es.es_po in
549556 let es_sl = norm_stmt s es.es_sl in
550557 let es_sr = norm_stmt s es.es_sr in
551- let es_ml = norm_me s es.es_ml in
552- let es_mr = norm_me s es.es_mr in
553- f_equivS_r {es_ml; es_mr; es_pr; es_sl; es_sr; es_po }
558+ let (ml,mlt) = norm_me s es.es_ml in
559+ let (mr,mrt) = norm_me s es.es_mr in
560+ f_equivS mlt mrt {ml;mr;inv = es_pr} es_sl es_sr {ml;mr;inv = es_po}
554561
555562 | FeagerF eg ->
556563 assert (Args. isempty args);
@@ -562,16 +569,19 @@ and cbv (st : state) (s : subst) (f : form) (args : args) : form =
562569 let eg_fr = norm_xfun st s eg.eg_fr in
563570 let eg_sl = norm_stmt s eg.eg_sl in
564571 let eg_sr = norm_stmt s eg.eg_sr in
565- f_eagerF_r {eg_pr; eg_sl; eg_fl; eg_fr; eg_sr; eg_po }
572+ let (ml,_) = norm_me s (abstract eg.eg_ml) in
573+ let (mr,_) = norm_me s (abstract eg.eg_mr) in
574+ f_eagerF {ml;mr;inv= eg_pr} eg_sl eg_fl eg_fr eg_sr {ml;mr;inv= eg_po}
566575
567576 | Fpr pr ->
568577 assert (Args. isempty args);
569578 assert (not (Subst. has_mem s mhr));
570579 let pr_mem = Subst. subst_m s pr.pr_mem in
571580 let pr_fun = norm_xfun st s pr.pr_fun in
572581 let pr_args = norm st s pr.pr_args in
573- let pr_event = norm st s pr.pr_event in
574- f_pr_r { pr_mem; pr_fun; pr_args; pr_event; }
582+ let pr_event = norm st s pr.pr_event.inv in
583+ let (m,_) = norm_me s (abstract pr.pr_event.m) in
584+ f_pr pr_mem pr_fun pr_args {m;inv= pr_event}
575585
576586(* -------------------------------------------------------------------- *)
577587(* FIXME : initialize the subst with let in hyps *)
0 commit comments