diff --git a/src/plugins/wp/tests/wp_gallery/frama_c_hashtbl_solved.c b/src/plugins/wp/tests/wp_gallery/frama_c_hashtbl_solved.c deleted file mode 100644 index f52b6b9b19f46f34e7f32691ce5d112d23ce556e..0000000000000000000000000000000000000000 --- a/src/plugins/wp/tests/wp_gallery/frama_c_hashtbl_solved.c +++ /dev/null @@ -1,329 +0,0 @@ -/* run.config - OPT: -wp-no-print -wp-rte -*/ - -/* run.config_qualif - OPT: -wp-prover=script,alt-ergo -wp-prop=-left_unproved -then -wp-rte -wp -wp-prop=-left_unproved -*/ - -/* ******************************* */ -/* Solution de TP donné par Julien */ -/* ******************************* */ - -/* -------------------------------------------------------------------------- */ -/* - Ce fichier fournit une petite librairie de tables de hachage simplifiées: - elles ne sont pas dynamiques et, en particulier, pas redimensionnables. - - Votre but est: - 1. écrire la spécification ACSL des fonctions fournies à partir de leurs - spécifications informelles (mais pas du code...) - 2. prouver que chaque fonction satisfait la spécification écrite en 1. - 3. prouver l'absence d'erreurs à l'exécution via l'option -wp-rte. -*/ -/* -------------------------------------------------------------------------- */ - -#include <limits.h> - -/* -------------------------------------------------------------------------- */ -/* - Chaines de caractères simplifiées: - toutes les chaînes de caractères de ce fichier seront supposées de longueurs - STRING_LEN. - - La fonction [eq_string] est fournie avec sa spécification formelle déjà - prouvée. Vous n'avez donc rien à faire pour cette fonction \o/. - - Astuce: le prédicat [EqString] peut éventuellement être utile... -*/ -/* -------------------------------------------------------------------------- */ - -#define STRING_LEN 20 - -/*@ predicate EqString(char *s1, char *s2) = - @ \forall integer i; 0 <= i < STRING_LEN ==> s1[i] == s2[i]; - @ */ - -/*@ requires \valid_read(s1 + (0 .. STRING_LEN - 1)); - @ requires \valid_read(s2 + (0 .. STRING_LEN - 1)); - @ assigns \nothing; - @ - @ behavior eq: - @ assumes EqString(s1, s2); - @ ensures \result == 1; - @ - @ behavior not_eq: - @ assumes ! EqString(s1, s2); - @ ensures \result == 0; - @ - @ complete behaviors; - @ disjoint behaviors; - @ */ -int eq_string(const char *s1, const char *s2) { - int i; - /*@ loop invariant 0 <= i <= STRING_LEN; - @ loop invariant \forall integer j; 0 <= j < i ==> s1[j] == s2[j]; - @ loop assigns i; - @ loop variant STRING_LEN - i; - @*/ - for(i = 0; i < STRING_LEN; i++) - if (s1[i] != s2[i]) return 0; - return 1; -} - -/* -------------------------------------------------------------------------- */ -/* - Structures de données. - - Les tables de hachage associent ici des clés sous forme de chaînes de - caractères à des valeurs entières. Une fonction de hachage sur les - chaînes de caractères vous est fournie. - - Les tables de hachage sont représentées par leur nombre d'éléments et un - tableau de "buckets" de longueur HASHTBL_LEN. - - Les "buckets" sont eux-même des tableaux de couples (clé, valeur) - (individuellement appelé "bucket") dont toutes les clés ont le même - haché. Chaque tableau est de longueur fixe, BUCKET_LEN, mais le nombre - d'éléments stockés dans celui-ci peut varier. -*/ -/* -------------------------------------------------------------------------- */ - -#define BUCKET_LEN 10 -#define HASHTBL_LEN 17 - -typedef struct { - char *key; // clé, sous forme de chaînes de caractères (simplifiées) - int value; // valeur associée à la clé -} Bucket; - -typedef struct { - Bucket buckets[BUCKET_LEN]; // tableau de couples (clé, valeur) - int size; // nombre d'éléments stockés dans le tableau -} Buckets; - -typedef struct { - Buckets data[HASHTBL_LEN]; // tableau de buckets - int size; // nombre d'éléments stockés dans la table de hachage -} Hashtbl; - -/* -------------------------------------------------------------------------- */ -/* - Fonction de hachage fournie: vous n'avez là non plus rien à faire \o/. - - La postcondition de la fonction [hash] ne peut pas être prouvée sans donner - une définition à la fonction logique [Hash]. Ce travail n'est pas demandé ici - et cette postcondition restera donc toujours non prouvée. Ce devrait être - la seule... - - Astuce: la fonction logique [HashIndex] de l'axiomatique [Hash] n'est pas - donnée que pour faire jolie. Vous avez aussi le droit d'ajouter vos propres - définitions de prédicats et de fonctions... -*/ -/* -------------------------------------------------------------------------- */ - -/*@ axiomatic Hash { - @ logic unsigned long Hash(char *s) reads(s + (0 .. )); - @ // [Hash] est un modèle abstrait de la fonction de hash codée en C - @ // ci-dessous - @ - @ logic integer HashIndex(Hashtbl *tbl, char *k) = Hash(k) % HASHTBL_LEN; - @ } */ - -/*@ requires \valid_read(s + (0 .. STRING_LEN - 1)); - @ assigns \nothing; - @ ensures left_unproved: \result == Hash(s); - @ */ -unsigned long hash(const char *s) { - unsigned long h = 5381; - int i; - /*@ loop invariant 0 <= i <= STRING_LEN; - @ loop assigns h, i; - @ loop variant STRING_LEN - i; */ - for(i = 0; i < STRING_LEN; i++) { - if (s[i]) break; - h = ((h << 5) + h) + s[i]; - } - return h; -} - -/* -------------------------------------------------------------------------- */ -/* - Fonctions logiques et prédicats additionnels utiles. -*/ -/* -------------------------------------------------------------------------- */ - -/*@ - @ predicate valid_tbl(Hashtbl *tbl) = - @ \valid(tbl->data+(0 .. HASHTBL_LEN - 1)); - @ - @ predicate valid_buckets(Hashtbl *tbl) = - @ \forall integer i; - @ 0 <= i < HASHTBL_LEN ==> - @ \valid(tbl->data[i].buckets + (0 .. BUCKET_LEN - 1)); - @ - @ predicate valid_read_keys(Hashtbl *tbl) = - @ \forall integer i, j; - @ 0 <= i < HASHTBL_LEN ==> - @ 0 <= j < tbl->data[i].size ==> - @ \valid_read(tbl->data[i].buckets[j].key + (0 .. STRING_LEN - 1)); - @ - @ logic integer buckets_size(Hashtbl *tbl, char *k) = - @ tbl->data[HashIndex(tbl, k)].size; - @ - @ logic Bucket bucket(Hashtbl *tbl, char *k, integer i) = - @ tbl->data[HashIndex(tbl, k)].buckets[i]; - @ - @ */ - -/* -------------------------------------------------------------------------- */ -/* - Exercice 0 (échauffement): - - La fonction [size] retourne le nombre d'éléments d'une table. -*/ -/* -------------------------------------------------------------------------- */ - -/*@ requires \valid(tbl); - @ assigns \nothing; - @ ensures \result == tbl->size; - @ */ -int size(const Hashtbl *tbl) { - return tbl->size; -} - -/* -------------------------------------------------------------------------- */ -/* - Exercice 1: - - La fonction [init] initialise une table de hachage contenant 0 élément. - En particulier, chaque buckets contient 0 élément. -*/ -/* -------------------------------------------------------------------------- */ - -/*@ requires \valid(tbl); - @ requires valid_tbl(tbl); - @ assigns tbl->size, tbl->data[0 .. HASHTBL_LEN - 1]; - @ ensures tbl->size == 0; - @ ensures \forall integer i; 0 <= i < HASHTBL_LEN ==> tbl->data[i].size == 0; - @ */ -void init(Hashtbl *tbl){ - int i; - tbl->size = 0; - /*@ loop invariant 0 <= i <= HASHTBL_LEN; - @ loop invariant \forall integer k; 0 <= k < i ==> tbl->data[k].size == 0; - @ loop assigns i, tbl->data[0 .. HASHTBL_LEN - 1].size; - @ loop variant HASHTBL_LEN - i; - @ */ - for(i = 0; i < HASHTBL_LEN; i++) - tbl->data[i].size = 0; -} - -/* -------------------------------------------------------------------------- */ -/* - Exercice 2: - - La fonction [add] ajouter un couple (clé, valeur) dans la table de hachage - s'il y a suffisamment de places. Si tel est le cas, elle retourne 0. - - S'il n'y a pas suffisamment de places, la fonction ne fait rien et retourne - -1. - - Conseil: lorsque la table est modifiée, bien penser à spécifier les nouvelles - tailles et l'emplacement du couple ajouté. -*/ -/* -------------------------------------------------------------------------- */ - -/*@ requires \valid(tbl); - @ requires valid_tbl(tbl); - @ requires valid_buckets(tbl); - @ requires \valid_read(k + (0 .. STRING_LEN - 1)); - @ requires 0 <= tbl->size < INT_MAX; - @ requires \forall integer i; - @ 0 <= i < HASHTBL_LEN ==> - @ 0 <= tbl->data[i].size <= BUCKET_LEN; - @ - @ assigns tbl->data[HashIndex(tbl, k)], tbl->size; - @ - @ behavior nominal: - @ assumes buckets_size(tbl, k) < BUCKET_LEN; - @ assigns tbl->data[HashIndex(tbl, k)], tbl->size; - @ ensures \result == 0; - @ ensures tbl->size == \old(tbl->size) + 1; - @ ensures buckets_size(tbl, k) == buckets_size{Old}(tbl, k) + 1; - @ ensures bucket(tbl, k, buckets_size{Old}(tbl, k)).key == k; - @ ensures bucket(tbl, k, buckets_size{Old}(tbl, k)).value == d; - @ behavior full: - @ assumes buckets_size(tbl, k) == BUCKET_LEN; - @ assigns \nothing; - @ ensures \result == -1; - @ - @ complete behaviors; - @ disjoint behaviors; - @ */ -int add(Hashtbl *tbl, char *k, int d) { - Bucket new_entry; - unsigned int h = hash(k) % HASHTBL_LEN; - if (tbl->data[h].size >= BUCKET_LEN) - return -1; - new_entry.key = k; - new_entry.value = d; - tbl->data[h].buckets[tbl->data[h].size] = new_entry; - tbl->data[h].size++; - tbl->size++; - return 0; -} - -/* -------------------------------------------------------------------------- */ -/* - Exercice 3: - - La fonction [mem_binding] retourne 1 si le couple (clé, valeur) [k, v] donné - en entrée est présent dans la table de hachage. Elle retourne 0 sinon. -*/ -/* -------------------------------------------------------------------------- */ - -/*@ requires \valid(tbl); - @ requires valid_tbl(tbl); - @ requires valid_buckets(tbl); - @ requires valid_read_keys(tbl); - @ requires \valid_read(k + (0 .. STRING_LEN - 1)); - @ requires \forall integer i; - @ 0 <= i < HASHTBL_LEN ==> - @ 0 <= tbl->data[i].size < BUCKET_LEN; - @ - @ assigns \nothing; - @ - @ behavior found: - @ assumes \exists integer i; 0 <= i < buckets_size(tbl, k) && - @ EqString(k, bucket(tbl, k, i).key) && v == bucket(tbl, k, i).value; - @ ensures \result == 1; - @ - @ behavior not_found: - @ assumes \forall integer i; 0 <= i < buckets_size(tbl, k) ==> - @ (! EqString(k, bucket(tbl, k, i).key) - @ || tbl->data[HashIndex(tbl, k)].buckets[i].value != v); - @ // note: Alt-Ergo does not manage to prove it if written - @ // bucket(tbl, k, i).value != v - @ // so disappointing :-( - @ ensures \result == 0; - @ - @ complete behaviors; - @ disjoint behaviors; - @ */ -int mem_binding(const Hashtbl *tbl, const char *k, int v) { - int i, h = hash(k) % HASHTBL_LEN; - /*@ loop invariant 0 <= i <= tbl->data[h].size; - @ loop invariant \forall integer j; 0 <= j < i ==> - @ (! EqString(k, tbl->data[h].buckets[j].key) - @ || tbl->data[h].buckets[j].value != v); - @ loop assigns i; - @ loop variant tbl->data[h].size - i; - @ */ - for(i = 0; i < tbl->data[h].size; i++) { - if (eq_string(k, tbl->data[h].buckets[i].key) - && tbl->data[h].buckets[i].value == v) - return 1; - } - return 0; -} diff --git a/src/plugins/wp/tests/wp_gallery/oracle/frama_c_hashtbl_solved.res.oracle b/src/plugins/wp/tests/wp_gallery/oracle/frama_c_hashtbl_solved.res.oracle deleted file mode 100644 index 2429963d412aaa3b426504d27c25d7c2fc60722a..0000000000000000000000000000000000000000 --- a/src/plugins/wp/tests/wp_gallery/oracle/frama_c_hashtbl_solved.res.oracle +++ /dev/null @@ -1,153 +0,0 @@ -# frama-c -wp -wp-rte [...] -[kernel] Parsing tests/wp_gallery/frama_c_hashtbl_solved.c (with preprocessing) -[wp] Running WP plugin... -[rte] annotating function add -[rte] annotating function eq_string -[rte] annotating function hash -[rte] annotating function init -[rte] annotating function mem_binding -[rte] annotating function size -[wp] Goal typed_eq_string_complete_eq_not_eq : trivial -[wp] Goal typed_eq_string_disjoint_eq_not_eq : trivial -[wp] Goal typed_eq_string_loop_invariant_preserved : not tried -[wp] Goal typed_eq_string_loop_invariant_established : not tried -[wp] Goal typed_eq_string_loop_invariant_2_preserved : not tried -[wp] Goal typed_eq_string_loop_invariant_2_established : not tried -[wp] Goal typed_eq_string_assert_rte_mem_access : not tried -[wp] Goal typed_eq_string_assert_rte_mem_access_2 : not tried -[wp] Goal typed_eq_string_assert_rte_signed_overflow : not tried -[wp] Goal typed_eq_string_loop_assigns : trivial -[wp] Goal typed_eq_string_assigns_part1 : not tried -[wp] Goal typed_eq_string_assigns_part2 : not tried -[wp] Goal typed_eq_string_assigns_part3 : not tried -[wp] Goal typed_eq_string_assigns_part4 : not tried -[wp] Goal typed_eq_string_loop_variant_decrease : not tried -[wp] Goal typed_eq_string_loop_variant_positive : not tried -[wp] Goal typed_eq_string_eq_ensures : not tried -[wp] Goal typed_eq_string_not_eq_ensures : not tried -[wp] Goal typed_hash_ensures_left_unproved : not tried -[wp] Goal typed_hash_loop_invariant_preserved : not tried -[wp] Goal typed_hash_loop_invariant_established : not tried -[wp] Goal typed_hash_assert_rte_mem_access : not tried -[wp] Goal typed_hash_assert_rte_mem_access_2 : not tried -[wp] Goal typed_hash_assert_rte_signed_overflow : not tried -[wp] Goal typed_hash_loop_assigns : trivial -[wp] Goal typed_hash_assigns_part1 : not tried -[wp] Goal typed_hash_assigns_part2 : not tried -[wp] Goal typed_hash_loop_variant_decrease : not tried -[wp] Goal typed_hash_loop_variant_positive : not tried -[wp] Goal typed_size_ensures : not tried -[wp] Goal typed_size_assert_rte_mem_access : not tried -[wp] Goal typed_size_assigns : not tried -[wp] Goal typed_init_ensures : not tried -[wp] Goal typed_init_ensures_2 : not tried -[wp] Goal typed_init_assert_rte_mem_access : not tried -[wp] Goal typed_init_loop_invariant_preserved : not tried -[wp] Goal typed_init_loop_invariant_established : not tried -[wp] Goal typed_init_loop_invariant_2_preserved : not tried -[wp] Goal typed_init_loop_invariant_2_established : not tried -[wp] Goal typed_init_assert_rte_index_bound : not tried -[wp] Goal typed_init_assert_rte_index_bound_2 : not tried -[wp] Goal typed_init_assert_rte_mem_access_2 : not tried -[wp] Goal typed_init_assert_rte_signed_overflow : not tried -[wp] Goal typed_init_loop_assigns_part1 : trivial -[wp] Goal typed_init_loop_assigns_part2 : not tried -[wp] Goal typed_init_assigns_part1 : not tried -[wp] Goal typed_init_assigns_part2 : not tried -[wp] Goal typed_init_assigns_part3 : not tried -[wp] Goal typed_init_loop_variant_decrease : not tried -[wp] Goal typed_init_loop_variant_positive : not tried -[wp] Goal typed_add_complete_full_nominal : not tried -[wp] Goal typed_add_disjoint_full_nominal : not tried -[wp] Goal typed_add_assert_rte_index_bound : not tried -[wp] Goal typed_add_assert_rte_mem_access : not tried -[wp] Goal typed_add_assert_rte_index_bound_2 : not tried -[wp] Goal typed_add_assert_rte_index_bound_3 : not tried -[wp] Goal typed_add_assert_rte_index_bound_4 : not tried -[wp] Goal typed_add_assert_rte_index_bound_5 : not tried -[wp] Goal typed_add_assert_rte_mem_access_2 : not tried -[wp] Goal typed_add_assert_rte_mem_access_3 : not tried -[wp] Goal typed_add_assert_rte_index_bound_6 : not tried -[wp] Goal typed_add_assert_rte_mem_access_4 : not tried -[wp] Goal typed_add_assert_rte_mem_access_5 : not tried -[wp] Goal typed_add_assert_rte_signed_overflow : not tried -[wp] Goal typed_add_assert_rte_mem_access_6 : not tried -[wp] Goal typed_add_assert_rte_mem_access_7 : not tried -[wp] Goal typed_add_assert_rte_signed_overflow_2 : not tried -[wp] Goal typed_add_assigns_exit : trivial -[wp] Goal typed_add_assigns_normal_part1 : trivial -[wp] Goal typed_add_assigns_normal_part2 : not tried -[wp] Goal typed_add_assigns_normal_part3 : not tried -[wp] Goal typed_add_assigns_normal_part4 : not tried -[wp] Goal typed_add_assigns_normal_part5 : not tried -[wp] Goal typed_add_assigns_normal_part6 : not tried -[wp] Goal typed_add_assigns_normal_part7 : not tried -[wp] Goal typed_add_assigns_normal_part8 : not tried -[wp] Goal typed_add_assigns_normal_part9 : not tried -[wp] Goal typed_add_call_hash_requires : not tried -[wp] Goal typed_add_nominal_ensures : not tried -[wp] Goal typed_add_nominal_ensures_2 : not tried -[wp] Goal typed_add_nominal_ensures_3 : not tried -[wp] Goal typed_add_nominal_ensures_4 : not tried -[wp] Goal typed_add_nominal_ensures_5 : not tried -[wp] Goal typed_add_nominal_assigns_exit : trivial -[wp] Goal typed_add_nominal_assigns_normal_part1 : trivial -[wp] Goal typed_add_nominal_assigns_normal_part2 : not tried -[wp] Goal typed_add_nominal_assigns_normal_part3 : not tried -[wp] Goal typed_add_nominal_assigns_normal_part4 : not tried -[wp] Goal typed_add_nominal_assigns_normal_part5 : not tried -[wp] Goal typed_add_nominal_assigns_normal_part6 : not tried -[wp] Goal typed_add_nominal_assigns_normal_part7 : not tried -[wp] Goal typed_add_nominal_assigns_normal_part8 : not tried -[wp] Goal typed_add_nominal_assigns_normal_part9 : not tried -[wp] Goal typed_add_full_ensures : not tried -[wp] Goal typed_add_full_assigns_exit : trivial -[wp] Goal typed_add_full_assigns_normal_part1 : trivial -[wp] Goal typed_add_full_assigns_normal_part2 : not tried -[wp] Goal typed_add_full_assigns_normal_part3 : not tried -[wp] Goal typed_add_full_assigns_normal_part4 : not tried -[wp] Goal typed_add_full_assigns_normal_part5 : not tried -[wp] Goal typed_add_full_assigns_normal_part6 : not tried -[wp] Goal typed_add_full_assigns_normal_part7 : not tried -[wp] Goal typed_add_full_assigns_normal_part8 : not tried -[wp] Goal typed_add_full_assigns_normal_part9 : not tried -[wp] Goal typed_mem_binding_complete_found_not_found : not tried -[wp] Goal typed_mem_binding_disjoint_found_not_found : not tried -[wp] Goal typed_mem_binding_loop_invariant_preserved : not tried -[wp] Goal typed_mem_binding_loop_invariant_established : not tried -[wp] Goal typed_mem_binding_loop_invariant_2_preserved : not tried -[wp] Goal typed_mem_binding_loop_invariant_2_established : not tried -[wp] Goal typed_mem_binding_assert_rte_index_bound : not tried -[wp] Goal typed_mem_binding_assert_rte_index_bound_2 : not tried -[wp] Goal typed_mem_binding_assert_rte_mem_access : not tried -[wp] Goal typed_mem_binding_assert_rte_index_bound_3 : not tried -[wp] Goal typed_mem_binding_assert_rte_index_bound_4 : not tried -[wp] Goal typed_mem_binding_assert_rte_index_bound_5 : not tried -[wp] Goal typed_mem_binding_assert_rte_index_bound_6 : not tried -[wp] Goal typed_mem_binding_assert_rte_mem_access_2 : not tried -[wp] Goal typed_mem_binding_assert_rte_index_bound_7 : not tried -[wp] Goal typed_mem_binding_assert_rte_index_bound_8 : not tried -[wp] Goal typed_mem_binding_assert_rte_index_bound_9 : not tried -[wp] Goal typed_mem_binding_assert_rte_index_bound_10 : not tried -[wp] Goal typed_mem_binding_assert_rte_mem_access_3 : not tried -[wp] Goal typed_mem_binding_assert_rte_signed_overflow : not tried -[wp] Goal typed_mem_binding_loop_assigns_part1 : trivial -[wp] Goal typed_mem_binding_loop_assigns_part2 : not tried -[wp] Goal typed_mem_binding_assigns_exit_part1 : trivial -[wp] Goal typed_mem_binding_assigns_exit_part2 : not tried -[wp] Goal typed_mem_binding_assigns_exit_part3 : not tried -[wp] Goal typed_mem_binding_assigns_exit_part4 : not tried -[wp] Goal typed_mem_binding_assigns_normal_part1 : trivial -[wp] Goal typed_mem_binding_assigns_normal_part2 : not tried -[wp] Goal typed_mem_binding_assigns_normal_part3 : not tried -[wp] Goal typed_mem_binding_assigns_normal_part4 : not tried -[wp] Goal typed_mem_binding_assigns_normal_part5 : not tried -[wp] Goal typed_mem_binding_assigns_normal_part6 : not tried -[wp] Goal typed_mem_binding_assigns_normal_part7 : not tried -[wp] Goal typed_mem_binding_loop_variant_decrease : not tried -[wp] Goal typed_mem_binding_loop_variant_positive : not tried -[wp] Goal typed_mem_binding_call_hash_requires : not tried -[wp] Goal typed_mem_binding_call_eq_string_requires : not tried -[wp] Goal typed_mem_binding_call_eq_string_requires_2 : not tried -[wp] Goal typed_mem_binding_found_ensures : not tried -[wp] Goal typed_mem_binding_not_found_ensures : not tried diff --git a/src/plugins/wp/tests/wp_gallery/oracle_qualif/frama_c_hashtbl_solved.res.oracle b/src/plugins/wp/tests/wp_gallery/oracle_qualif/frama_c_hashtbl_solved.res.oracle deleted file mode 100644 index b9066d9921a764ee6e240b742d1f8f5c6387d265..0000000000000000000000000000000000000000 --- a/src/plugins/wp/tests/wp_gallery/oracle_qualif/frama_c_hashtbl_solved.res.oracle +++ /dev/null @@ -1,181 +0,0 @@ -# frama-c -wp [...] -[kernel] Parsing tests/wp_gallery/frama_c_hashtbl_solved.c (with preprocessing) -[wp] Running WP plugin... -[wp] Warning: Missing RTE guards -[wp] 102 goals scheduled -[wp] [Qed] Goal typed_eq_string_complete_eq_not_eq : Valid -[wp] [Qed] Goal typed_eq_string_disjoint_eq_not_eq : Valid -[wp] [Alt-Ergo] Goal typed_eq_string_loop_invariant_preserved : Valid -[wp] [Qed] Goal typed_eq_string_loop_invariant_established : Valid -[wp] [Alt-Ergo] Goal typed_eq_string_loop_invariant_2_preserved : Valid -[wp] [Qed] Goal typed_eq_string_loop_invariant_2_established : Valid -[wp] [Qed] Goal typed_eq_string_loop_assigns : Valid -[wp] [Qed] Goal typed_eq_string_assigns_part1 : Valid -[wp] [Qed] Goal typed_eq_string_assigns_part2 : Valid -[wp] [Qed] Goal typed_eq_string_assigns_part3 : Valid -[wp] [Qed] Goal typed_eq_string_assigns_part4 : Valid -[wp] [Qed] Goal typed_eq_string_loop_variant_decrease : Valid -[wp] [Qed] Goal typed_eq_string_loop_variant_positive : Valid -[wp] [Alt-Ergo] Goal typed_eq_string_eq_ensures : Valid -[wp] [Alt-Ergo] Goal typed_eq_string_not_eq_ensures : Valid -[wp] [Alt-Ergo] Goal typed_hash_loop_invariant_preserved : Valid -[wp] [Qed] Goal typed_hash_loop_invariant_established : Valid -[wp] [Qed] Goal typed_hash_loop_assigns : Valid -[wp] [Qed] Goal typed_hash_assigns_part1 : Valid -[wp] [Qed] Goal typed_hash_assigns_part2 : Valid -[wp] [Qed] Goal typed_hash_loop_variant_decrease : Valid -[wp] [Qed] Goal typed_hash_loop_variant_positive : Valid -[wp] [Qed] Goal typed_size_ensures : Valid -[wp] [Qed] Goal typed_size_assigns : Valid -[wp] [Alt-Ergo] Goal typed_init_ensures : Valid -[wp] [Alt-Ergo] Goal typed_init_ensures_2 : Valid -[wp] [Alt-Ergo] Goal typed_init_loop_invariant_preserved : Valid -[wp] [Qed] Goal typed_init_loop_invariant_established : Valid -[wp] [Alt-Ergo] Goal typed_init_loop_invariant_2_preserved : Valid -[wp] [Qed] Goal typed_init_loop_invariant_2_established : Valid -[wp] [Qed] Goal typed_init_loop_assigns_part1 : Valid -[wp] [Qed] Goal typed_init_loop_assigns_part2 : Valid -[wp] [Qed] Goal typed_init_assigns_part1 : Valid -[wp] [Qed] Goal typed_init_assigns_part2 : Valid -[wp] [Script] Goal typed_init_assigns_part3 : Valid -[wp] [Qed] Goal typed_init_loop_variant_decrease : Valid -[wp] [Qed] Goal typed_init_loop_variant_positive : Valid -[wp] [Alt-Ergo] Goal typed_add_complete_full_nominal : Valid -[wp] [Alt-Ergo] Goal typed_add_disjoint_full_nominal : Valid -[wp] [Qed] Goal typed_add_assigns_exit : Valid -[wp] [Qed] Goal typed_add_assigns_normal_part1 : Valid -[wp] [Qed] Goal typed_add_assigns_normal_part2 : Valid -[wp] [Qed] Goal typed_add_assigns_normal_part3 : Valid -[wp] [Qed] Goal typed_add_assigns_normal_part4 : Valid -[wp] [Qed] Goal typed_add_assigns_normal_part5 : Valid -[wp] [Alt-Ergo] Goal typed_add_assigns_normal_part6 : Valid -[wp] [Alt-Ergo] Goal typed_add_assigns_normal_part7 : Valid -[wp] [Qed] Goal typed_add_assigns_normal_part8 : Valid -[wp] [Qed] Goal typed_add_assigns_normal_part9 : Valid -[wp] [Qed] Goal typed_add_call_hash_requires : Valid -[wp] [Alt-Ergo] Goal typed_add_nominal_ensures : Valid -[wp] [Alt-Ergo] Goal typed_add_nominal_ensures_2 : Valid -[wp] [Alt-Ergo] Goal typed_add_nominal_ensures_3 : Valid -[wp] [Alt-Ergo] Goal typed_add_nominal_ensures_4 : Valid -[wp] [Alt-Ergo] Goal typed_add_nominal_ensures_5 : Valid -[wp] [Qed] Goal typed_add_nominal_assigns_exit : Valid -[wp] [Qed] Goal typed_add_nominal_assigns_normal_part1 : Valid -[wp] [Qed] Goal typed_add_nominal_assigns_normal_part2 : Valid -[wp] [Qed] Goal typed_add_nominal_assigns_normal_part3 : Valid -[wp] [Qed] Goal typed_add_nominal_assigns_normal_part4 : Valid -[wp] [Qed] Goal typed_add_nominal_assigns_normal_part5 : Valid -[wp] [Alt-Ergo] Goal typed_add_nominal_assigns_normal_part6 : Valid -[wp] [Alt-Ergo] Goal typed_add_nominal_assigns_normal_part7 : Valid -[wp] [Qed] Goal typed_add_nominal_assigns_normal_part8 : Valid -[wp] [Qed] Goal typed_add_nominal_assigns_normal_part9 : Valid -[wp] [Alt-Ergo] Goal typed_add_full_ensures : Valid -[wp] [Qed] Goal typed_add_full_assigns_exit : Valid -[wp] [Qed] Goal typed_add_full_assigns_normal_part1 : Valid -[wp] [Qed] Goal typed_add_full_assigns_normal_part2 : Valid -[wp] [Qed] Goal typed_add_full_assigns_normal_part3 : Valid -[wp] [Qed] Goal typed_add_full_assigns_normal_part4 : Valid -[wp] [Qed] Goal typed_add_full_assigns_normal_part5 : Valid -[wp] [Alt-Ergo] Goal typed_add_full_assigns_normal_part6 : Valid -[wp] [Alt-Ergo] Goal typed_add_full_assigns_normal_part7 : Valid -[wp] [Alt-Ergo] Goal typed_add_full_assigns_normal_part8 : Valid -[wp] [Qed] Goal typed_add_full_assigns_normal_part9 : Valid -[wp] [Alt-Ergo] Goal typed_mem_binding_complete_found_not_found : Valid -[wp] [Alt-Ergo] Goal typed_mem_binding_disjoint_found_not_found : Valid -[wp] [Alt-Ergo] Goal typed_mem_binding_loop_invariant_preserved : Valid -[wp] [Alt-Ergo] Goal typed_mem_binding_loop_invariant_established : Valid -[wp] [Alt-Ergo] Goal typed_mem_binding_loop_invariant_2_preserved : Valid -[wp] [Qed] Goal typed_mem_binding_loop_invariant_2_established : Valid -[wp] [Qed] Goal typed_mem_binding_loop_assigns_part1 : Valid -[wp] [Qed] Goal typed_mem_binding_loop_assigns_part2 : Valid -[wp] [Qed] Goal typed_mem_binding_assigns_exit_part1 : Valid -[wp] [Qed] Goal typed_mem_binding_assigns_exit_part2 : Valid -[wp] [Qed] Goal typed_mem_binding_assigns_exit_part3 : Valid -[wp] [Qed] Goal typed_mem_binding_assigns_exit_part4 : Valid -[wp] [Qed] Goal typed_mem_binding_assigns_normal_part1 : Valid -[wp] [Qed] Goal typed_mem_binding_assigns_normal_part2 : Valid -[wp] [Qed] Goal typed_mem_binding_assigns_normal_part3 : Valid -[wp] [Qed] Goal typed_mem_binding_assigns_normal_part4 : Valid -[wp] [Qed] Goal typed_mem_binding_assigns_normal_part5 : Valid -[wp] [Qed] Goal typed_mem_binding_assigns_normal_part6 : Valid -[wp] [Qed] Goal typed_mem_binding_assigns_normal_part7 : Valid -[wp] [Qed] Goal typed_mem_binding_loop_variant_decrease : Valid -[wp] [Qed] Goal typed_mem_binding_loop_variant_positive : Valid -[wp] [Qed] Goal typed_mem_binding_call_hash_requires : Valid -[wp] [Qed] Goal typed_mem_binding_call_eq_string_requires : Valid -[wp] [Alt-Ergo] Goal typed_mem_binding_call_eq_string_requires_2 : Valid -[wp] [Alt-Ergo] Goal typed_mem_binding_found_ensures : Valid -[wp] [Alt-Ergo] Goal typed_mem_binding_not_found_ensures : Valid -[wp] Proved goals: 102 / 102 - Qed: 69 - Script: 1 - Alt-Ergo: 32 ------------------------------------------------------------- - Functions WP Alt-Ergo Total Success - eq_string 11 4 15 100% - hash 6 1 7 100% - size 2 - 2 100% - init 8 4 13 100% - add 24 15 39 100% - mem_binding 18 8 26 100% ------------------------------------------------------------- -[wp] Running WP plugin... -[rte] annotating function add -[rte] annotating function eq_string -[rte] annotating function hash -[rte] annotating function init -[rte] annotating function mem_binding -[rte] annotating function size -[wp] 41 goals scheduled -[wp] [Alt-Ergo] Goal typed_eq_string_assert_rte_mem_access : Valid -[wp] [Alt-Ergo] Goal typed_eq_string_assert_rte_mem_access_2 : Valid -[wp] [Alt-Ergo] Goal typed_eq_string_assert_rte_signed_overflow : Valid -[wp] [Alt-Ergo] Goal typed_hash_assert_rte_mem_access : Valid -[wp] [Qed] Goal typed_hash_assert_rte_mem_access_2 : Valid -[wp] [Alt-Ergo] Goal typed_hash_assert_rte_signed_overflow : Valid -[wp] [Alt-Ergo] Goal typed_size_assert_rte_mem_access : Valid -[wp] [Alt-Ergo] Goal typed_init_assert_rte_mem_access : Valid -[wp] [Qed] Goal typed_init_assert_rte_index_bound : Valid -[wp] [Qed] Goal typed_init_assert_rte_index_bound_2 : Valid -[wp] [Alt-Ergo] Goal typed_init_assert_rte_mem_access_2 : Valid -[wp] [Alt-Ergo] Goal typed_init_assert_rte_signed_overflow : Valid -[wp] [Alt-Ergo] Goal typed_add_assert_rte_index_bound : Valid -[wp] [Alt-Ergo] Goal typed_add_assert_rte_mem_access : Valid -[wp] [Qed] Goal typed_add_assert_rte_index_bound_2 : Valid -[wp] [Alt-Ergo] Goal typed_add_assert_rte_index_bound_3 : Valid -[wp] [Qed] Goal typed_add_assert_rte_index_bound_4 : Valid -[wp] [Qed] Goal typed_add_assert_rte_index_bound_5 : Valid -[wp] [Alt-Ergo] Goal typed_add_assert_rte_mem_access_2 : Valid -[wp] [Qed] Goal typed_add_assert_rte_mem_access_3 : Valid -[wp] [Qed] Goal typed_add_assert_rte_index_bound_6 : Valid -[wp] [Alt-Ergo] Goal typed_add_assert_rte_mem_access_4 : Valid -[wp] [Qed] Goal typed_add_assert_rte_mem_access_5 : Valid -[wp] [Alt-Ergo] Goal typed_add_assert_rte_signed_overflow : Valid -[wp] [Alt-Ergo] Goal typed_add_assert_rte_mem_access_6 : Valid -[wp] [Alt-Ergo] Goal typed_add_assert_rte_mem_access_7 : Valid -[wp] [Alt-Ergo] Goal typed_add_assert_rte_signed_overflow_2 : Valid -[wp] [Alt-Ergo] Goal typed_mem_binding_assert_rte_index_bound : Valid -[wp] [Alt-Ergo] Goal typed_mem_binding_assert_rte_index_bound_2 : Valid -[wp] [Alt-Ergo] Goal typed_mem_binding_assert_rte_mem_access : Valid -[wp] [Qed] Goal typed_mem_binding_assert_rte_index_bound_3 : Valid -[wp] [Qed] Goal typed_mem_binding_assert_rte_index_bound_4 : Valid -[wp] [Qed] Goal typed_mem_binding_assert_rte_index_bound_5 : Valid -[wp] [Alt-Ergo] Goal typed_mem_binding_assert_rte_index_bound_6 : Valid -[wp] [Alt-Ergo] Goal typed_mem_binding_assert_rte_mem_access_2 : Valid -[wp] [Qed] Goal typed_mem_binding_assert_rte_index_bound_7 : Valid -[wp] [Qed] Goal typed_mem_binding_assert_rte_index_bound_8 : Valid -[wp] [Qed] Goal typed_mem_binding_assert_rte_index_bound_9 : Valid -[wp] [Qed] Goal typed_mem_binding_assert_rte_index_bound_10 : Valid -[wp] [Alt-Ergo] Goal typed_mem_binding_assert_rte_mem_access_3 : Valid -[wp] [Alt-Ergo] Goal typed_mem_binding_assert_rte_signed_overflow : Valid -[wp] Proved goals: 41 / 41 - Qed: 16 - Alt-Ergo: 25 ------------------------------------------------------------- - Functions WP Alt-Ergo Total Success - eq_string 11 7 18 100% - hash 7 3 10 100% - size 2 1 3 100% - init 10 7 18 100% - add 30 24 54 100% - mem_binding 25 15 40 100% -------------------------------------------------------------