@@ -1491,37 +1491,46 @@ let rec conv ri env f1 f2 stk =
14911491 | FhoareS hs1, FhoareS hs2
14921492 when EqTest_i. for_stmt env hs1.hs_s hs2.hs_s ->
14931493 begin match check_me_binding env Fsubst. f_subst_id hs1.hs_m hs2.hs_m with
1494- | subst ->
1495- let subst = Fsubst. f_subst subst in
1496- conv ri env hs1.hs_pr (subst hs2.hs_pr) (zhl f1 [hs1.hs_po] [subst hs2.hs_po] stk)
1494+ | _subst ->
1495+ let pr2 = (ss_inv_rebind (hs_pr hs2) (fst hs1.hs_m)).inv in
1496+ let po2 = (ss_inv_rebind (hs_po hs2) (fst hs1.hs_m)).inv in
1497+ conv ri env hs1.hs_pr pr2 (zhl f1 [hs1.hs_po] [po2] stk)
14971498 | exception NotConv -> force_head ri env f1 f2 stk
14981499 end
14991500
15001501 | FeHoareF hf1 , FeHoareF hf2 when EqTest_i. for_xp env hf1.ehf_f hf2.ehf_f ->
1501- conv ri env hf1.ehf_pr hf2.ehf_pr (zhl f1 [hf1.ehf_po] [hf2.ehf_po] stk)
1502+ let pr2 = (ss_inv_rebind (ehf_pr hf2) hf1.ehf_m).inv in
1503+ let po2 = (ss_inv_rebind (ehf_po hf2) hf1.ehf_m).inv in
1504+ conv ri env hf1.ehf_pr pr2 (zhl f1 [hf1.ehf_po] [po2] stk)
15021505
15031506 | FeHoareS hs1, FeHoareS hs2
15041507 when EqTest_i. for_stmt env hs1.ehs_s hs2.ehs_s ->
15051508 begin match check_me_binding env Fsubst. f_subst_id hs1.ehs_m hs2.ehs_m with
1506- | subst ->
1507- let subst = Fsubst. f_subst subst in
1508- conv ri env hs1.ehs_pr (subst hs2.ehs_pr) (zhl f1 [hs1.ehs_po] [subst hs2.ehs_po] stk)
1509+ | _subst ->
1510+ let pr2 = (ss_inv_rebind (ehs_pr hs2) (fst hs1.ehs_m)).inv in
1511+ let po2 = (ss_inv_rebind (ehs_po hs2) (fst hs1.ehs_m)).inv in
1512+ conv ri env hs1.ehs_pr pr2 (zhl f1 [hs1.ehs_po] [po2] stk)
15091513 | exception NotConv -> force_head ri env f1 f2 stk
15101514 end
15111515
15121516 | FbdHoareF hf1, FbdHoareF hf2
15131517 when EqTest_i. for_xp env hf1.bhf_f hf2.bhf_f && hf1.bhf_cmp = hf2.bhf_cmp ->
1514- conv ri env hf1.bhf_pr hf2.bhf_pr
1515- (zhl f1 [hf1.bhf_po;hf1.bhf_bd] [hf2.bhf_po; hf2.bhf_bd] stk)
1518+ let pr2 = (ss_inv_rebind (bhf_pr hf2) hf1.bhf_m).inv in
1519+ let po2 = (ss_inv_rebind (bhf_po hf2) hf1.bhf_m).inv in
1520+ let bd2 = (ss_inv_rebind (bhf_bd hf2) hf1.bhf_m).inv in
1521+ conv ri env hf1.bhf_pr pr2
1522+ (zhl f1 [hf1.bhf_po;hf1.bhf_bd] [po2; bd2] stk)
15161523
15171524 | FbdHoareS hs1, FbdHoareS hs2
15181525 when EqTest_i. for_stmt env hs1.bhs_s hs2.bhs_s
15191526 && hs1.bhs_cmp = hs2.bhs_cmp ->
15201527 begin match check_me_binding env Fsubst. f_subst_id hs1.bhs_m hs2.bhs_m with
1521- | subst ->
1522- let subst = Fsubst. f_subst subst in
1523- conv ri env hs1.bhs_pr (subst hs2.bhs_pr)
1524- (zhl f1 [hs1.bhs_po;hs1.bhs_bd] (List. map subst [hs2.bhs_po; hs2.bhs_bd]) stk)
1528+ | _subst ->
1529+ let pr2 = (ss_inv_rebind (bhs_pr hs2) (fst hs1.bhs_m)).inv in
1530+ let po2 = (ss_inv_rebind (bhs_po hs2) (fst hs1.bhs_m)).inv in
1531+ let bd2 = (ss_inv_rebind (bhs_bd hs2) (fst hs1.bhs_m)).inv in
1532+ conv ri env hs1.bhs_pr pr2
1533+ (zhl f1 [hs1.bhs_po;hs1.bhs_bd] [po2; bd2] stk)
15251534 | exception NotConv -> force_head ri env f1 f2 stk
15261535 end
15271536
@@ -1536,9 +1545,10 @@ let rec conv ri env f1 f2 stk =
15361545 when EqTest_i. for_stmt env es1.es_sl es2.es_sl
15371546 && EqTest_i. for_stmt env es1.es_sr es2.es_sr ->
15381547 begin match check_me_bindings env Fsubst. f_subst_id [es1.es_ml; es1.es_mr] [es2.es_ml; es2.es_mr] with
1539- | subst ->
1540- let subst = Fsubst. f_subst subst in
1541- conv ri env es1.es_pr (subst es2.es_pr) (zhl f1 [es1.es_po] [subst es2.es_po] stk)
1548+ | _subst ->
1549+ let pr2 = (ts_inv_rebind (es_pr es2) (fst es1.es_ml) (fst es1.es_mr)).inv in
1550+ let po2 = (ts_inv_rebind (es_po es2) (fst es1.es_ml) (fst es1.es_mr)).inv in
1551+ conv ri env es1.es_pr pr2 (zhl f1 [es1.es_po] [po2] stk)
15421552 | exception NotConv -> force_head ri env f1 f2 stk
15431553 end
15441554
0 commit comments