diff --git a/src/plugins/wp/tests/wp_gallery/find.i b/src/plugins/wp/tests/wp_gallery/find.i
new file mode 100644
index 0000000000000000000000000000000000000000..2f23fc18373c6a61a2982656ec97f0e33bc47aea
--- /dev/null
+++ b/src/plugins/wp/tests/wp_gallery/find.i
@@ -0,0 +1,103 @@
+/* run.config
+   OPT: -wp-no-print -wp-rte
+*/
+
+/* run.config_qualif
+   OPT: -then -wp-rte -wp
+*/
+
+/*@ predicate IsValueOk(integer u, integer v) = u == v;
+*/
+
+/*@ predicate InRange(integer start, integer k,  integer last) = 
+      start <= k <= last;
+*/
+/*@ predicate Found(int * p, integer n, integer v) =
+      \exists integer k;
+        InRange(0,k,n-1) && IsValueOk(p[k],v);
+*/
+
+/*@ requires Natural:    0 <= n;
+  @ requires Valid:      \valid(p + (0 .. n-1));
+  @ ensures  Range:      InRange(0,\result,n);
+  @ ensures  NoneBefore: !Found(p,\result,v);
+  @ behavior not_found:
+      assumes ! Found(p,n,v);
+      ensures \result == n ;
+  @ behavior found:
+      assumes Found(p,n,v);
+      ensures \result < n ;
+      ensures IsValueOk(p[\result],v) ;
+  @ disjoint behaviors found, not_found;
+  @ complete behaviors found, not_found;
+ */
+int find(int * p, int n, int v) {
+  int i = 0;
+  /*@ loop assigns i;
+    @ loop invariant Valid:    \valid(p + (0 .. i-1));
+    @ loop invariant Range:    InRange(0,i,n);
+    @ loop invariant NotFound: !Found(p,i,v);
+    @ loop variant   Decrease: n - i;
+  */
+  for (; i < n ; i++)
+    if (p[i] == v)
+      break;
+  return i;
+}
+//----------------------------------------------------------
+/*@ predicate IsValueOk_ptr(int * p, integer v) = *p == v;
+*/
+
+/*@ predicate InRange_ptr(int * start, int * p,  int * last) =
+         \base_addr(start) == \base_addr(last)
+      && \base_addr(start) == \base_addr(p)
+      && start <= p <= last ;
+*/
+
+/*@ predicate Found_ptr(int * start, int * last, integer v) =
+       \exists int* pk;
+         InRange_ptr(start, pk, last-1) && IsValueOk_ptr(pk,v);
+*/
+
+/*@ requires Ordered:    p <= q && \base_addr(p) == \base_addr(q);
+  @ requires Valid:      \valid(p + (0 .. (q-p)-1));
+  @ ensures  Range:      InRange_ptr(p,\result,q) ;
+  @ ensures  NoneBefore: !Found_ptr(p,\result,v);
+  @ behavior not_found:
+      assumes !Found_ptr(p,q,v);
+      ensures \result == q;
+  @ behavior found:
+      assumes Found_ptr(p,q,v);
+      ensures \result < q ;
+      ensures IsValueOk_ptr(\result,v) ;
+  @ disjoint behaviors found, not_found;
+  @ complete behaviors found, not_found;
+ */
+int * find_ptr(int * p, int * q, int v) {
+  /*@ loop assigns p;
+    @ loop invariant Valid:    \valid(\at(p,LoopEntry) + (0 .. (\at(p,LoopEntry)-p-1)));
+    @ loop invariant Range:    InRange_ptr(\at(p,LoopEntry),p,q);
+    @ loop invariant NotFound: !Found_ptr(\at(p,LoopEntry),p,v);
+    @ loop variant   Decrease: q - p;
+  */
+  for (; p < q; p++) {
+    if (*p == v)
+      //@ assert Hack: IsValueOk_ptr(p,v);
+      break;
+   }
+  return p;
+}
+//----------------------------------------------------------
+/*@ requires Ordered: p <= q && \base_addr(p) == \base_addr(q);
+  @ requires Valid:   \valid(p + (0 .. (q-p)-1));
+  @ ensures  Last:    \result == q ;
+*/
+int * iter_ptr(int * p, int * q) {
+  /*@ loop assigns p;
+    @ loop invariant Valid:    \valid(\at(p,LoopEntry) + (0 .. (\at(p,LoopEntry)-p-1)));
+    @ loop invariant Range:    InRange_ptr(\at(p,LoopEntry),p,q);
+    @ loop variant   Decrease: q - p;
+  */
+  for (; p < q ; p++);
+  return p;
+}
diff --git a/src/plugins/wp/tests/wp_gallery/oracle/find.res.oracle b/src/plugins/wp/tests/wp_gallery/oracle/find.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..b4f4caaaf02b52cb3b93f4e6c14e4c309f6fa375
--- /dev/null
+++ b/src/plugins/wp/tests/wp_gallery/oracle/find.res.oracle
@@ -0,0 +1,51 @@
+# frama-c -wp -wp-rte [...]
+[kernel] Parsing tests/wp_gallery/find.i (no preprocessing)
+[wp] Running WP plugin...
+[wp] Loading driver 'share/wp.driver'
+[rte] annotating function find
+[rte] annotating function find_ptr
+[rte] annotating function iter_ptr
+[wp] Goal typed_find_complete_found_not_found : trivial
+[wp] Goal typed_find_disjoint_found_not_found : trivial
+[wp] Goal typed_find_ensures_Range : not tried
+[wp] Goal typed_find_ensures_NoneBefore : not tried
+[wp] Goal typed_find_loop_invariant_NotFound_preserved : not tried
+[wp] Goal typed_find_loop_invariant_NotFound_established : not tried
+[wp] Goal typed_find_loop_invariant_Range_preserved : not tried
+[wp] Goal typed_find_loop_invariant_Range_established : not tried
+[wp] Goal typed_find_loop_invariant_Valid_preserved : not tried
+[wp] Goal typed_find_loop_invariant_Valid_established : not tried
+[wp] Goal typed_find_assert_rte_mem_access : not tried
+[wp] Goal typed_find_assert_rte_signed_overflow : not tried
+[wp] Goal typed_find_loop_assigns : trivial
+[wp] Goal typed_find_loop_variant_decrease : not tried
+[wp] Goal typed_find_loop_variant_positive : not tried
+[wp] Goal typed_find_found_ensures : not tried
+[wp] Goal typed_find_found_ensures_2 : not tried
+[wp] Goal typed_find_not_found_ensures : not tried
+[wp] Goal typed_find_ptr_complete_found_not_found : trivial
+[wp] Goal typed_find_ptr_disjoint_found_not_found : trivial
+[wp] Goal typed_find_ptr_ensures_Range : not tried
+[wp] Goal typed_find_ptr_ensures_NoneBefore : not tried
+[wp] Goal typed_find_ptr_loop_invariant_NotFound_preserved : not tried
+[wp] Goal typed_find_ptr_loop_invariant_NotFound_established : not tried
+[wp] Goal typed_find_ptr_loop_invariant_Range_preserved : not tried
+[wp] Goal typed_find_ptr_loop_invariant_Range_established : not tried
+[wp] Goal typed_find_ptr_loop_invariant_Valid_preserved : not tried
+[wp] Goal typed_find_ptr_loop_invariant_Valid_established : not tried
+[wp] Goal typed_find_ptr_assert_rte_mem_access : not tried
+[wp] Goal typed_find_ptr_assert_Hack : not tried
+[wp] Goal typed_find_ptr_loop_assigns : trivial
+[wp] Goal typed_find_ptr_loop_variant_decrease : not tried
+[wp] Goal typed_find_ptr_loop_variant_positive : not tried
+[wp] Goal typed_find_ptr_found_ensures : not tried
+[wp] Goal typed_find_ptr_found_ensures_2 : not tried
+[wp] Goal typed_find_ptr_not_found_ensures : not tried
+[wp] Goal typed_iter_ptr_ensures_Last : not tried
+[wp] Goal typed_iter_ptr_loop_invariant_Range_preserved : not tried
+[wp] Goal typed_iter_ptr_loop_invariant_Range_established : not tried
+[wp] Goal typed_iter_ptr_loop_invariant_Valid_preserved : not tried
+[wp] Goal typed_iter_ptr_loop_invariant_Valid_established : not tried
+[wp] Goal typed_iter_ptr_loop_assigns : trivial
+[wp] Goal typed_iter_ptr_loop_variant_decrease : not tried
+[wp] Goal typed_iter_ptr_loop_variant_positive : not tried
diff --git a/src/plugins/wp/tests/wp_gallery/oracle_qualif/find.res.oracle b/src/plugins/wp/tests/wp_gallery/oracle_qualif/find.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..8f59a81a8f93dddf21a3b224837935fd374d8993
--- /dev/null
+++ b/src/plugins/wp/tests/wp_gallery/oracle_qualif/find.res.oracle
@@ -0,0 +1,118 @@
+# frama-c -wp [...]
+[kernel] Parsing tests/wp_gallery/find.i (no preprocessing)
+[wp] Running WP plugin...
+[wp] Loading driver 'share/wp.driver'
+[wp] Warning: Missing RTE guards
+[wp] 41 goals scheduled
+[wp] [Qed] Goal typed_find_complete_found_not_found : Valid
+[wp] [Qed] Goal typed_find_disjoint_found_not_found : Valid
+[wp] [Qed] Goal typed_find_ensures_Range : Valid
+[wp] [Qed] Goal typed_find_ensures_NoneBefore : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_loop_invariant_NotFound_preserved : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_loop_invariant_NotFound_established : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_loop_invariant_Range_preserved : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_loop_invariant_Range_established : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_loop_invariant_Valid_preserved : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_loop_invariant_Valid_established : Valid
+[wp] [Qed] Goal typed_find_loop_assigns : Valid
+[wp] [Qed] Goal typed_find_loop_variant_decrease : Valid
+[wp] [Qed] Goal typed_find_loop_variant_positive : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_found_ensures : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_found_ensures_2 : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_not_found_ensures : Valid
+[wp] [Qed] Goal typed_find_ptr_complete_found_not_found : Valid
+[wp] [Qed] Goal typed_find_ptr_disjoint_found_not_found : Valid
+[wp] [Qed] Goal typed_find_ptr_ensures_Range : Valid
+[wp] [Qed] Goal typed_find_ptr_ensures_NoneBefore : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_loop_invariant_NotFound_preserved : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_loop_invariant_NotFound_established : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_loop_invariant_Range_preserved : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_loop_invariant_Range_established : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_loop_invariant_Valid_preserved : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_loop_invariant_Valid_established : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_assert_Hack : Valid
+[wp] [Qed] Goal typed_find_ptr_loop_assigns : Valid
+[wp] [Qed] Goal typed_find_ptr_loop_variant_decrease : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_loop_variant_positive : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_found_ensures : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_found_ensures_2 : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_not_found_ensures : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_iter_ptr_ensures_Last : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_iter_ptr_loop_invariant_Range_preserved : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_iter_ptr_loop_invariant_Range_established : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_iter_ptr_loop_invariant_Valid_preserved : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_iter_ptr_loop_invariant_Valid_established : Valid
+[wp] [Qed] Goal typed_iter_ptr_loop_assigns : Valid
+[wp] [Qed] Goal typed_iter_ptr_loop_variant_decrease : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_iter_ptr_loop_variant_positive : Valid
+[wp] Proved goals:   41 / 41
+  Qed:              15 
+  Alt-Ergo 2.0.0:   26
+[wp] Report in:  'tests/wp_gallery/oracle_qualif/find.0.report.json'
+[wp] Report out: 'tests/wp_gallery/result_qualif/find.0.report.json'
+-------------------------------------------------------------
+Functions           WP     Alt-Ergo        Total   Success
+find                 7      9 (56..80)      16       100%
+find_ptr             6     11 (192..240)    17       100%
+iter_ptr             2      6 (72..96)       8       100%
+-------------------------------------------------------------
+[wp] Running WP plugin...
+[rte] annotating function find
+[rte] annotating function find_ptr
+[rte] annotating function iter_ptr
+[wp] 44 goals scheduled
+[wp] [Qed] Goal typed_find_complete_found_not_found : Valid
+[wp] [Qed] Goal typed_find_disjoint_found_not_found : Valid
+[wp] [Qed] Goal typed_find_ensures_Range : Valid
+[wp] [Qed] Goal typed_find_ensures_NoneBefore : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_loop_invariant_NotFound_preserved : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_loop_invariant_NotFound_established : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_loop_invariant_Range_preserved : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_loop_invariant_Range_established : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_loop_invariant_Valid_preserved : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_loop_invariant_Valid_established : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_assert_rte_mem_access : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_assert_rte_signed_overflow : Valid
+[wp] [Qed] Goal typed_find_loop_assigns : Valid
+[wp] [Qed] Goal typed_find_loop_variant_decrease : Valid
+[wp] [Qed] Goal typed_find_loop_variant_positive : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_found_ensures : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_found_ensures_2 : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_not_found_ensures : Valid
+[wp] [Qed] Goal typed_find_ptr_complete_found_not_found : Valid
+[wp] [Qed] Goal typed_find_ptr_disjoint_found_not_found : Valid
+[wp] [Qed] Goal typed_find_ptr_ensures_Range : Valid
+[wp] [Qed] Goal typed_find_ptr_ensures_NoneBefore : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_loop_invariant_NotFound_preserved : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_loop_invariant_NotFound_established : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_loop_invariant_Range_preserved : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_loop_invariant_Range_established : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_loop_invariant_Valid_preserved : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_loop_invariant_Valid_established : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_assert_rte_mem_access : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_assert_Hack : Valid
+[wp] [Qed] Goal typed_find_ptr_loop_assigns : Valid
+[wp] [Qed] Goal typed_find_ptr_loop_variant_decrease : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_loop_variant_positive : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_found_ensures : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_found_ensures_2 : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_find_ptr_not_found_ensures : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_iter_ptr_ensures_Last : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_iter_ptr_loop_invariant_Range_preserved : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_iter_ptr_loop_invariant_Range_established : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_iter_ptr_loop_invariant_Valid_preserved : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_iter_ptr_loop_invariant_Valid_established : Valid
+[wp] [Qed] Goal typed_iter_ptr_loop_assigns : Valid
+[wp] [Qed] Goal typed_iter_ptr_loop_variant_decrease : Valid
+[wp] [Alt-Ergo 2.0.0] Goal typed_iter_ptr_loop_variant_positive : Valid
+[wp] Proved goals:   29 / 44
+  Qed:               0 
+  Alt-Ergo 2.0.0:   29
+[wp] Report in:  'tests/wp_gallery/oracle_qualif/find.0.report.json'
+[wp] Report out: 'tests/wp_gallery/result_qualif/find.0.report.json'
+-------------------------------------------------------------
+Functions           WP     Alt-Ergo        Total   Success
+find                 7     11 (56..80)      18       100%
+find_ptr             6     12 (192..240)    18       100%
+iter_ptr             2      6 (72..96)       8       100%
+-------------------------------------------------------------