Definition block_data_order_loop2 :=
   nth 1 (loops (fn_body f_sha256_block_data_order)) Sskip.Fixpoint Xarray' (b: list int) (i k: nat) : list int :=
 match k with
 | O => nil
 | S k' => W (nthi b) (Z.of_nat i - 16 + (16-(Z.of_nat k)- Z.of_nat i) mod 16) ::
                 Xarray' b i k'
 end.Definition Xarray (b: list int) (i: nat) := Xarray' b i 16.

(* Specifications: *)
Lemma Xarray_simpl: forall b, Zlength b = 16 -> Xarray b 16 = b.
Lemma length_Xarray: forall b i, Zlength (Xarray b i) = 16.
Lemma nth_Xarray: forall b i k, (0 <= k < 16)%Z -> nthi (Xarray b i) k = W (nthi b) (Z.of_nat i - 16 + (k- Z.of_nat i) mod 16)%Z .
Lemma extract_from_b: forall b i n, Zlength b = 16 -> (16 <= i < 64) -> (0 <= n < 16) -> nthi (Xarray b (Z.to_nat i)) ((i + n) mod 16) = W (nthi b) (i - 16 + n).
Lemma Xarray_update: forall i b, Zlength b = LBLOCKz -> 16 <= i < 64 -> upd_Znth (i mod 16) (map Vint (Xarray b (Z.to_nat i))) (Vint (W (nthi b) i)) = map Vint (Xarray b (Z.to_nat i+1)).
Lemma W_unfold: forall i b, 16 <= i < 64 -> W (nthi b) (i) = Int.add (W (nthi b) (i - 16 + 0)) (Int.add (Int.add (sigma_0 (W (nthi b) (i - 16 + 1))) (sigma_1 (W (nthi b) (i - 16 + 14)))) (W (nthi b) (i - 16 + 9))).