Local Open Scope logic.
Instance CompSpecs : compspecs.
(* a list initialized with 0 except its last i elements *)
Definition list_zero_except (i : Z) (size : Z) : list val :=
(list_repeat (Z.to_nat (size-i)) (Vint Int.zero)) ++ (list_repeat (Z.to_nat i) Vundef).

(* Specifications: *)
Lemma list_zero_except_zero: forall size,
list_zero_except 0 size = list_repeat (Z.to_nat size) (Vint Int.zero).
Lemma list_zero_except_all: forall size,
list_zero_except size size = default_val (tarray tuchar size).
(* should be in client_lemmas.v TODO floyd *)
Lemma typed_false_tuint:
forall v, typed_false tuint v -> v = nullval.
Lemma typed_false_tuint_Vint:
forall v, typed_false tuint (Vint v) -> v = Int.zero.
(* TODO add to library *)
(* TODO generalize: special case of (replace 0 by m) *)
Lemma Z_repr_0_unsigned: forall n,
0 <= n <= Int.max_unsigned ->
Int.repr n = Int.zero ->
n = 0.
Lemma body_zeroize: semax_body Vprog Gprog f_mbedtls_zeroize zeroize_spec.
Lemma body_aes_free: semax_body Vprog Gprog f_mbedtls_aes_free aes_free_spec.