diff --git a/examples/bts/185_apply_let.mlw b/examples/bts/185_apply_let.mlw new file mode 100644 index 0000000000000000000000000000000000000000..1cc058847249ab2e833fe60afd95ee4fcff3d277 --- /dev/null +++ b/examples/bts/185_apply_let.mlw @@ -0,0 +1,11 @@ +module Test + + function f int : int = 17 + predicate p int int + axiom A: forall x y. x = f y -> p x y + axiom B: forall y. let x = f y in p x y + + goal g : p 17 42 + + +end diff --git a/examples/bts/185_apply_let/why3session.xml b/examples/bts/185_apply_let/why3session.xml new file mode 100644 index 0000000000000000000000000000000000000000..566ae522581f74e8e70682e19de347bac0f69272 --- /dev/null +++ b/examples/bts/185_apply_let/why3session.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN" +"http://why3.lri.fr/why3session.dtd"> +<why3session shape_version="5"> +<file name="../185_apply_let.mlw" proved="true"> +<theory name="Test" proved="true"> + <goal name="g" proved="true"> + <transf name="apply" proved="true" arg1="B"> + <goal name="g.0" proved="true"> + <transf name="compute_in_goal" proved="true" > + </transf> + </goal> + </transf> + </goal> +</theory> +</file> +</why3session> diff --git a/examples/bts/185_apply_let/why3shapes.gz b/examples/bts/185_apply_let/why3shapes.gz new file mode 100644 index 0000000000000000000000000000000000000000..208b982bb8a95f1ffbd12f9b0133b29b78219ac0 Binary files /dev/null and b/examples/bts/185_apply_let/why3shapes.gz differ diff --git a/src/transform/apply.ml b/src/transform/apply.ml index cb55496d07b42eb56c84a69329cb11d24f91715c..07cf91e600e5208699a0c0375bbdc6af5d627c54 100644 --- a/src/transform/apply.ml +++ b/src/transform/apply.ml @@ -35,6 +35,10 @@ let intros f = | Tquant (Tforall, fq) -> let vsl, _, fs = t_open_quant fq in intros_aux lp (lv @ vsl) fs + | Tlet (t, tb) -> + let vs, t2 = t_open_bound tb in + let f = t_equ (t_var vs) t in + intros_aux (f :: lp) ([vs] @ lv) t2 | _ -> (lp, lv, f) in intros_aux [] [] f