(** THIS FILE WAS AUTOMATICALLY GENERATED BY AENEAS *) (** [loops]: function definitions *) module Loops.Funs open Primitives include Loops.Types include Loops.Clauses #set-options "--z3rlimit 50 --fuel 1 --ifuel 1" (** [loops::sum] *) let rec sum_loop_fwd (max : u32) (i : u32) (s : u32) : Tot (result u32) (decreases (sum_decreases max i s)) = if i < max then begin match u32_add s i with | Fail e -> Fail e | Return s0 -> begin match u32_add i 1 with | Fail e -> Fail e | Return i0 -> sum_loop_fwd max i0 s0 end end else u32_mul s 2 (** [loops::sum] *) let sum_fwd (max : u32) : result u32 = sum_loop_fwd max 0 0 (** [loops::sum_with_mut_borrows] *) let rec sum_with_mut_borrows_loop_fwd (max : u32) (mi : u32) (ms : u32) : Tot (result u32) (decreases (sum_with_mut_borrows_decreases max mi ms)) = if mi < max then begin match u32_add ms mi with | Fail e -> Fail e | Return ms0 -> begin match u32_add mi 1 with | Fail e -> Fail e | Return mi0 -> sum_with_mut_borrows_loop_fwd max mi0 ms0 end end else u32_mul ms 2 (** [loops::sum_with_mut_borrows] *) let sum_with_mut_borrows_fwd (max : u32) : result u32 = sum_with_mut_borrows_loop_fwd max 0 0 (** [loops::sum_with_shared_borrows] *) let rec sum_with_shared_borrows_loop_fwd (max : u32) (i : u32) (s : u32) : Tot (result u32) (decreases (sum_with_shared_borrows_decreases max i s)) = if i < max then begin match u32_add i 1 with | Fail e -> Fail e | Return i0 -> begin match u32_add s i0 with | Fail e -> Fail e | Return s0 -> sum_with_shared_borrows_loop_fwd max i0 s0 end end else u32_mul s 2 (** [loops::sum_with_shared_borrows] *) let sum_with_shared_borrows_fwd (max : u32) : result u32 = sum_with_shared_borrows_loop_fwd max 0 0 (** [loops::list_nth_mut_loop] *) let rec list_nth_mut_loop_loop_fwd (t : Type0) (ls : list_t t) (i : u32) : Tot (result t) (decreases (list_nth_mut_loop_decreases t ls i)) = begin match ls with | ListCons x tl -> if i = 0 then Return x else begin match u32_sub i 1 with | Fail e -> Fail e | Return i0 -> list_nth_mut_loop_loop_fwd t tl i0 end | ListNil -> Fail Failure end (** [loops::list_nth_mut_loop] *) let list_nth_mut_loop_fwd (t : Type0) (ls : list_t t) (i : u32) : result t = list_nth_mut_loop_loop_fwd t ls i (** [loops::list_nth_mut_loop] *) let rec list_nth_mut_loop_loop_back (t : Type0) (ls : list_t t) (i : u32) (ret : t) : Tot (result (list_t t)) (decreases (list_nth_mut_loop_decreases t ls i)) = begin match ls with | ListCons x tl -> if i = 0 then Return (ListCons ret tl) else begin match u32_sub i 1 with | Fail e -> Fail e | Return i0 -> begin match list_nth_mut_loop_loop_back t tl i0 ret with | Fail e -> Fail e | Return l -> Return (ListCons x l) end end | ListNil -> Fail Failure end (** [loops::list_nth_mut_loop] *) let list_nth_mut_loop_back (t : Type0) (ls : list_t t) (i : u32) (ret : t) : result (list_t t) = list_nth_mut_loop_loop_back t ls i ret (** [loops::list_nth_shared_loop] *) let rec list_nth_shared_loop_loop_fwd (t : Type0) (ls : list_t t) (i : u32) : Tot (result t) (decreases (list_nth_shared_loop_decreases t ls i)) = begin match ls with | ListCons x tl -> if i = 0 then Return x else begin match u32_sub i 1 with | Fail e -> Fail e | Return i0 -> list_nth_shared_loop_loop_fwd t tl i0 end | ListNil -> Fail Failure end (** [loops::list_nth_shared_loop] *) let list_nth_shared_loop_fwd (t : Type0) (ls : list_t t) (i : u32) : result t = list_nth_shared_loop_loop_fwd t ls i (** [loops::list_nth_mut_loop_pair] *) let rec list_nth_mut_loop_pair_loop_fwd (t : Type0) (l : list_t t) (l0 : list_t t) (i : u32) : Tot (result (t & t)) (decreases (list_nth_mut_loop_pair_decreases t l l0 i)) = begin match l with | ListCons x0 tl0 -> begin match l0 with | ListCons x1 tl1 -> if i = 0 then Return (x0, x1) else begin match u32_sub i 1 with | Fail e -> Fail e | Return i0 -> list_nth_mut_loop_pair_loop_fwd t tl0 tl1 i0 end | ListNil -> Fail Failure end | ListNil -> Fail Failure end (** [loops::list_nth_mut_loop_pair] *) let list_nth_mut_loop_pair_fwd (t : Type0) (ls0 : list_t t) (ls1 : list_t t) (i : u32) : result (t & t) = list_nth_mut_loop_pair_loop_fwd t ls0 ls1 i (** [loops::list_nth_mut_loop_pair] *) let rec list_nth_mut_loop_pair_loop_back'a (t : Type0) (l : list_t t) (l0 : list_t t) (i : u32) (ret : t) : Tot (result (list_t t)) (decreases (list_nth_mut_loop_pair_decreases t l l0 i)) = begin match l with | ListCons x0 tl0 -> begin match l0 with | ListCons x1 tl1 -> if i = 0 then Return (ListCons ret tl0) else begin match u32_sub i 1 with | Fail e -> Fail e | Return i0 -> begin match list_nth_mut_loop_pair_loop_back'a t tl0 tl1 i0 ret with | Fail e -> Fail e | Return l1 -> Return (ListCons x0 l1) end end | ListNil -> Fail Failure end | ListNil -> Fail Failure end (** [loops::list_nth_mut_loop_pair] *) let list_nth_mut_loop_pair_back'a (t : Type0) (ls0 : list_t t) (ls1 : list_t t) (i : u32) (ret : t) : result (list_t t) = list_nth_mut_loop_pair_loop_back'a t ls0 ls1 i ret (** [loops::list_nth_mut_loop_pair] *) let rec list_nth_mut_loop_pair_loop_back'b (t : Type0) (l : list_t t) (l0 : list_t t) (i : u32) (ret : t) : Tot (result (list_t t)) (decreases (list_nth_mut_loop_pair_decreases t l l0 i)) = begin match l with | ListCons x0 tl0 -> begin match l0 with | ListCons x1 tl1 -> if i = 0 then Return (ListCons ret tl1) else begin match u32_sub i 1 with | Fail e -> Fail e | Return i0 -> begin match list_nth_mut_loop_pair_loop_back'b t tl0 tl1 i0 ret with | Fail e -> Fail e | Return l1 -> Return (ListCons x1 l1) end end | ListNil -> Fail Failure end | ListNil -> Fail Failure end (** [loops::list_nth_mut_loop_pair] *) let list_nth_mut_loop_pair_back'b (t : Type0) (ls0 : list_t t) (ls1 : list_t t) (i : u32) (ret : t) : result (list_t t) = list_nth_mut_loop_pair_loop_back'b t ls0 ls1 i ret (** [loops::list_nth_shared_loop_pair] *) let rec list_nth_shared_loop_pair_loop_fwd (t : Type0) (l : list_t t) (l0 : list_t t) (i : u32) : Tot (result (t & t)) (decreases (list_nth_shared_loop_pair_decreases t l l0 i)) = begin match l with | ListCons x0 tl0 -> begin match l0 with | ListCons x1 tl1 -> if i = 0 then Return (x0, x1) else begin match u32_sub i 1 with | Fail e -> Fail e | Return i0 -> list_nth_shared_loop_pair_loop_fwd t tl0 tl1 i0 end | ListNil -> Fail Failure end | ListNil -> Fail Failure end (** [loops::list_nth_shared_loop_pair] *) let list_nth_shared_loop_pair_fwd (t : Type0) (ls0 : list_t t) (ls1 : list_t t) (i : u32) : result (t & t) = list_nth_shared_loop_pair_loop_fwd t ls0 ls1 i (** [loops::list_nth_mut_loop_pair_merge] *) let rec list_nth_mut_loop_pair_merge_loop_fwd (t : Type0) (l : list_t t) (l0 : list_t t) (i : u32) : Tot (result (t & t)) (decreases (list_nth_mut_loop_pair_merge_decreases t l l0 i)) = begin match l with | ListCons x0 tl0 -> begin match l0 with | ListCons x1 tl1 -> if i = 0 then Return (x0, x1) else begin match u32_sub i 1 with | Fail e -> Fail e | Return i0 -> list_nth_mut_loop_pair_merge_loop_fwd t tl0 tl1 i0 end | ListNil -> Fail Failure end | ListNil -> Fail Failure end (** [loops::list_nth_mut_loop_pair_merge] *) let list_nth_mut_loop_pair_merge_fwd (t : Type0) (ls0 : list_t t) (ls1 : list_t t) (i : u32) : result (t & t) = list_nth_mut_loop_pair_merge_loop_fwd t ls0 ls1 i (** [loops::list_nth_mut_loop_pair_merge] *) let rec list_nth_mut_loop_pair_merge_loop_back (t : Type0) (l : list_t t) (l0 : list_t t) (i : u32) (ret : (t & t)) : Tot (result ((list_t t) & (list_t t))) (decreases (list_nth_mut_loop_pair_merge_decreases t l l0 i)) = begin match l with | ListCons x0 tl0 -> begin match l0 with | ListCons x1 tl1 -> if i = 0 then let (x, x2) = ret in Return (ListCons x tl0, ListCons x2 tl1) else begin match u32_sub i 1 with | Fail e -> Fail e | Return i0 -> begin match list_nth_mut_loop_pair_merge_loop_back t tl0 tl1 i0 ret with | Fail e -> Fail e | Return (l1, l2) -> Return (ListCons x0 l1, ListCons x1 l2) end end | ListNil -> Fail Failure end | ListNil -> Fail Failure end (** [loops::list_nth_mut_loop_pair_merge] *) let list_nth_mut_loop_pair_merge_back (t : Type0) (ls0 : list_t t) (ls1 : list_t t) (i : u32) (ret : (t & t)) : result ((list_t t) & (list_t t)) = list_nth_mut_loop_pair_merge_loop_back t ls0 ls1 i ret (** [loops::list_nth_shared_loop_pair_merge] *) let rec list_nth_shared_loop_pair_merge_loop_fwd (t : Type0) (l : list_t t) (l0 : list_t t) (i : u32) : Tot (result (t & t)) (decreases (list_nth_shared_loop_pair_merge_decreases t l l0 i)) = begin match l with | ListCons x0 tl0 -> begin match l0 with | ListCons x1 tl1 -> if i = 0 then Return (x0, x1) else begin match u32_sub i 1 with | Fail e -> Fail e | Return i0 -> list_nth_shared_loop_pair_merge_loop_fwd t tl0 tl1 i0 end | ListNil -> Fail Failure end | ListNil -> Fail Failure end (** [loops::list_nth_shared_loop_pair_merge] *) let list_nth_shared_loop_pair_merge_fwd (t : Type0) (ls0 : list_t t) (ls1 : list_t t) (i : u32) : result (t & t) = list_nth_shared_loop_pair_merge_loop_fwd t ls0 ls1 i (** [loops::list_nth_mut_shared_loop_pair] *) let rec list_nth_mut_shared_loop_pair_loop_fwd (t : Type0) (l : list_t t) (l0 : list_t t) (i : u32) : Tot (result (t & t)) (decreases (list_nth_mut_shared_loop_pair_decreases t l l0 i)) = begin match l with | ListCons x0 tl0 -> begin match l0 with | ListCons x1 tl1 -> if i = 0 then Return (x0, x1) else begin match u32_sub i 1 with | Fail e -> Fail e | Return i0 -> list_nth_mut_shared_loop_pair_loop_fwd t tl0 tl1 i0 end | ListNil -> Fail Failure end | ListNil -> Fail Failure end (** [loops::list_nth_mut_shared_loop_pair] *) let list_nth_mut_shared_loop_pair_fwd (t : Type0) (ls0 : list_t t) (ls1 : list_t t) (i : u32) : result (t & t) = list_nth_mut_shared_loop_pair_loop_fwd t ls0 ls1 i (** [loops::list_nth_mut_shared_loop_pair] *) let rec list_nth_mut_shared_loop_pair_loop_back (t : Type0) (l : list_t t) (l0 : list_t t) (i : u32) (ret : t) : Tot (result (list_t t)) (decreases (list_nth_mut_shared_loop_pair_decreases t l l0 i)) = begin match l with | ListCons x0 tl0 -> begin match l0 with | ListCons x1 tl1 -> if i = 0 then Return (ListCons ret tl0) else begin match u32_sub i 1 with | Fail e -> Fail e | Return i0 -> begin match list_nth_mut_shared_loop_pair_loop_back t tl0 tl1 i0 ret with | Fail e -> Fail e | Return l1 -> Return (ListCons x0 l1) end end | ListNil -> Fail Failure end | ListNil -> Fail Failure end (** [loops::list_nth_mut_shared_loop_pair] *) let list_nth_mut_shared_loop_pair_back (t : Type0) (ls0 : list_t t) (ls1 : list_t t) (i : u32) (ret : t) : result (list_t t) = list_nth_mut_shared_loop_pair_loop_back t ls0 ls1 i ret (** [loops::list_nth_mut_shared_loop_pair_merge] *) let rec list_nth_mut_shared_loop_pair_merge_loop_fwd (t : Type0) (l : list_t t) (l0 : list_t t) (i : u32) : Tot (result (t & t)) (decreases (list_nth_mut_shared_loop_pair_merge_decreases t l l0 i)) = begin match l with | ListCons x0 tl0 -> begin match l0 with | ListCons x1 tl1 -> if i = 0 then Return (x0, x1) else begin match u32_sub i 1 with | Fail e -> Fail e | Return i0 -> list_nth_mut_shared_loop_pair_merge_loop_fwd t tl0 tl1 i0 end | ListNil -> Fail Failure end | ListNil -> Fail Failure end (** [loops::list_nth_mut_shared_loop_pair_merge] *) let list_nth_mut_shared_loop_pair_merge_fwd (t : Type0) (ls0 : list_t t) (ls1 : list_t t) (i : u32) : result (t & t) = list_nth_mut_shared_loop_pair_merge_loop_fwd t ls0 ls1 i (** [loops::list_nth_mut_shared_loop_pair_merge] *) let rec list_nth_mut_shared_loop_pair_merge_loop_back (t : Type0) (l : list_t t) (l0 : list_t t) (i : u32) (ret : t) : Tot (result (list_t t)) (decreases (list_nth_mut_shared_loop_pair_merge_decreases t l l0 i)) = begin match l with | ListCons x0 tl0 -> begin match l0 with | ListCons x1 tl1 -> if i = 0 then Return (ListCons ret tl0) else begin match u32_sub i 1 with | Fail e -> Fail e | Return i0 -> begin match list_nth_mut_shared_loop_pair_merge_loop_back t tl0 tl1 i0 ret with | Fail e -> Fail e | Return l1 -> Return (ListCons x0 l1) end end | ListNil -> Fail Failure end | ListNil -> Fail Failure end (** [loops::list_nth_mut_shared_loop_pair_merge] *) let list_nth_mut_shared_loop_pair_merge_back (t : Type0) (ls0 : list_t t) (ls1 : list_t t) (i : u32) (ret : t) : result (list_t t) = list_nth_mut_shared_loop_pair_merge_loop_back t ls0 ls1 i ret (** [loops::list_nth_shared_mut_loop_pair] *) let rec list_nth_shared_mut_loop_pair_loop_fwd (t : Type0) (l : list_t t) (l0 : list_t t) (i : u32) : Tot (result (t & t)) (decreases (list_nth_shared_mut_loop_pair_decreases t l l0 i)) = begin match l with | ListCons x0 tl0 -> begin match l0 with | ListCons x1 tl1 -> if i = 0 then Return (x0, x1) else begin match u32_sub i 1 with | Fail e -> Fail e | Return i0 -> list_nth_shared_mut_loop_pair_loop_fwd t tl0 tl1 i0 end | ListNil -> Fail Failure end | ListNil -> Fail Failure end (** [loops::list_nth_shared_mut_loop_pair] *) let list_nth_shared_mut_loop_pair_fwd (t : Type0) (ls0 : list_t t) (ls1 : list_t t) (i : u32) : result (t & t) = list_nth_shared_mut_loop_pair_loop_fwd t ls0 ls1 i (** [loops::list_nth_shared_mut_loop_pair] *) let rec list_nth_shared_mut_loop_pair_loop_back (t : Type0) (l : list_t t) (l0 : list_t t) (i : u32) (ret : t) : Tot (result (list_t t)) (decreases (list_nth_shared_mut_loop_pair_decreases t l l0 i)) = begin match l with | ListCons x0 tl0 -> begin match l0 with | ListCons x1 tl1 -> if i = 0 then Return (ListCons ret tl1) else begin match u32_sub i 1 with | Fail e -> Fail e | Return i0 -> begin match list_nth_shared_mut_loop_pair_loop_back t tl0 tl1 i0 ret with | Fail e -> Fail e | Return l1 -> Return (ListCons x1 l1) end end | ListNil -> Fail Failure end | ListNil -> Fail Failure end (** [loops::list_nth_shared_mut_loop_pair] *) let list_nth_shared_mut_loop_pair_back (t : Type0) (ls0 : list_t t) (ls1 : list_t t) (i : u32) (ret : t) : result (list_t t) = list_nth_shared_mut_loop_pair_loop_back t ls0 ls1 i ret (** [loops::list_nth_shared_mut_loop_pair_merge] *) let rec list_nth_shared_mut_loop_pair_merge_loop_fwd (t : Type0) (l : list_t t) (l0 : list_t t) (i : u32) : Tot (result (t & t)) (decreases (list_nth_shared_mut_loop_pair_merge_decreases t l l0 i)) = begin match l with | ListCons x0 tl0 -> begin match l0 with | ListCons x1 tl1 -> if i = 0 then Return (x0, x1) else begin match u32_sub i 1 with | Fail e -> Fail e | Return i0 -> list_nth_shared_mut_loop_pair_merge_loop_fwd t tl0 tl1 i0 end | ListNil -> Fail Failure end | ListNil -> Fail Failure end (** [loops::list_nth_shared_mut_loop_pair_merge] *) let list_nth_shared_mut_loop_pair_merge_fwd (t : Type0) (ls0 : list_t t) (ls1 : list_t t) (i : u32) : result (t & t) = list_nth_shared_mut_loop_pair_merge_loop_fwd t ls0 ls1 i (** [loops::list_nth_shared_mut_loop_pair_merge] *) let rec list_nth_shared_mut_loop_pair_merge_loop_back (t : Type0) (l : list_t t) (l0 : list_t t) (i : u32) (ret : t) : Tot (result (list_t t)) (decreases (list_nth_shared_mut_loop_pair_merge_decreases t l l0 i)) = begin match l with | ListCons x0 tl0 -> begin match l0 with | ListCons x1 tl1 -> if i = 0 then Return (ListCons ret tl1) else begin match u32_sub i 1 with | Fail e -> Fail e | Return i0 -> begin match list_nth_shared_mut_loop_pair_merge_loop_back t tl0 tl1 i0 ret with | Fail e -> Fail e | Return l1 -> Return (ListCons x1 l1) end end | ListNil -> Fail Failure end | ListNil -> Fail Failure end (** [loops::list_nth_shared_mut_loop_pair_merge] *) let list_nth_shared_mut_loop_pair_merge_back (t : Type0) (ls0 : list_t t) (ls1 : list_t t) (i : u32) (ret : t) : result (list_t t) = list_nth_shared_mut_loop_pair_merge_loop_back t ls0 ls1 i ret