Skip to content

Commit a1f39bc

Browse files
committed
make casts from existing single sided formulas to two sided ones use a more robust pattern
1 parent 9324a2f commit a1f39bc

File tree

3 files changed

+40
-28
lines changed

3 files changed

+40
-28
lines changed

src/phl/ecPhlApp.ml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,12 @@ let t_equiv_app_onesided side i pre post tc =
125125
let s, s', p', q' =
126126
match side with
127127
| `Left ->
128-
let p' = ss_inv_generalize_right (EcSubst.ss_inv_rebind pre ml) mr in
129-
let q' = ss_inv_generalize_right (EcSubst.ss_inv_rebind post ml) mr in
128+
let p' = ss_inv_generalize_as_left pre ml mr in
129+
let q' = ss_inv_generalize_as_left post ml mr in
130130
es.es_sl, es.es_sr, p', q'
131131
| `Right ->
132-
let p' = ss_inv_generalize_left (EcSubst.ss_inv_rebind pre mr) ml in
133-
let q' = ss_inv_generalize_left (EcSubst.ss_inv_rebind post mr) ml in
132+
let p' = ss_inv_generalize_as_right pre ml mr in
133+
let q' = ss_inv_generalize_as_right post ml mr in
134134
es.es_sr, es.es_sl, p', q'
135135
in
136136
let generalize_mod_side= sideif side generalize_mod_left generalize_mod_right in

