@@ -719,10 +719,10 @@ let t_equivS_conseq_conj pre1 post1 pre2 post2 pre' post' tc =
719719 let (_, hyps, _) = FApi. tc1_eflat tc in
720720 let es = tc1_as_equivS tc in
721721 let (ml, mtl), (mr, mtr) = es.es_ml, es.es_mr in
722- let pre1' = ss_inv_generalize_right (ss_inv_rebind pre1 ml) mr in
723- let post1' = ss_inv_generalize_right (ss_inv_rebind post1 ml) mr in
724- let pre2' = ss_inv_generalize_left (ss_inv_rebind pre2 mr) ml in
725- let post2' = ss_inv_generalize_left (ss_inv_rebind post2 mr) ml in
722+ let pre1' = ss_inv_generalize_as_left pre1 ml mr in
723+ let post1' = ss_inv_generalize_as_left post1 ml mr in
724+ let pre2' = ss_inv_generalize_as_right pre2 ml mr in
725+ let post2' = ss_inv_generalize_as_right post2 ml mr in
726726 if not (ts_inv_alpha_eq hyps (es_pr es) (map_ts_inv f_ands [pre';pre1';pre2'])) then
727727 tc_error !! tc " invalid pre-condition" ;
728728 if not (ts_inv_alpha_eq hyps (es_po es) (map_ts_inv f_ands [post';post1';post2'])) then
@@ -737,15 +737,17 @@ let t_equivF_conseq_conj pre1 post1 pre2 post2 pre' post' tc =
737737 let (_, hyps, _) = FApi. tc1_eflat tc in
738738 let ef = tc1_as_equivF tc in
739739 let ml, mr = ef.ef_ml, ef.ef_mr in
740- let pre1' = ss_inv_generalize_right (ss_inv_rebind pre1 ml) mr in
741- let post1' = ss_inv_generalize_right (ss_inv_rebind post1 ml) mr in
742- let pre2' = ss_inv_generalize_left (ss_inv_rebind pre2 mr) ml in
743- let post2' = ss_inv_generalize_left (ss_inv_rebind post2 mr) ml in
744- let pre'' = map_ts_inv f_ands [pre'; pre1'; pre2'] in
745- let post'' = map_ts_inv f_ands [post'; post1'; post2'] in
746- if not (ts_inv_alpha_eq hyps (ef_pr ef) pre'')
740+ let pre1' = ss_inv_generalize_as_left pre1 ml mr in
741+ let post1' = ss_inv_generalize_as_left post1 ml mr in
742+ let pre2' = ss_inv_generalize_as_right pre2 ml mr in
743+ let post2' = ss_inv_generalize_as_right post2 ml mr in
744+ let pre'' = ts_inv_rebind pre' ml mr in
745+ let pre_and = map_ts_inv f_ands [pre''; pre1'; pre2'] in
746+ let post'' = ts_inv_rebind post' ml mr in
747+ let post_and = map_ts_inv f_ands [post''; post1'; post2'] in
748+ if not (ts_inv_alpha_eq hyps (ef_pr ef) pre_and)
747749 then tc_error !! tc " invalid pre-condition" ;
748- if not (ts_inv_alpha_eq hyps (ef_po ef) post'' )
750+ if not (ts_inv_alpha_eq hyps (ef_po ef) post_and )
749751 then tc_error !! tc " invalid post-condition" ;
750752 let concl1 = f_hoareF pre1 ef.ef_fl post1 in
751753 let concl2 = f_hoareF pre2 ef.ef_fr post2 in
@@ -760,12 +762,12 @@ let t_equivS_conseq_bd side pr po tc =
760762 let m,s,s',prs,pos =
761763 match side with
762764 | `Left ->
763- let pos = ss_inv_generalize_right (ss_inv_rebind po ml) mr in
764- let prs = ss_inv_generalize_right (ss_inv_rebind pr ml) mr in
765+ let pos = ss_inv_generalize_as_left po ml mr in
766+ let prs = ss_inv_generalize_as_left pr ml mr in
765767 es.es_ml, es.es_sl, es.es_sr, prs, pos
766768 | `Right ->
767- let pos = ss_inv_generalize_left (ss_inv_rebind po mr) ml in
768- let prs = ss_inv_generalize_left (ss_inv_rebind pr mr) ml in
769+ let pos = ss_inv_generalize_as_right po ml mr in
770+ let prs = ss_inv_generalize_as_right pr ml mr in
769771 es.es_mr, es.es_sr, es.es_sl, prs, pos
770772 in
771773 if not (List. is_empty s'.s_node) then begin
@@ -1180,10 +1182,10 @@ let rec t_hi_conseq notmod f1 f2 f3 tc =
11801182 let hs2 = pf_as_hoareS !! tc f2 in
11811183 let hs3 = pf_as_hoareS !! tc f3 in
11821184 let (ml, mr) = (fst es.es_ml, fst es.es_mr) in
1183- let hs2_pr = ss_inv_generalize_right (ss_inv_rebind ( hs_pr hs2) ml) mr in
1184- let hs2_po = ss_inv_generalize_right (ss_inv_rebind ( hs_po hs2) ml) mr in
1185- let hs3_pr = ss_inv_generalize_left (ss_inv_rebind ( hs_pr hs3) mr) ml in
1186- let hs3_po = ss_inv_generalize_left (ss_inv_rebind ( hs_po hs3) mr) ml in
1185+ let hs2_pr = ss_inv_generalize_as_left ( hs_pr hs2) ml mr in
1186+ let hs2_po = ss_inv_generalize_as_left ( hs_po hs2) ml mr in
1187+ let hs3_pr = ss_inv_generalize_as_right ( hs_pr hs3) ml mr in
1188+ let hs3_po = ss_inv_generalize_as_right ( hs_po hs3) ml mr in
11871189 let pre = map_ts_inv f_ands [es_pr es; hs2_pr; hs3_pr] in
11881190 let post = map_ts_inv f_ands [es_po es; hs2_po; hs3_po] in
11891191 let tac = if notmod then t_equivS_conseq_nm else t_equivS_conseq in
@@ -1238,8 +1240,8 @@ let rec t_hi_conseq notmod f1 f2 f3 tc =
12381240 | FequivS es , None , Some ((_ , f2 ) as nf2 ), None ->
12391241 let hs = pf_as_bdhoareS !! tc f2 in
12401242 let (ml, mr) = (fst es.es_ml, fst es.es_mr) in
1241- let pre = ss_inv_generalize_right (ss_inv_rebind ( bhs_pr hs) ml) mr in
1242- let post = ss_inv_generalize_right (ss_inv_rebind ( bhs_po hs) ml) mr in
1243+ let pre = ss_inv_generalize_as_left ( bhs_pr hs) ml mr in
1244+ let post = ss_inv_generalize_as_left ( bhs_po hs) ml mr in
12431245 let tac = if notmod then t_equivS_conseq_nm else t_equivS_conseq in
12441246
12451247 check_is_detbound `Second (bhs_bd hs).inv;
@@ -1256,8 +1258,8 @@ let rec t_hi_conseq notmod f1 f2 f3 tc =
12561258 | FequivS es , None , None , Some ((_ , f3 ) as nf3 ) ->
12571259 let hs = pf_as_bdhoareS !! tc f3 in
12581260 let (ml, mr) = (fst es.es_ml, fst es.es_mr) in
1259- let pre = ss_inv_generalize_left (ss_inv_rebind ( bhs_pr hs) mr) ml in
1260- let post = ss_inv_generalize_left (ss_inv_rebind ( bhs_po hs) mr) ml in
1261+ let pre = ss_inv_generalize_as_right ( bhs_pr hs) ml mr in
1262+ let post = ss_inv_generalize_as_right ( bhs_po hs) ml mr in
12611263 let tac = if notmod then t_equivS_conseq_nm else t_equivS_conseq in
12621264
12631265 check_is_detbound `Third (bhs_bd hs).inv;
@@ -1285,11 +1287,11 @@ let rec t_hi_conseq notmod f1 f2 f3 tc =
12851287 let hs2 = pf_as_hoareF !! tc f2 in
12861288 let hs3 = pf_as_hoareF !! tc f3 in
12871289 let (ml, mr) = (ef.ef_ml, ef.ef_mr) in
1288- let hs2_pr = ss_inv_generalize_right (ss_inv_rebind ( hf_pr hs2) ml) mr in
1289- let hs3_pr = ss_inv_generalize_left (ss_inv_rebind ( hf_pr hs3) mr) ml in
1290+ let hs2_pr = ss_inv_generalize_as_left ( hf_pr hs2) ml mr in
1291+ let hs3_pr = ss_inv_generalize_as_right ( hf_pr hs3) ml mr in
12901292 let pre = map_ts_inv f_ands [ef_pr ef; hs2_pr; hs3_pr] in
1291- let hs2_po = ss_inv_generalize_right (ss_inv_rebind ( hf_po hs2) ml) mr in
1292- let hs3_po = ss_inv_generalize_left (ss_inv_rebind ( hf_po hs3) mr) ml in
1293+ let hs2_po = ss_inv_generalize_as_left ( hf_po hs2) ml mr in
1294+ let hs3_po = ss_inv_generalize_as_right ( hf_po hs3) ml mr in
12931295 let post = map_ts_inv f_ands [ef_po ef; hs2_po; hs3_po] in
12941296 let tac = if notmod then t_equivF_conseq_nm else t_equivF_conseq in
12951297 t_on1seq 2
0 commit comments