From 35ffacadfb5e2cbc9b02510447a038ce50bccd96 Mon Sep 17 00:00:00 2001
From: Sylvain Dailler <dailler@adacore.com>
Date: Thu, 20 Sep 2018 14:14:14 +0200
Subject: [PATCH] [transform apply] let is now a premise for applied condition
 of apply

---
 examples/bts/185_apply_let.mlw             |  11 +++++++++++
 examples/bts/185_apply_let/why3session.xml |  17 +++++++++++++++++
 examples/bts/185_apply_let/why3shapes.gz   | Bin 0 -> 96 bytes
 src/transform/apply.ml                     |   4 ++++
 4 files changed, 32 insertions(+)
 create mode 100644 examples/bts/185_apply_let.mlw
 create mode 100644 examples/bts/185_apply_let/why3session.xml
 create mode 100644 examples/bts/185_apply_let/why3shapes.gz

diff --git a/examples/bts/185_apply_let.mlw b/examples/bts/185_apply_let.mlw
new file mode 100644
index 000000000..1cc058847
--- /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 000000000..566ae5225
--- /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
GIT binary patch
literal 96
zcmb2|=3oGW|DvaN^EMdpupXGFY2=h-T^MB0V{g;R7HDL5;XWsKRnoGEh8DghyPCJS
zS6$F4bH6Nb>sf-=HW$&!H{GMRUO#$IB=7X58<h`hPW`JqY#&#DHX|^Gfq?-4pG+tN

literal 0
HcmV?d00001

diff --git a/src/transform/apply.ml b/src/transform/apply.ml
index cb55496d0..07cf91e60 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
 
-- 
GitLab