src/phl/ecPhlConseq.ml

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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,10 +737,10 @@ 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
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 mr ml in
743+
let post2' = ss_inv_generalize_as_right post2 mr ml in
744744
let pre'' = map_ts_inv f_ands [pre'; pre1'; pre2'] in
745745
let post'' = map_ts_inv f_ands [post'; post1'; post2'] in
746746
if not (ts_inv_alpha_eq hyps (ef_pr ef) pre'')
@@ -760,12 +760,12 @@ let t_equivS_conseq_bd side pr po tc =
760760
let m,s,s',prs,pos =
761761
match side with
762762
| `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
763+
let pos = ss_inv_generalize_as_left po ml mr in
764+
let prs = ss_inv_generalize_as_left pr ml mr in
765765
es.es_ml, es.es_sl, es.es_sr, prs, pos
766766
| `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
767+
let pos = ss_inv_generalize_as_right po ml mr in
768+
let prs = ss_inv_generalize_as_right pr ml mr in
769769
es.es_mr, es.es_sr, es.es_sl, prs, pos
770770
in
771771
if not (List.is_empty s'.s_node) then begin
@@ -1171,10 +1171,10 @@ let rec t_hi_conseq notmod f1 f2 f3 tc =
11711171
let hs2 = pf_as_hoareS !!tc f2 in
11721172
let hs3 = pf_as_hoareS !!tc f3 in
11731173
let (ml, mr) = (fst es.es_ml, fst es.es_mr) in
1174-
let hs2_pr = ss_inv_generalize_right (ss_inv_rebind (hs_pr hs2) ml) mr in
1175-
let hs2_po = ss_inv_generalize_right (ss_inv_rebind (hs_po hs2) ml) mr in
1176-
let hs3_pr = ss_inv_generalize_left (ss_inv_rebind (hs_pr hs3) mr) ml in
1177-
let hs3_po = ss_inv_generalize_left (ss_inv_rebind (hs_po hs3) mr) ml in
1174+
let hs2_pr = ss_inv_generalize_as_left (hs_pr hs2) ml mr in
1175+
let hs2_po = ss_inv_generalize_as_left (hs_po hs2) ml mr in
1176+
let hs3_pr = ss_inv_generalize_as_right (hs_pr hs3) ml mr in
1177+
let hs3_po = ss_inv_generalize_as_right (hs_po hs3) ml mr in
11781178
let pre = map_ts_inv f_ands [es_pr es; hs2_pr; hs3_pr] in
11791179
let post = map_ts_inv f_ands [es_po es; hs2_po; hs3_po] in
11801180
let tac = if notmod then t_equivS_conseq_nm else t_equivS_conseq in
@@ -1229,8 +1229,8 @@ let rec t_hi_conseq notmod f1 f2 f3 tc =
12291229
| FequivS es, None, Some ((_, f2) as nf2), None ->
12301230
let hs = pf_as_bdhoareS !!tc f2 in
12311231
let (ml, mr) = (fst es.es_ml, fst es.es_mr) in
1232-
let pre = ss_inv_generalize_right (ss_inv_rebind (bhs_pr hs) ml) mr in
1233-
let post = ss_inv_generalize_right (ss_inv_rebind (bhs_po hs) ml) mr in
1232+
let pre = ss_inv_generalize_as_left (bhs_pr hs) ml mr in
1233+
let post = ss_inv_generalize_as_left (bhs_po hs) ml mr in
12341234
let tac = if notmod then t_equivS_conseq_nm else t_equivS_conseq in
12351235

12361236
check_is_detbound `Second (bhs_bd hs).inv;
@@ -1247,8 +1247,8 @@ let rec t_hi_conseq notmod f1 f2 f3 tc =
12471247
| FequivS es, None, None, Some ((_, f3) as nf3) ->
12481248
let hs = pf_as_bdhoareS !!tc f3 in
12491249
let (ml, mr) = (fst es.es_ml, fst es.es_mr) in
1250-
let pre = ss_inv_generalize_left (ss_inv_rebind (bhs_pr hs) mr) ml in
1251-
let post = ss_inv_generalize_left (ss_inv_rebind (bhs_po hs) mr) ml in
1250+
let pre = ss_inv_generalize_as_right (bhs_pr hs) ml mr in
1251+
let post = ss_inv_generalize_as_right (bhs_po hs) ml mr in
12521252
let tac = if notmod then t_equivS_conseq_nm else t_equivS_conseq in
12531253

12541254
check_is_detbound `Third (bhs_bd hs).inv;
@@ -1276,11 +1276,11 @@ let rec t_hi_conseq notmod f1 f2 f3 tc =
12761276
let hs2 = pf_as_hoareF !!tc f2 in
12771277
let hs3 = pf_as_hoareF !!tc f3 in
12781278
let (ml, mr) = (ef.ef_ml, ef.ef_mr) in
1279-
let hs2_pr = ss_inv_generalize_right (ss_inv_rebind (hf_pr hs2) ml) mr in
1280-
let hs3_pr = ss_inv_generalize_left (ss_inv_rebind (hf_pr hs3) mr) ml in
1279+
let hs2_pr = ss_inv_generalize_as_left (hf_pr hs2) ml mr in
1280+
let hs3_pr = ss_inv_generalize_as_right (hf_pr hs3) ml mr in
12811281
let pre = map_ts_inv f_ands [ef_pr ef; hs2_pr; hs3_pr] in
1282-
let hs2_po = ss_inv_generalize_right (ss_inv_rebind (hf_po hs2) ml) mr in
1283-
let hs3_po = ss_inv_generalize_left (ss_inv_rebind (hf_po hs3) mr) ml in
1282+
let hs2_po = ss_inv_generalize_as_left (hf_po hs2) ml mr in
1283+
let hs3_po = ss_inv_generalize_as_right (hf_po hs3) ml mr in
12841284
let post = map_ts_inv f_ands [ef_po ef; hs2_po; hs3_po] in
12851285
let tac = if notmod then t_equivF_conseq_nm else t_equivF_conseq in
12861286
t_on1seq 2
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module Foo = {
2+
proc foo(i : int) = {
3+
}
4+
}.
5+
6+
lemma foo_corr : hoare [ Foo.foo : true ==> true] by proc;auto.
7+
8+
lemma foo_eq : equiv [ Foo.foo ~ Foo.foo : ={arg} ==> true ] by sim.
9+
10+
lemma foo_eq_corr:
11+
equiv [ Foo.foo ~ Foo.foo : ={arg} ==> ={res} ].
12+
conseq foo_eq foo_corr.

0 commit comments

Comments
 (0)