summaryrefslogtreecommitdiff
path: root/tests/hol4/loops/loops_FunsTheory.sig
diff options
context:
space:
mode:
Diffstat (limited to 'tests/hol4/loops/loops_FunsTheory.sig')
-rw-r--r--tests/hol4/loops/loops_FunsTheory.sig731
1 files changed, 731 insertions, 0 deletions
diff --git a/tests/hol4/loops/loops_FunsTheory.sig b/tests/hol4/loops/loops_FunsTheory.sig
new file mode 100644
index 00000000..63fe56c9
--- /dev/null
+++ b/tests/hol4/loops/loops_FunsTheory.sig
@@ -0,0 +1,731 @@
+signature loops_FunsTheory =
+sig
+ type thm = Thm.thm
+
+ (* Definitions *)
+ val clear_fwd_back_def : thm
+ val clear_loop_fwd_back_def : thm
+ val get_elem_mut_back_def : thm
+ val get_elem_mut_fwd_def : thm
+ val get_elem_mut_loop_back_def : thm
+ val get_elem_mut_loop_fwd_def : thm
+ val get_elem_shared_fwd_def : thm
+ val get_elem_shared_loop_fwd_def : thm
+ val id_mut_back_def : thm
+ val id_mut_fwd_def : thm
+ val id_shared_fwd_def : thm
+ val list_mem_fwd_def : thm
+ val list_mem_loop_fwd_def : thm
+ val list_nth_mut_loop_back_def : thm
+ val list_nth_mut_loop_fwd_def : thm
+ val list_nth_mut_loop_loop_back_def : thm
+ val list_nth_mut_loop_loop_fwd_def : thm
+ val list_nth_mut_loop_pair_back'a_def : thm
+ val list_nth_mut_loop_pair_back'b_def : thm
+ val list_nth_mut_loop_pair_fwd_def : thm
+ val list_nth_mut_loop_pair_loop_back'a_def : thm
+ val list_nth_mut_loop_pair_loop_back'b_def : thm
+ val list_nth_mut_loop_pair_loop_fwd_def : thm
+ val list_nth_mut_loop_pair_merge_back_def : thm
+ val list_nth_mut_loop_pair_merge_fwd_def : thm
+ val list_nth_mut_loop_pair_merge_loop_back_def : thm
+ val list_nth_mut_loop_pair_merge_loop_fwd_def : thm
+ val list_nth_mut_loop_with_id_back_def : thm
+ val list_nth_mut_loop_with_id_fwd_def : thm
+ val list_nth_mut_loop_with_id_loop_back_def : thm
+ val list_nth_mut_loop_with_id_loop_fwd_def : thm
+ val list_nth_mut_shared_loop_pair_back_def : thm
+ val list_nth_mut_shared_loop_pair_fwd_def : thm
+ val list_nth_mut_shared_loop_pair_loop_back_def : thm
+ val list_nth_mut_shared_loop_pair_loop_fwd_def : thm
+ val list_nth_mut_shared_loop_pair_merge_back_def : thm
+ val list_nth_mut_shared_loop_pair_merge_fwd_def : thm
+ val list_nth_mut_shared_loop_pair_merge_loop_back_def : thm
+ val list_nth_mut_shared_loop_pair_merge_loop_fwd_def : thm
+ val list_nth_shared_loop_fwd_def : thm
+ val list_nth_shared_loop_loop_fwd_def : thm
+ val list_nth_shared_loop_pair_fwd_def : thm
+ val list_nth_shared_loop_pair_loop_fwd_def : thm
+ val list_nth_shared_loop_pair_merge_fwd_def : thm
+ val list_nth_shared_loop_pair_merge_loop_fwd_def : thm
+ val list_nth_shared_loop_with_id_fwd_def : thm
+ val list_nth_shared_loop_with_id_loop_fwd_def : thm
+ val list_nth_shared_mut_loop_pair_back_def : thm
+ val list_nth_shared_mut_loop_pair_fwd_def : thm
+ val list_nth_shared_mut_loop_pair_loop_back_def : thm
+ val list_nth_shared_mut_loop_pair_loop_fwd_def : thm
+ val list_nth_shared_mut_loop_pair_merge_back_def : thm
+ val list_nth_shared_mut_loop_pair_merge_fwd_def : thm
+ val list_nth_shared_mut_loop_pair_merge_loop_back_def : thm
+ val list_nth_shared_mut_loop_pair_merge_loop_fwd_def : thm
+ val sum_fwd_def : thm
+ val sum_loop_fwd_def : thm
+ val sum_with_mut_borrows_fwd_def : thm
+ val sum_with_mut_borrows_loop_fwd_def : thm
+ val sum_with_shared_borrows_fwd_def : thm
+ val sum_with_shared_borrows_loop_fwd_def : thm
+
+ val loops_Funs_grammars : type_grammar.grammar * term_grammar.grammar
+(*
+ [loops_Types] Parent theory of "loops_Funs"
+
+ [clear_fwd_back_def] Definition
+
+ ⊢ ∀v. clear_fwd_back v = clear_loop_fwd_back v (int_to_usize 0)
+
+ [clear_loop_fwd_back_def] Definition
+
+ ⊢ ∀v i.
+ clear_loop_fwd_back v i =
+ (let
+ i0 = vec_len v
+ in
+ if usize_lt i i0 then
+ do
+ i1 <- usize_add i (int_to_usize 1);
+ v0 <- vec_index_mut_back v i (int_to_u32 0);
+ clear_loop_fwd_back v0 i1
+ od
+ else Return v)
+
+ [get_elem_mut_back_def] Definition
+
+ ⊢ ∀slots x ret.
+ get_elem_mut_back slots x ret =
+ do
+ l <- vec_index_mut_fwd slots (int_to_usize 0);
+ l0 <- get_elem_mut_loop_back x l ret;
+ vec_index_mut_back slots (int_to_usize 0) l0
+ od
+
+ [get_elem_mut_fwd_def] Definition
+
+ ⊢ ∀slots x.
+ get_elem_mut_fwd slots x =
+ do
+ l <- vec_index_mut_fwd slots (int_to_usize 0);
+ get_elem_mut_loop_fwd x l
+ od
+
+ [get_elem_mut_loop_back_def] Definition
+
+ ⊢ ∀x ls ret.
+ get_elem_mut_loop_back x ls ret =
+ case ls of
+ ListCons y tl =>
+ if y = x then Return (ListCons ret tl)
+ else
+ do
+ tl0 <- get_elem_mut_loop_back x tl ret;
+ Return (ListCons y tl0)
+ od
+ | ListNil => Fail Failure
+
+ [get_elem_mut_loop_fwd_def] Definition
+
+ ⊢ ∀x ls.
+ get_elem_mut_loop_fwd x ls =
+ case ls of
+ ListCons y tl =>
+ if y = x then Return y else get_elem_mut_loop_fwd x tl
+ | ListNil => Fail Failure
+
+ [get_elem_shared_fwd_def] Definition
+
+ ⊢ ∀slots x.
+ get_elem_shared_fwd slots x =
+ do
+ l <- vec_index_fwd slots (int_to_usize 0);
+ get_elem_shared_loop_fwd x l
+ od
+
+ [get_elem_shared_loop_fwd_def] Definition
+
+ ⊢ ∀x ls.
+ get_elem_shared_loop_fwd x ls =
+ case ls of
+ ListCons y tl =>
+ if y = x then Return y else get_elem_shared_loop_fwd x tl
+ | ListNil => Fail Failure
+
+ [id_mut_back_def] Definition
+
+ ⊢ ∀ls ret. id_mut_back ls ret = Return ret
+
+ [id_mut_fwd_def] Definition
+
+ ⊢ ∀ls. id_mut_fwd ls = Return ls
+
+ [id_shared_fwd_def] Definition
+
+ ⊢ ∀ls. id_shared_fwd ls = Return ls
+
+ [list_mem_fwd_def] Definition
+
+ ⊢ ∀x ls. list_mem_fwd x ls = list_mem_loop_fwd x ls
+
+ [list_mem_loop_fwd_def] Definition
+
+ ⊢ ∀x ls.
+ list_mem_loop_fwd x ls =
+ case ls of
+ ListCons y tl =>
+ if y = x then Return T else list_mem_loop_fwd x tl
+ | ListNil => Return F
+
+ [list_nth_mut_loop_back_def] Definition
+
+ ⊢ ∀ls i ret.
+ list_nth_mut_loop_back ls i ret =
+ list_nth_mut_loop_loop_back ls i ret
+
+ [list_nth_mut_loop_fwd_def] Definition
+
+ ⊢ ∀ls i. list_nth_mut_loop_fwd ls i = list_nth_mut_loop_loop_fwd ls i
+
+ [list_nth_mut_loop_loop_back_def] Definition
+
+ ⊢ ∀ls i ret.
+ list_nth_mut_loop_loop_back ls i ret =
+ case ls of
+ ListCons x tl =>
+ if i = int_to_u32 0 then Return (ListCons ret tl)
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ tl0 <- list_nth_mut_loop_loop_back tl i0 ret;
+ Return (ListCons x tl0)
+ od
+ | ListNil => Fail Failure
+
+ [list_nth_mut_loop_loop_fwd_def] Definition
+
+ ⊢ ∀ls i.
+ list_nth_mut_loop_loop_fwd ls i =
+ case ls of
+ ListCons x tl =>
+ if i = int_to_u32 0 then Return x
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ list_nth_mut_loop_loop_fwd tl i0
+ od
+ | ListNil => Fail Failure
+
+ [list_nth_mut_loop_pair_back'a_def] Definition
+
+ ⊢ ∀ls0 ls1 i ret.
+ list_nth_mut_loop_pair_back'a ls0 ls1 i ret =
+ list_nth_mut_loop_pair_loop_back'a ls0 ls1 i ret
+
+ [list_nth_mut_loop_pair_back'b_def] Definition
+
+ ⊢ ∀ls0 ls1 i ret.
+ list_nth_mut_loop_pair_back'b ls0 ls1 i ret =
+ list_nth_mut_loop_pair_loop_back'b ls0 ls1 i ret
+
+ [list_nth_mut_loop_pair_fwd_def] Definition
+
+ ⊢ ∀ls0 ls1 i.
+ list_nth_mut_loop_pair_fwd ls0 ls1 i =
+ list_nth_mut_loop_pair_loop_fwd ls0 ls1 i
+
+ [list_nth_mut_loop_pair_loop_back'a_def] Definition
+
+ ⊢ ∀ls0 ls1 i ret.
+ list_nth_mut_loop_pair_loop_back'a ls0 ls1 i ret =
+ case ls0 of
+ ListCons x0 tl0 =>
+ (case ls1 of
+ ListCons x1 tl1 =>
+ if i = int_to_u32 0 then Return (ListCons ret tl0)
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ tl00 <-
+ list_nth_mut_loop_pair_loop_back'a tl0 tl1 i0 ret;
+ Return (ListCons x0 tl00)
+ od
+ | ListNil => Fail Failure)
+ | ListNil => Fail Failure
+
+ [list_nth_mut_loop_pair_loop_back'b_def] Definition
+
+ ⊢ ∀ls0 ls1 i ret.
+ list_nth_mut_loop_pair_loop_back'b ls0 ls1 i ret =
+ case ls0 of
+ ListCons x0 tl0 =>
+ (case ls1 of
+ ListCons x1 tl1 =>
+ if i = int_to_u32 0 then Return (ListCons ret tl1)
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ tl10 <-
+ list_nth_mut_loop_pair_loop_back'b tl0 tl1 i0 ret;
+ Return (ListCons x1 tl10)
+ od
+ | ListNil => Fail Failure)
+ | ListNil => Fail Failure
+
+ [list_nth_mut_loop_pair_loop_fwd_def] Definition
+
+ ⊢ ∀ls0 ls1 i.
+ list_nth_mut_loop_pair_loop_fwd ls0 ls1 i =
+ case ls0 of
+ ListCons x0 tl0 =>
+ (case ls1 of
+ ListCons x1 tl1 =>
+ if i = int_to_u32 0 then Return (x0,x1)
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ list_nth_mut_loop_pair_loop_fwd tl0 tl1 i0
+ od
+ | ListNil => Fail Failure)
+ | ListNil => Fail Failure
+
+ [list_nth_mut_loop_pair_merge_back_def] Definition
+
+ ⊢ ∀ls0 ls1 i ret.
+ list_nth_mut_loop_pair_merge_back ls0 ls1 i ret =
+ list_nth_mut_loop_pair_merge_loop_back ls0 ls1 i ret
+
+ [list_nth_mut_loop_pair_merge_fwd_def] Definition
+
+ ⊢ ∀ls0 ls1 i.
+ list_nth_mut_loop_pair_merge_fwd ls0 ls1 i =
+ list_nth_mut_loop_pair_merge_loop_fwd ls0 ls1 i
+
+ [list_nth_mut_loop_pair_merge_loop_back_def] Definition
+
+ ⊢ ∀ls0 ls1 i ret.
+ list_nth_mut_loop_pair_merge_loop_back ls0 ls1 i ret =
+ case ls0 of
+ ListCons x0 tl0 =>
+ (case ls1 of
+ ListCons x1 tl1 =>
+ if i = int_to_u32 0 then
+ (let
+ (t,t0) = ret
+ in
+ Return (ListCons t tl0,ListCons t0 tl1))
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ (tl00,tl10) <-
+ list_nth_mut_loop_pair_merge_loop_back tl0 tl1 i0
+ ret;
+ Return (ListCons x0 tl00,ListCons x1 tl10)
+ od
+ | ListNil => Fail Failure)
+ | ListNil => Fail Failure
+
+ [list_nth_mut_loop_pair_merge_loop_fwd_def] Definition
+
+ ⊢ ∀ls0 ls1 i.
+ list_nth_mut_loop_pair_merge_loop_fwd ls0 ls1 i =
+ case ls0 of
+ ListCons x0 tl0 =>
+ (case ls1 of
+ ListCons x1 tl1 =>
+ if i = int_to_u32 0 then Return (x0,x1)
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ list_nth_mut_loop_pair_merge_loop_fwd tl0 tl1 i0
+ od
+ | ListNil => Fail Failure)
+ | ListNil => Fail Failure
+
+ [list_nth_mut_loop_with_id_back_def] Definition
+
+ ⊢ ∀ls i ret.
+ list_nth_mut_loop_with_id_back ls i ret =
+ do
+ ls0 <- id_mut_fwd ls;
+ l <- list_nth_mut_loop_with_id_loop_back i ls0 ret;
+ id_mut_back ls l
+ od
+
+ [list_nth_mut_loop_with_id_fwd_def] Definition
+
+ ⊢ ∀ls i.
+ list_nth_mut_loop_with_id_fwd ls i =
+ do
+ ls0 <- id_mut_fwd ls;
+ list_nth_mut_loop_with_id_loop_fwd i ls0
+ od
+
+ [list_nth_mut_loop_with_id_loop_back_def] Definition
+
+ ⊢ ∀i ls ret.
+ list_nth_mut_loop_with_id_loop_back i ls ret =
+ case ls of
+ ListCons x tl =>
+ if i = int_to_u32 0 then Return (ListCons ret tl)
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ tl0 <- list_nth_mut_loop_with_id_loop_back i0 tl ret;
+ Return (ListCons x tl0)
+ od
+ | ListNil => Fail Failure
+
+ [list_nth_mut_loop_with_id_loop_fwd_def] Definition
+
+ ⊢ ∀i ls.
+ list_nth_mut_loop_with_id_loop_fwd i ls =
+ case ls of
+ ListCons x tl =>
+ if i = int_to_u32 0 then Return x
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ list_nth_mut_loop_with_id_loop_fwd i0 tl
+ od
+ | ListNil => Fail Failure
+
+ [list_nth_mut_shared_loop_pair_back_def] Definition
+
+ ⊢ ∀ls0 ls1 i ret.
+ list_nth_mut_shared_loop_pair_back ls0 ls1 i ret =
+ list_nth_mut_shared_loop_pair_loop_back ls0 ls1 i ret
+
+ [list_nth_mut_shared_loop_pair_fwd_def] Definition
+
+ ⊢ ∀ls0 ls1 i.
+ list_nth_mut_shared_loop_pair_fwd ls0 ls1 i =
+ list_nth_mut_shared_loop_pair_loop_fwd ls0 ls1 i
+
+ [list_nth_mut_shared_loop_pair_loop_back_def] Definition
+
+ ⊢ ∀ls0 ls1 i ret.
+ list_nth_mut_shared_loop_pair_loop_back ls0 ls1 i ret =
+ case ls0 of
+ ListCons x0 tl0 =>
+ (case ls1 of
+ ListCons x1 tl1 =>
+ if i = int_to_u32 0 then Return (ListCons ret tl0)
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ tl00 <-
+ list_nth_mut_shared_loop_pair_loop_back tl0 tl1 i0
+ ret;
+ Return (ListCons x0 tl00)
+ od
+ | ListNil => Fail Failure)
+ | ListNil => Fail Failure
+
+ [list_nth_mut_shared_loop_pair_loop_fwd_def] Definition
+
+ ⊢ ∀ls0 ls1 i.
+ list_nth_mut_shared_loop_pair_loop_fwd ls0 ls1 i =
+ case ls0 of
+ ListCons x0 tl0 =>
+ (case ls1 of
+ ListCons x1 tl1 =>
+ if i = int_to_u32 0 then Return (x0,x1)
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ list_nth_mut_shared_loop_pair_loop_fwd tl0 tl1 i0
+ od
+ | ListNil => Fail Failure)
+ | ListNil => Fail Failure
+
+ [list_nth_mut_shared_loop_pair_merge_back_def] Definition
+
+ ⊢ ∀ls0 ls1 i ret.
+ list_nth_mut_shared_loop_pair_merge_back ls0 ls1 i ret =
+ list_nth_mut_shared_loop_pair_merge_loop_back ls0 ls1 i ret
+
+ [list_nth_mut_shared_loop_pair_merge_fwd_def] Definition
+
+ ⊢ ∀ls0 ls1 i.
+ list_nth_mut_shared_loop_pair_merge_fwd ls0 ls1 i =
+ list_nth_mut_shared_loop_pair_merge_loop_fwd ls0 ls1 i
+
+ [list_nth_mut_shared_loop_pair_merge_loop_back_def] Definition
+
+ ⊢ ∀ls0 ls1 i ret.
+ list_nth_mut_shared_loop_pair_merge_loop_back ls0 ls1 i ret =
+ case ls0 of
+ ListCons x0 tl0 =>
+ (case ls1 of
+ ListCons x1 tl1 =>
+ if i = int_to_u32 0 then Return (ListCons ret tl0)
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ tl00 <-
+ list_nth_mut_shared_loop_pair_merge_loop_back tl0
+ tl1 i0 ret;
+ Return (ListCons x0 tl00)
+ od
+ | ListNil => Fail Failure)
+ | ListNil => Fail Failure
+
+ [list_nth_mut_shared_loop_pair_merge_loop_fwd_def] Definition
+
+ ⊢ ∀ls0 ls1 i.
+ list_nth_mut_shared_loop_pair_merge_loop_fwd ls0 ls1 i =
+ case ls0 of
+ ListCons x0 tl0 =>
+ (case ls1 of
+ ListCons x1 tl1 =>
+ if i = int_to_u32 0 then Return (x0,x1)
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ list_nth_mut_shared_loop_pair_merge_loop_fwd tl0 tl1
+ i0
+ od
+ | ListNil => Fail Failure)
+ | ListNil => Fail Failure
+
+ [list_nth_shared_loop_fwd_def] Definition
+
+ ⊢ ∀ls i.
+ list_nth_shared_loop_fwd ls i =
+ list_nth_shared_loop_loop_fwd ls i
+
+ [list_nth_shared_loop_loop_fwd_def] Definition
+
+ ⊢ ∀ls i.
+ list_nth_shared_loop_loop_fwd ls i =
+ case ls of
+ ListCons x tl =>
+ if i = int_to_u32 0 then Return x
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ list_nth_shared_loop_loop_fwd tl i0
+ od
+ | ListNil => Fail Failure
+
+ [list_nth_shared_loop_pair_fwd_def] Definition
+
+ ⊢ ∀ls0 ls1 i.
+ list_nth_shared_loop_pair_fwd ls0 ls1 i =
+ list_nth_shared_loop_pair_loop_fwd ls0 ls1 i
+
+ [list_nth_shared_loop_pair_loop_fwd_def] Definition
+
+ ⊢ ∀ls0 ls1 i.
+ list_nth_shared_loop_pair_loop_fwd ls0 ls1 i =
+ case ls0 of
+ ListCons x0 tl0 =>
+ (case ls1 of
+ ListCons x1 tl1 =>
+ if i = int_to_u32 0 then Return (x0,x1)
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ list_nth_shared_loop_pair_loop_fwd tl0 tl1 i0
+ od
+ | ListNil => Fail Failure)
+ | ListNil => Fail Failure
+
+ [list_nth_shared_loop_pair_merge_fwd_def] Definition
+
+ ⊢ ∀ls0 ls1 i.
+ list_nth_shared_loop_pair_merge_fwd ls0 ls1 i =
+ list_nth_shared_loop_pair_merge_loop_fwd ls0 ls1 i
+
+ [list_nth_shared_loop_pair_merge_loop_fwd_def] Definition
+
+ ⊢ ∀ls0 ls1 i.
+ list_nth_shared_loop_pair_merge_loop_fwd ls0 ls1 i =
+ case ls0 of
+ ListCons x0 tl0 =>
+ (case ls1 of
+ ListCons x1 tl1 =>
+ if i = int_to_u32 0 then Return (x0,x1)
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ list_nth_shared_loop_pair_merge_loop_fwd tl0 tl1 i0
+ od
+ | ListNil => Fail Failure)
+ | ListNil => Fail Failure
+
+ [list_nth_shared_loop_with_id_fwd_def] Definition
+
+ ⊢ ∀ls i.
+ list_nth_shared_loop_with_id_fwd ls i =
+ do
+ ls0 <- id_shared_fwd ls;
+ list_nth_shared_loop_with_id_loop_fwd i ls0
+ od
+
+ [list_nth_shared_loop_with_id_loop_fwd_def] Definition
+
+ ⊢ ∀i ls.
+ list_nth_shared_loop_with_id_loop_fwd i ls =
+ case ls of
+ ListCons x tl =>
+ if i = int_to_u32 0 then Return x
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ list_nth_shared_loop_with_id_loop_fwd i0 tl
+ od
+ | ListNil => Fail Failure
+
+ [list_nth_shared_mut_loop_pair_back_def] Definition
+
+ ⊢ ∀ls0 ls1 i ret.
+ list_nth_shared_mut_loop_pair_back ls0 ls1 i ret =
+ list_nth_shared_mut_loop_pair_loop_back ls0 ls1 i ret
+
+ [list_nth_shared_mut_loop_pair_fwd_def] Definition
+
+ ⊢ ∀ls0 ls1 i.
+ list_nth_shared_mut_loop_pair_fwd ls0 ls1 i =
+ list_nth_shared_mut_loop_pair_loop_fwd ls0 ls1 i
+
+ [list_nth_shared_mut_loop_pair_loop_back_def] Definition
+
+ ⊢ ∀ls0 ls1 i ret.
+ list_nth_shared_mut_loop_pair_loop_back ls0 ls1 i ret =
+ case ls0 of
+ ListCons x0 tl0 =>
+ (case ls1 of
+ ListCons x1 tl1 =>
+ if i = int_to_u32 0 then Return (ListCons ret tl1)
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ tl10 <-
+ list_nth_shared_mut_loop_pair_loop_back tl0 tl1 i0
+ ret;
+ Return (ListCons x1 tl10)
+ od
+ | ListNil => Fail Failure)
+ | ListNil => Fail Failure
+
+ [list_nth_shared_mut_loop_pair_loop_fwd_def] Definition
+
+ ⊢ ∀ls0 ls1 i.
+ list_nth_shared_mut_loop_pair_loop_fwd ls0 ls1 i =
+ case ls0 of
+ ListCons x0 tl0 =>
+ (case ls1 of
+ ListCons x1 tl1 =>
+ if i = int_to_u32 0 then Return (x0,x1)
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ list_nth_shared_mut_loop_pair_loop_fwd tl0 tl1 i0
+ od
+ | ListNil => Fail Failure)
+ | ListNil => Fail Failure
+
+ [list_nth_shared_mut_loop_pair_merge_back_def] Definition
+
+ ⊢ ∀ls0 ls1 i ret.
+ list_nth_shared_mut_loop_pair_merge_back ls0 ls1 i ret =
+ list_nth_shared_mut_loop_pair_merge_loop_back ls0 ls1 i ret
+
+ [list_nth_shared_mut_loop_pair_merge_fwd_def] Definition
+
+ ⊢ ∀ls0 ls1 i.
+ list_nth_shared_mut_loop_pair_merge_fwd ls0 ls1 i =
+ list_nth_shared_mut_loop_pair_merge_loop_fwd ls0 ls1 i
+
+ [list_nth_shared_mut_loop_pair_merge_loop_back_def] Definition
+
+ ⊢ ∀ls0 ls1 i ret.
+ list_nth_shared_mut_loop_pair_merge_loop_back ls0 ls1 i ret =
+ case ls0 of
+ ListCons x0 tl0 =>
+ (case ls1 of
+ ListCons x1 tl1 =>
+ if i = int_to_u32 0 then Return (ListCons ret tl1)
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ tl10 <-
+ list_nth_shared_mut_loop_pair_merge_loop_back tl0
+ tl1 i0 ret;
+ Return (ListCons x1 tl10)
+ od
+ | ListNil => Fail Failure)
+ | ListNil => Fail Failure
+
+ [list_nth_shared_mut_loop_pair_merge_loop_fwd_def] Definition
+
+ ⊢ ∀ls0 ls1 i.
+ list_nth_shared_mut_loop_pair_merge_loop_fwd ls0 ls1 i =
+ case ls0 of
+ ListCons x0 tl0 =>
+ (case ls1 of
+ ListCons x1 tl1 =>
+ if i = int_to_u32 0 then Return (x0,x1)
+ else
+ do
+ i0 <- u32_sub i (int_to_u32 1);
+ list_nth_shared_mut_loop_pair_merge_loop_fwd tl0 tl1
+ i0
+ od
+ | ListNil => Fail Failure)
+ | ListNil => Fail Failure
+
+ [sum_fwd_def] Definition
+
+ ⊢ ∀max. sum_fwd max = sum_loop_fwd max (int_to_u32 0) (int_to_u32 0)
+
+ [sum_loop_fwd_def] Definition
+
+ ⊢ ∀max i s.
+ sum_loop_fwd max i s =
+ if u32_lt i max then
+ do
+ s0 <- u32_add s i;
+ i0 <- u32_add i (int_to_u32 1);
+ sum_loop_fwd max i0 s0
+ od
+ else u32_mul s (int_to_u32 2)
+
+ [sum_with_mut_borrows_fwd_def] Definition
+
+ ⊢ ∀max.
+ sum_with_mut_borrows_fwd max =
+ sum_with_mut_borrows_loop_fwd max (int_to_u32 0) (int_to_u32 0)
+
+ [sum_with_mut_borrows_loop_fwd_def] Definition
+
+ ⊢ ∀max mi ms.
+ sum_with_mut_borrows_loop_fwd max mi ms =
+ if u32_lt mi max then
+ do
+ ms0 <- u32_add ms mi;
+ mi0 <- u32_add mi (int_to_u32 1);
+ sum_with_mut_borrows_loop_fwd max mi0 ms0
+ od
+ else u32_mul ms (int_to_u32 2)
+
+ [sum_with_shared_borrows_fwd_def] Definition
+
+ ⊢ ∀max.
+ sum_with_shared_borrows_fwd max =
+ sum_with_shared_borrows_loop_fwd max (int_to_u32 0)
+ (int_to_u32 0)
+
+ [sum_with_shared_borrows_loop_fwd_def] Definition
+
+ ⊢ ∀max i s.
+ sum_with_shared_borrows_loop_fwd max i s =
+ if u32_lt i max then
+ do
+ i0 <- u32_add i (int_to_u32 1);
+ s0 <- u32_add s i0;
+ sum_with_shared_borrows_loop_fwd max i0 s0
+ od
+ else u32_mul s (int_to_u32 2)
+
+
+*)
+end