From ce8614be6bd96c51756bf5922b5dfd4c59650dd4 Mon Sep 17 00:00:00 2001
From: Aymeric Fromherz
Date: Thu, 30 May 2024 12:33:05 +0200
Subject: Implement two phases of loops join + collapse

---
 tests/coq/arrays/Arrays.v                    |  68 +---
 tests/coq/demo/Demo.v                        |  27 +-
 tests/coq/hashmap/Hashmap_Funs.v             | 198 +-----------
 tests/coq/hashmap_on_disk/HashmapMain_Funs.v | 205 +-----------
 tests/coq/misc/Loops.v                       | 446 +--------------------------
 5 files changed, 36 insertions(+), 908 deletions(-)

(limited to 'tests/coq')

diff --git a/tests/coq/arrays/Arrays.v b/tests/coq/arrays/Arrays.v
index 35dea58c..b7bef7c7 100644
--- a/tests/coq/arrays/Arrays.v
+++ b/tests/coq/arrays/Arrays.v
@@ -375,58 +375,15 @@ Definition non_copyable_array : result unit :=
   take_array_t (mk_array AB_t 2%usize [ AB_A; AB_B ])
 .
 
-(** [arrays::sum]: loop 0:
-    Source: 'tests/src/arrays.rs', lines 242:0-250:1 *)
-Fixpoint sum_loop
-  (n : nat) (s : slice u32) (sum1 : u32) (i : usize) : result u32 :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    let i1 := slice_len u32 s in
-    if i s< i1
-    then (
-      i2 <- slice_index_usize u32 s i;
-      sum3 <- u32_add sum1 i2;
-      i3 <- usize_add i 1%usize;
-      sum_loop n1 s sum3 i3)
-    else Ok sum1
-  end
-.
-
 (** [arrays::sum]:
     Source: 'tests/src/arrays.rs', lines 242:0-242:28 *)
 Definition sum (n : nat) (s : slice u32) : result u32 :=
-  sum_loop n s 0%u32 0%usize
-.
-
-(** [arrays::sum2]: loop 0:
-    Source: 'tests/src/arrays.rs', lines 252:0-261:1 *)
-Fixpoint sum2_loop
-  (n : nat) (s : slice u32) (s2 : slice u32) (sum1 : u32) (i : usize) :
-  result u32
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    let i1 := slice_len u32 s in
-    if i s< i1
-    then (
-      i2 <- slice_index_usize u32 s i;
-      i3 <- slice_index_usize u32 s2 i;
-      i4 <- u32_add i2 i3;
-      sum3 <- u32_add sum1 i4;
-      i5 <- usize_add i 1%usize;
-      sum2_loop n1 s s2 sum3 i5)
-    else Ok sum1
-  end
-.
+  admit.
 
 (** [arrays::sum2]:
     Source: 'tests/src/arrays.rs', lines 252:0-252:41 *)
 Definition sum2 (n : nat) (s : slice u32) (s2 : slice u32) : result u32 :=
-  let i := slice_len u32 s in
-  let i1 := slice_len u32 s2 in
-  if negb (i s= i1) then Fail_ Failure else sum2_loop n s s2 0%u32 0%usize
+  admit
 .
 
 (** [arrays::f0]:
@@ -507,29 +464,10 @@ Definition ite : result unit :=
   Ok tt
 .
 
-(** [arrays::zero_slice]: loop 0:
-    Source: 'tests/src/arrays.rs', lines 303:0-310:1 *)
-Fixpoint zero_slice_loop
-  (n : nat) (a : slice u8) (i : usize) (len : usize) : result (slice u8) :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    if i s< len
-    then (
-      p <- slice_index_mut_usize u8 a i;
-      let (_, index_mut_back) := p in
-      i1 <- usize_add i 1%usize;
-      a1 <- index_mut_back 0%u8;
-      zero_slice_loop n1 a1 i1 len)
-    else Ok a
-  end
-.
-
 (** [arrays::zero_slice]:
     Source: 'tests/src/arrays.rs', lines 303:0-303:31 *)
 Definition zero_slice (n : nat) (a : slice u8) : result (slice u8) :=
-  let len := slice_len u8 a in zero_slice_loop n a 0%usize len
-.
+  admit.
 
 (** [arrays::iter_mut_slice]: loop 0:
     Source: 'tests/src/arrays.rs', lines 312:0-318:1 *)
diff --git a/tests/coq/demo/Demo.v b/tests/coq/demo/Demo.v
index 8d8f840d..14b1ca9d 100644
--- a/tests/coq/demo/Demo.v
+++ b/tests/coq/demo/Demo.v
@@ -90,38 +90,13 @@ Fixpoint list_nth_mut
   end
 .
 
-(** [demo::list_nth_mut1]: loop 0:
-    Source: 'tests/src/demo.rs', lines 69:0-78:1 *)
-Fixpoint list_nth_mut1_loop
-  (T : Type) (n : nat) (l : CList_t T) (i : u32) :
-  result (T * (T -> result (CList_t T)))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match l with
-    | CList_CCons x tl =>
-      if i s= 0%u32
-      then let back := fun (ret : T) => Ok (CList_CCons ret tl) in Ok (x, back)
-      else (
-        i1 <- u32_sub i 1%u32;
-        p <- list_nth_mut1_loop T n1 tl i1;
-        let (t, back) := p in
-        let back1 := fun (ret : T) => tl1 <- back ret; Ok (CList_CCons x tl1)
-          in
-        Ok (t, back1))
-    | CList_CNil => Fail_ Failure
-    end
-  end
-.
-
 (** [demo::list_nth_mut1]:
     Source: 'tests/src/demo.rs', lines 69:0-69:77 *)
 Definition list_nth_mut1
   (T : Type) (n : nat) (l : CList_t T) (i : u32) :
   result (T * (T -> result (CList_t T)))
   :=
-  list_nth_mut1_loop T n l i
+  admit
 .
 
 (** [demo::i32_id]:
diff --git a/tests/coq/hashmap/Hashmap_Funs.v b/tests/coq/hashmap/Hashmap_Funs.v
index 1f2b2b22..b5c2bff0 100644
--- a/tests/coq/hashmap/Hashmap_Funs.v
+++ b/tests/coq/hashmap/Hashmap_Funs.v
@@ -67,41 +67,11 @@ Definition hashMap_new (T : Type) (n : nat) : result (HashMap_t T) :=
   hashMap_new_with_capacity T n 32%usize 4%usize 5%usize
 .
 
-(** [hashmap::{hashmap::HashMap<T>}::clear]: loop 0:
-    Source: 'tests/src/hashmap.rs', lines 80:4-88:5 *)
-Fixpoint hashMap_clear_loop
-  (T : Type) (n : nat) (slots : alloc_vec_Vec (List_t T)) (i : usize) :
-  result (alloc_vec_Vec (List_t T))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    let i1 := alloc_vec_Vec_len (List_t T) slots in
-    if i s< i1
-    then (
-      p <-
-        alloc_vec_Vec_index_mut (List_t T) usize
-          (core_slice_index_SliceIndexUsizeSliceTInst (List_t T)) slots i;
-      let (_, index_mut_back) := p in
-      i2 <- usize_add i 1%usize;
-      slots1 <- index_mut_back List_Nil;
-      hashMap_clear_loop T n1 slots1 i2)
-    else Ok slots
-  end
-.
-
 (** [hashmap::{hashmap::HashMap<T>}::clear]:
     Source: 'tests/src/hashmap.rs', lines 80:4-80:27 *)
 Definition hashMap_clear
   (T : Type) (n : nat) (self : HashMap_t T) : result (HashMap_t T) :=
-  hm <- hashMap_clear_loop T n self.(hashMap_slots) 0%usize;
-  Ok
-    {|
-      hashMap_num_entries := 0%usize;
-      hashMap_max_load_factor := self.(hashMap_max_load_factor);
-      hashMap_max_load := self.(hashMap_max_load);
-      hashMap_slots := hm
-    |}
+  admit
 .
 
 (** [hashmap::{hashmap::HashMap<T>}::len]:
@@ -110,35 +80,13 @@ Definition hashMap_len (T : Type) (self : HashMap_t T) : result usize :=
   Ok self.(hashMap_num_entries)
 .
 
-(** [hashmap::{hashmap::HashMap<T>}::insert_in_list]: loop 0:
-    Source: 'tests/src/hashmap.rs', lines 97:4-114:5 *)
-Fixpoint hashMap_insert_in_list_loop
-  (T : Type) (n : nat) (key : usize) (value : T) (ls : List_t T) :
-  result (bool * (List_t T))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls with
-    | List_Cons ckey cvalue tl =>
-      if ckey s= key
-      then Ok (false, List_Cons ckey value tl)
-      else (
-        p <- hashMap_insert_in_list_loop T n1 key value tl;
-        let (b, tl1) := p in
-        Ok (b, List_Cons ckey cvalue tl1))
-    | List_Nil => Ok (true, List_Cons key value List_Nil)
-    end
-  end
-.
-
 (** [hashmap::{hashmap::HashMap<T>}::insert_in_list]:
     Source: 'tests/src/hashmap.rs', lines 97:4-97:71 *)
 Definition hashMap_insert_in_list
   (T : Type) (n : nat) (key : usize) (value : T) (ls : List_t T) :
   result (bool * (List_t T))
   :=
-  hashMap_insert_in_list_loop T n key value ls
+  admit
 .
 
 (** [hashmap::{hashmap::HashMap<T>}::insert_no_resize]:
@@ -179,57 +127,13 @@ Definition hashMap_insert_no_resize
       |})
 .
 
-(** [hashmap::{hashmap::HashMap<T>}::move_elements_from_list]: loop 0:
-    Source: 'tests/src/hashmap.rs', lines 183:4-196:5 *)
-Fixpoint hashMap_move_elements_from_list_loop
-  (T : Type) (n : nat) (ntable : HashMap_t T) (ls : List_t T) :
-  result (HashMap_t T)
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls with
-    | List_Cons k v tl =>
-      ntable1 <- hashMap_insert_no_resize T n1 ntable k v;
-      hashMap_move_elements_from_list_loop T n1 ntable1 tl
-    | List_Nil => Ok ntable
-    end
-  end
-.
-
 (** [hashmap::{hashmap::HashMap<T>}::move_elements_from_list]:
     Source: 'tests/src/hashmap.rs', lines 183:4-183:72 *)
 Definition hashMap_move_elements_from_list
   (T : Type) (n : nat) (ntable : HashMap_t T) (ls : List_t T) :
   result (HashMap_t T)
   :=
-  hashMap_move_elements_from_list_loop T n ntable ls
-.
-
-(** [hashmap::{hashmap::HashMap<T>}::move_elements]: loop 0:
-    Source: 'tests/src/hashmap.rs', lines 171:4-180:5 *)
-Fixpoint hashMap_move_elements_loop
-  (T : Type) (n : nat) (ntable : HashMap_t T)
-  (slots : alloc_vec_Vec (List_t T)) (i : usize) :
-  result ((HashMap_t T) * (alloc_vec_Vec (List_t T)))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    let i1 := alloc_vec_Vec_len (List_t T) slots in
-    if i s< i1
-    then (
-      p <-
-        alloc_vec_Vec_index_mut (List_t T) usize
-          (core_slice_index_SliceIndexUsizeSliceTInst (List_t T)) slots i;
-      let (l, index_mut_back) := p in
-      let (ls, l1) := core_mem_replace (List_t T) l List_Nil in
-      ntable1 <- hashMap_move_elements_from_list T n1 ntable ls;
-      i2 <- usize_add i 1%usize;
-      slots1 <- index_mut_back l1;
-      hashMap_move_elements_loop T n1 ntable1 slots1 i2)
-    else Ok (ntable, slots)
-  end
+  admit
 .
 
 (** [hashmap::{hashmap::HashMap<T>}::move_elements]:
@@ -239,7 +143,7 @@ Definition hashMap_move_elements
   (slots : alloc_vec_Vec (List_t T)) (i : usize) :
   result ((HashMap_t T) * (alloc_vec_Vec (List_t T)))
   :=
-  hashMap_move_elements_loop T n ntable slots i
+  admit
 .
 
 (** [hashmap::{hashmap::HashMap<T>}::try_resize]:
@@ -287,28 +191,11 @@ Definition hashMap_insert
   else Ok self1
 .
 
-(** [hashmap::{hashmap::HashMap<T>}::contains_key_in_list]: loop 0:
-    Source: 'tests/src/hashmap.rs', lines 206:4-219:5 *)
-Fixpoint hashMap_contains_key_in_list_loop
-  (T : Type) (n : nat) (key : usize) (ls : List_t T) : result bool :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls with
-    | List_Cons ckey _ tl =>
-      if ckey s= key
-      then Ok true
-      else hashMap_contains_key_in_list_loop T n1 key tl
-    | List_Nil => Ok false
-    end
-  end
-.
-
 (** [hashmap::{hashmap::HashMap<T>}::contains_key_in_list]:
     Source: 'tests/src/hashmap.rs', lines 206:4-206:68 *)
 Definition hashMap_contains_key_in_list
   (T : Type) (n : nat) (key : usize) (ls : List_t T) : result bool :=
-  hashMap_contains_key_in_list_loop T n key ls
+  admit
 .
 
 (** [hashmap::{hashmap::HashMap<T>}::contains_key]:
@@ -325,26 +212,11 @@ Definition hashMap_contains_key
   hashMap_contains_key_in_list T n key l
 .
 
-(** [hashmap::{hashmap::HashMap<T>}::get_in_list]: loop 0:
-    Source: 'tests/src/hashmap.rs', lines 224:4-237:5 *)
-Fixpoint hashMap_get_in_list_loop
-  (T : Type) (n : nat) (key : usize) (ls : List_t T) : result T :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls with
-    | List_Cons ckey cvalue tl =>
-      if ckey s= key then Ok cvalue else hashMap_get_in_list_loop T n1 key tl
-    | List_Nil => Fail_ Failure
-    end
-  end
-.
-
 (** [hashmap::{hashmap::HashMap<T>}::get_in_list]:
     Source: 'tests/src/hashmap.rs', lines 224:4-224:70 *)
 Definition hashMap_get_in_list
   (T : Type) (n : nat) (key : usize) (ls : List_t T) : result T :=
-  hashMap_get_in_list_loop T n key ls
+  admit
 .
 
 (** [hashmap::{hashmap::HashMap<T>}::get]:
@@ -361,39 +233,13 @@ Definition hashMap_get
   hashMap_get_in_list T n key l
 .
 
-(** [hashmap::{hashmap::HashMap<T>}::get_mut_in_list]: loop 0:
-    Source: 'tests/src/hashmap.rs', lines 245:4-254:5 *)
-Fixpoint hashMap_get_mut_in_list_loop
-  (T : Type) (n : nat) (ls : List_t T) (key : usize) :
-  result (T * (T -> result (List_t T)))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls with
-    | List_Cons ckey cvalue tl =>
-      if ckey s= key
-      then
-        let back := fun (ret : T) => Ok (List_Cons ckey ret tl) in
-        Ok (cvalue, back)
-      else (
-        p <- hashMap_get_mut_in_list_loop T n1 tl key;
-        let (t, back) := p in
-        let back1 :=
-          fun (ret : T) => tl1 <- back ret; Ok (List_Cons ckey cvalue tl1) in
-        Ok (t, back1))
-    | List_Nil => Fail_ Failure
-    end
-  end
-.
-
 (** [hashmap::{hashmap::HashMap<T>}::get_mut_in_list]:
     Source: 'tests/src/hashmap.rs', lines 245:4-245:86 *)
 Definition hashMap_get_mut_in_list
   (T : Type) (n : nat) (ls : List_t T) (key : usize) :
   result (T * (T -> result (List_t T)))
   :=
-  hashMap_get_mut_in_list_loop T n ls key
+  admit
 .
 
 (** [hashmap::{hashmap::HashMap<T>}::get_mut]:
@@ -426,41 +272,13 @@ Definition hashMap_get_mut
   Ok (t, back)
 .
 
-(** [hashmap::{hashmap::HashMap<T>}::remove_from_list]: loop 0:
-    Source: 'tests/src/hashmap.rs', lines 265:4-291:5 *)
-Fixpoint hashMap_remove_from_list_loop
-  (T : Type) (n : nat) (key : usize) (ls : List_t T) :
-  result ((option T) * (List_t T))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls with
-    | List_Cons ckey t tl =>
-      if ckey s= key
-      then
-        let (mv_ls, _) :=
-          core_mem_replace (List_t T) (List_Cons ckey t tl) List_Nil in
-        match mv_ls with
-        | List_Cons _ cvalue tl1 => Ok (Some cvalue, tl1)
-        | List_Nil => Fail_ Failure
-        end
-      else (
-        p <- hashMap_remove_from_list_loop T n1 key tl;
-        let (o, tl1) := p in
-        Ok (o, List_Cons ckey t tl1))
-    | List_Nil => Ok (None, List_Nil)
-    end
-  end
-.
-
 (** [hashmap::{hashmap::HashMap<T>}::remove_from_list]:
     Source: 'tests/src/hashmap.rs', lines 265:4-265:69 *)
 Definition hashMap_remove_from_list
   (T : Type) (n : nat) (key : usize) (ls : List_t T) :
   result ((option T) * (List_t T))
   :=
-  hashMap_remove_from_list_loop T n key ls
+  admit
 .
 
 (** [hashmap::{hashmap::HashMap<T>}::remove]:
diff --git a/tests/coq/hashmap_on_disk/HashmapMain_Funs.v b/tests/coq/hashmap_on_disk/HashmapMain_Funs.v
index facd84ea..e37b111c 100644
--- a/tests/coq/hashmap_on_disk/HashmapMain_Funs.v
+++ b/tests/coq/hashmap_on_disk/HashmapMain_Funs.v
@@ -74,44 +74,13 @@ Definition hashmap_HashMap_new
   hashmap_HashMap_new_with_capacity T n 32%usize 4%usize 5%usize
 .
 
-(** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::clear]: loop 0:
-    Source: 'tests/src/hashmap.rs', lines 80:4-88:5 *)
-Fixpoint hashmap_HashMap_clear_loop
-  (T : Type) (n : nat) (slots : alloc_vec_Vec (hashmap_List_t T)) (i : usize) :
-  result (alloc_vec_Vec (hashmap_List_t T))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    let i1 := alloc_vec_Vec_len (hashmap_List_t T) slots in
-    if i s< i1
-    then (
-      p <-
-        alloc_vec_Vec_index_mut (hashmap_List_t T) usize
-          (core_slice_index_SliceIndexUsizeSliceTInst (hashmap_List_t T)) slots
-          i;
-      let (_, index_mut_back) := p in
-      i2 <- usize_add i 1%usize;
-      slots1 <- index_mut_back Hashmap_List_Nil;
-      hashmap_HashMap_clear_loop T n1 slots1 i2)
-    else Ok slots
-  end
-.
-
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::clear]:
     Source: 'tests/src/hashmap.rs', lines 80:4-80:27 *)
 Definition hashmap_HashMap_clear
   (T : Type) (n : nat) (self : hashmap_HashMap_t T) :
   result (hashmap_HashMap_t T)
   :=
-  hm <- hashmap_HashMap_clear_loop T n self.(hashmap_HashMap_slots) 0%usize;
-  Ok
-    {|
-      hashmap_HashMap_num_entries := 0%usize;
-      hashmap_HashMap_max_load_factor := self.(hashmap_HashMap_max_load_factor);
-      hashmap_HashMap_max_load := self.(hashmap_HashMap_max_load);
-      hashmap_HashMap_slots := hm
-    |}
+  admit
 .
 
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::len]:
@@ -121,36 +90,13 @@ Definition hashmap_HashMap_len
   Ok self.(hashmap_HashMap_num_entries)
 .
 
-(** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::insert_in_list]: loop 0:
-    Source: 'tests/src/hashmap.rs', lines 97:4-114:5 *)
-Fixpoint hashmap_HashMap_insert_in_list_loop
-  (T : Type) (n : nat) (key : usize) (value : T) (ls : hashmap_List_t T) :
-  result (bool * (hashmap_List_t T))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls with
-    | Hashmap_List_Cons ckey cvalue tl =>
-      if ckey s= key
-      then Ok (false, Hashmap_List_Cons ckey value tl)
-      else (
-        p <- hashmap_HashMap_insert_in_list_loop T n1 key value tl;
-        let (b, tl1) := p in
-        Ok (b, Hashmap_List_Cons ckey cvalue tl1))
-    | Hashmap_List_Nil =>
-      Ok (true, Hashmap_List_Cons key value Hashmap_List_Nil)
-    end
-  end
-.
-
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::insert_in_list]:
     Source: 'tests/src/hashmap.rs', lines 97:4-97:71 *)
 Definition hashmap_HashMap_insert_in_list
   (T : Type) (n : nat) (key : usize) (value : T) (ls : hashmap_List_t T) :
   result (bool * (hashmap_List_t T))
   :=
-  hashmap_HashMap_insert_in_list_loop T n key value ls
+  admit
 .
 
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::insert_no_resize]:
@@ -193,58 +139,13 @@ Definition hashmap_HashMap_insert_no_resize
       |})
 .
 
-(** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::move_elements_from_list]: loop 0:
-    Source: 'tests/src/hashmap.rs', lines 183:4-196:5 *)
-Fixpoint hashmap_HashMap_move_elements_from_list_loop
-  (T : Type) (n : nat) (ntable : hashmap_HashMap_t T) (ls : hashmap_List_t T) :
-  result (hashmap_HashMap_t T)
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls with
-    | Hashmap_List_Cons k v tl =>
-      ntable1 <- hashmap_HashMap_insert_no_resize T n1 ntable k v;
-      hashmap_HashMap_move_elements_from_list_loop T n1 ntable1 tl
-    | Hashmap_List_Nil => Ok ntable
-    end
-  end
-.
-
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::move_elements_from_list]:
     Source: 'tests/src/hashmap.rs', lines 183:4-183:72 *)
 Definition hashmap_HashMap_move_elements_from_list
   (T : Type) (n : nat) (ntable : hashmap_HashMap_t T) (ls : hashmap_List_t T) :
   result (hashmap_HashMap_t T)
   :=
-  hashmap_HashMap_move_elements_from_list_loop T n ntable ls
-.
-
-(** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::move_elements]: loop 0:
-    Source: 'tests/src/hashmap.rs', lines 171:4-180:5 *)
-Fixpoint hashmap_HashMap_move_elements_loop
-  (T : Type) (n : nat) (ntable : hashmap_HashMap_t T)
-  (slots : alloc_vec_Vec (hashmap_List_t T)) (i : usize) :
-  result ((hashmap_HashMap_t T) * (alloc_vec_Vec (hashmap_List_t T)))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    let i1 := alloc_vec_Vec_len (hashmap_List_t T) slots in
-    if i s< i1
-    then (
-      p <-
-        alloc_vec_Vec_index_mut (hashmap_List_t T) usize
-          (core_slice_index_SliceIndexUsizeSliceTInst (hashmap_List_t T)) slots
-          i;
-      let (l, index_mut_back) := p in
-      let (ls, l1) := core_mem_replace (hashmap_List_t T) l Hashmap_List_Nil in
-      ntable1 <- hashmap_HashMap_move_elements_from_list T n1 ntable ls;
-      i2 <- usize_add i 1%usize;
-      slots1 <- index_mut_back l1;
-      hashmap_HashMap_move_elements_loop T n1 ntable1 slots1 i2)
-    else Ok (ntable, slots)
-  end
+  admit
 .
 
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::move_elements]:
@@ -254,7 +155,7 @@ Definition hashmap_HashMap_move_elements
   (slots : alloc_vec_Vec (hashmap_List_t T)) (i : usize) :
   result ((hashmap_HashMap_t T) * (alloc_vec_Vec (hashmap_List_t T)))
   :=
-  hashmap_HashMap_move_elements_loop T n ntable slots i
+  admit
 .
 
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::try_resize]:
@@ -307,28 +208,11 @@ Definition hashmap_HashMap_insert
   else Ok self1
 .
 
-(** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::contains_key_in_list]: loop 0:
-    Source: 'tests/src/hashmap.rs', lines 206:4-219:5 *)
-Fixpoint hashmap_HashMap_contains_key_in_list_loop
-  (T : Type) (n : nat) (key : usize) (ls : hashmap_List_t T) : result bool :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls with
-    | Hashmap_List_Cons ckey _ tl =>
-      if ckey s= key
-      then Ok true
-      else hashmap_HashMap_contains_key_in_list_loop T n1 key tl
-    | Hashmap_List_Nil => Ok false
-    end
-  end
-.
-
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::contains_key_in_list]:
     Source: 'tests/src/hashmap.rs', lines 206:4-206:68 *)
 Definition hashmap_HashMap_contains_key_in_list
   (T : Type) (n : nat) (key : usize) (ls : hashmap_List_t T) : result bool :=
-  hashmap_HashMap_contains_key_in_list_loop T n key ls
+  admit
 .
 
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::contains_key]:
@@ -347,28 +231,11 @@ Definition hashmap_HashMap_contains_key
   hashmap_HashMap_contains_key_in_list T n key l
 .
 
-(** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::get_in_list]: loop 0:
-    Source: 'tests/src/hashmap.rs', lines 224:4-237:5 *)
-Fixpoint hashmap_HashMap_get_in_list_loop
-  (T : Type) (n : nat) (key : usize) (ls : hashmap_List_t T) : result T :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls with
-    | Hashmap_List_Cons ckey cvalue tl =>
-      if ckey s= key
-      then Ok cvalue
-      else hashmap_HashMap_get_in_list_loop T n1 key tl
-    | Hashmap_List_Nil => Fail_ Failure
-    end
-  end
-.
-
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::get_in_list]:
     Source: 'tests/src/hashmap.rs', lines 224:4-224:70 *)
 Definition hashmap_HashMap_get_in_list
   (T : Type) (n : nat) (key : usize) (ls : hashmap_List_t T) : result T :=
-  hashmap_HashMap_get_in_list_loop T n key ls
+  admit
 .
 
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::get]:
@@ -385,40 +252,13 @@ Definition hashmap_HashMap_get
   hashmap_HashMap_get_in_list T n key l
 .
 
-(** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::get_mut_in_list]: loop 0:
-    Source: 'tests/src/hashmap.rs', lines 245:4-254:5 *)
-Fixpoint hashmap_HashMap_get_mut_in_list_loop
-  (T : Type) (n : nat) (ls : hashmap_List_t T) (key : usize) :
-  result (T * (T -> result (hashmap_List_t T)))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls with
-    | Hashmap_List_Cons ckey cvalue tl =>
-      if ckey s= key
-      then
-        let back := fun (ret : T) => Ok (Hashmap_List_Cons ckey ret tl) in
-        Ok (cvalue, back)
-      else (
-        p <- hashmap_HashMap_get_mut_in_list_loop T n1 tl key;
-        let (t, back) := p in
-        let back1 :=
-          fun (ret : T) =>
-            tl1 <- back ret; Ok (Hashmap_List_Cons ckey cvalue tl1) in
-        Ok (t, back1))
-    | Hashmap_List_Nil => Fail_ Failure
-    end
-  end
-.
-
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::get_mut_in_list]:
     Source: 'tests/src/hashmap.rs', lines 245:4-245:86 *)
 Definition hashmap_HashMap_get_mut_in_list
   (T : Type) (n : nat) (ls : hashmap_List_t T) (key : usize) :
   result (T * (T -> result (hashmap_List_t T)))
   :=
-  hashmap_HashMap_get_mut_in_list_loop T n ls key
+  admit
 .
 
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::get_mut]:
@@ -452,42 +292,13 @@ Definition hashmap_HashMap_get_mut
   Ok (t, back)
 .
 
-(** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::remove_from_list]: loop 0:
-    Source: 'tests/src/hashmap.rs', lines 265:4-291:5 *)
-Fixpoint hashmap_HashMap_remove_from_list_loop
-  (T : Type) (n : nat) (key : usize) (ls : hashmap_List_t T) :
-  result ((option T) * (hashmap_List_t T))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls with
-    | Hashmap_List_Cons ckey t tl =>
-      if ckey s= key
-      then
-        let (mv_ls, _) :=
-          core_mem_replace (hashmap_List_t T) (Hashmap_List_Cons ckey t tl)
-            Hashmap_List_Nil in
-        match mv_ls with
-        | Hashmap_List_Cons _ cvalue tl1 => Ok (Some cvalue, tl1)
-        | Hashmap_List_Nil => Fail_ Failure
-        end
-      else (
-        p <- hashmap_HashMap_remove_from_list_loop T n1 key tl;
-        let (o, tl1) := p in
-        Ok (o, Hashmap_List_Cons ckey t tl1))
-    | Hashmap_List_Nil => Ok (None, Hashmap_List_Nil)
-    end
-  end
-.
-
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::remove_from_list]:
     Source: 'tests/src/hashmap.rs', lines 265:4-265:69 *)
 Definition hashmap_HashMap_remove_from_list
   (T : Type) (n : nat) (key : usize) (ls : hashmap_List_t T) :
   result ((option T) * (hashmap_List_t T))
   :=
-  hashmap_HashMap_remove_from_list_loop T n key ls
+  admit
 .
 
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::remove]:
diff --git a/tests/coq/misc/Loops.v b/tests/coq/misc/Loops.v
index bf0a8bc1..bd2b287b 100644
--- a/tests/coq/misc/Loops.v
+++ b/tests/coq/misc/Loops.v
@@ -93,32 +93,11 @@ Definition sum_array (N : usize) (n : nat) (a : array u32 N) : result u32 :=
   sum_array_loop N n a 0%usize 0%u32
 .
 
-(** [loops::clear]: loop 0:
-    Source: 'tests/src/loops.rs', lines 62:0-68:1 *)
-Fixpoint clear_loop
-  (n : nat) (v : alloc_vec_Vec u32) (i : usize) : result (alloc_vec_Vec u32) :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    let i1 := alloc_vec_Vec_len u32 v in
-    if i s< i1
-    then (
-      p <-
-        alloc_vec_Vec_index_mut u32 usize
-          (core_slice_index_SliceIndexUsizeSliceTInst u32) v i;
-      let (_, index_mut_back) := p in
-      i2 <- usize_add i 1%usize;
-      v1 <- index_mut_back 0%u32;
-      clear_loop n1 v1 i2)
-    else Ok v
-  end
-.
-
 (** [loops::clear]:
     Source: 'tests/src/loops.rs', lines 62:0-62:30 *)
 Definition clear
   (n : nat) (v : alloc_vec_Vec u32) : result (alloc_vec_Vec u32) :=
-  clear_loop n v 0%usize
+  admit
 .
 
 (** [loops::List]
@@ -131,47 +110,10 @@ Inductive List_t (T : Type) :=
 Arguments List_Cons { _ }.
 Arguments List_Nil { _ }.
 
-(** [loops::list_mem]: loop 0:
-    Source: 'tests/src/loops.rs', lines 76:0-85:1 *)
-Fixpoint list_mem_loop (n : nat) (x : u32) (ls : List_t u32) : result bool :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls with
-    | List_Cons y tl => if y s= x then Ok true else list_mem_loop n1 x tl
-    | List_Nil => Ok false
-    end
-  end
-.
-
 (** [loops::list_mem]:
     Source: 'tests/src/loops.rs', lines 76:0-76:52 *)
 Definition list_mem (n : nat) (x : u32) (ls : List_t u32) : result bool :=
-  list_mem_loop n x ls
-.
-
-(** [loops::list_nth_mut_loop]: loop 0:
-    Source: 'tests/src/loops.rs', lines 88:0-98:1 *)
-Fixpoint list_nth_mut_loop_loop
-  (T : Type) (n : nat) (ls : List_t T) (i : u32) :
-  result (T * (T -> result (List_t T)))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls with
-    | List_Cons x tl =>
-      if i s= 0%u32
-      then let back := fun (ret : T) => Ok (List_Cons ret tl) in Ok (x, back)
-      else (
-        i1 <- u32_sub i 1%u32;
-        p <- list_nth_mut_loop_loop T n1 tl i1;
-        let (t, back) := p in
-        let back1 := fun (ret : T) => tl1 <- back ret; Ok (List_Cons x tl1) in
-        Ok (t, back1))
-    | List_Nil => Fail_ Failure
-    end
-  end
+  admit
 .
 
 (** [loops::list_nth_mut_loop]:
@@ -180,56 +122,14 @@ Definition list_nth_mut_loop
   (T : Type) (n : nat) (ls : List_t T) (i : u32) :
   result (T * (T -> result (List_t T)))
   :=
-  list_nth_mut_loop_loop T n ls i
-.
-
-(** [loops::list_nth_shared_loop]: loop 0:
-    Source: 'tests/src/loops.rs', lines 101:0-111:1 *)
-Fixpoint list_nth_shared_loop_loop
-  (T : Type) (n : nat) (ls : List_t T) (i : u32) : result T :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls with
-    | List_Cons x tl =>
-      if i s= 0%u32
-      then Ok x
-      else (i1 <- u32_sub i 1%u32; list_nth_shared_loop_loop T n1 tl i1)
-    | List_Nil => Fail_ Failure
-    end
-  end
+  admit
 .
 
 (** [loops::list_nth_shared_loop]:
     Source: 'tests/src/loops.rs', lines 101:0-101:66 *)
 Definition list_nth_shared_loop
   (T : Type) (n : nat) (ls : List_t T) (i : u32) : result T :=
-  list_nth_shared_loop_loop T n ls i
-.
-
-(** [loops::get_elem_mut]: loop 0:
-    Source: 'tests/src/loops.rs', lines 113:0-127:1 *)
-Fixpoint get_elem_mut_loop
-  (n : nat) (x : usize) (ls : List_t usize) :
-  result (usize * (usize -> result (List_t usize)))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls with
-    | List_Cons y tl =>
-      if y s= x
-      then
-        let back := fun (ret : usize) => Ok (List_Cons ret tl) in Ok (y, back)
-      else (
-        p <- get_elem_mut_loop n1 x tl;
-        let (i, back) := p in
-        let back1 := fun (ret : usize) => tl1 <- back ret; Ok (List_Cons y tl1)
-          in
-        Ok (i, back1))
-    | List_Nil => Fail_ Failure
-    end
-  end
+  admit
 .
 
 (** [loops::get_elem_mut]:
@@ -238,28 +138,7 @@ Definition get_elem_mut
   (n : nat) (slots : alloc_vec_Vec (List_t usize)) (x : usize) :
   result (usize * (usize -> result (alloc_vec_Vec (List_t usize))))
   :=
-  p <-
-    alloc_vec_Vec_index_mut (List_t usize) usize
-      (core_slice_index_SliceIndexUsizeSliceTInst (List_t usize)) slots 0%usize;
-  let (ls, index_mut_back) := p in
-  p1 <- get_elem_mut_loop n x ls;
-  let (i, back) := p1 in
-  let back1 := fun (ret : usize) => l <- back ret; index_mut_back l in
-  Ok (i, back1)
-.
-
-(** [loops::get_elem_shared]: loop 0:
-    Source: 'tests/src/loops.rs', lines 129:0-143:1 *)
-Fixpoint get_elem_shared_loop
-  (n : nat) (x : usize) (ls : List_t usize) : result usize :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls with
-    | List_Cons y tl => if y s= x then Ok y else get_elem_shared_loop n1 x tl
-    | List_Nil => Fail_ Failure
-    end
-  end
+  admit
 .
 
 (** [loops::get_elem_shared]:
@@ -268,10 +147,7 @@ Definition get_elem_shared
   (n : nat) (slots : alloc_vec_Vec (List_t usize)) (x : usize) :
   result usize
   :=
-  ls <-
-    alloc_vec_Vec_index (List_t usize) usize
-      (core_slice_index_SliceIndexUsizeSliceTInst (List_t usize)) slots 0%usize;
-  get_elem_shared_loop n x ls
+  admit
 .
 
 (** [loops::id_mut]:
@@ -288,101 +164,20 @@ Definition id_mut
 Definition id_shared (T : Type) (ls : List_t T) : result (List_t T) :=
   Ok ls.
 
-(** [loops::list_nth_mut_loop_with_id]: loop 0:
-    Source: 'tests/src/loops.rs', lines 154:0-165:1 *)
-Fixpoint list_nth_mut_loop_with_id_loop
-  (T : Type) (n : nat) (i : u32) (ls : List_t T) :
-  result (T * (T -> result (List_t T)))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls with
-    | List_Cons x tl =>
-      if i s= 0%u32
-      then let back := fun (ret : T) => Ok (List_Cons ret tl) in Ok (x, back)
-      else (
-        i1 <- u32_sub i 1%u32;
-        p <- list_nth_mut_loop_with_id_loop T n1 i1 tl;
-        let (t, back) := p in
-        let back1 := fun (ret : T) => tl1 <- back ret; Ok (List_Cons x tl1) in
-        Ok (t, back1))
-    | List_Nil => Fail_ Failure
-    end
-  end
-.
-
 (** [loops::list_nth_mut_loop_with_id]:
     Source: 'tests/src/loops.rs', lines 154:0-154:75 *)
 Definition list_nth_mut_loop_with_id
   (T : Type) (n : nat) (ls : List_t T) (i : u32) :
   result (T * (T -> result (List_t T)))
   :=
-  p <- id_mut T ls;
-  let (ls1, id_mut_back) := p in
-  p1 <- list_nth_mut_loop_with_id_loop T n i ls1;
-  let (t, back) := p1 in
-  let back1 := fun (ret : T) => l <- back ret; id_mut_back l in
-  Ok (t, back1)
-.
-
-(** [loops::list_nth_shared_loop_with_id]: loop 0:
-    Source: 'tests/src/loops.rs', lines 168:0-179:1 *)
-Fixpoint list_nth_shared_loop_with_id_loop
-  (T : Type) (n : nat) (i : u32) (ls : List_t T) : result T :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls with
-    | List_Cons x tl =>
-      if i s= 0%u32
-      then Ok x
-      else (
-        i1 <- u32_sub i 1%u32; list_nth_shared_loop_with_id_loop T n1 i1 tl)
-    | List_Nil => Fail_ Failure
-    end
-  end
+  admit
 .
 
 (** [loops::list_nth_shared_loop_with_id]:
     Source: 'tests/src/loops.rs', lines 168:0-168:70 *)
 Definition list_nth_shared_loop_with_id
   (T : Type) (n : nat) (ls : List_t T) (i : u32) : result T :=
-  ls1 <- id_shared T ls; list_nth_shared_loop_with_id_loop T n i ls1
-.
-
-(** [loops::list_nth_mut_loop_pair]: loop 0:
-    Source: 'tests/src/loops.rs', lines 184:0-205:1 *)
-Fixpoint list_nth_mut_loop_pair_loop
-  (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
-  result ((T * T) * (T -> result (List_t T)) * (T -> result (List_t T)))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls0 with
-    | List_Cons x0 tl0 =>
-      match ls1 with
-      | List_Cons x1 tl1 =>
-        if i s= 0%u32
-        then
-          let back'a := fun (ret : T) => Ok (List_Cons ret tl0) in
-          let back'b := fun (ret : T) => Ok (List_Cons ret tl1) in
-          Ok ((x0, x1), back'a, back'b)
-        else (
-          i1 <- u32_sub i 1%u32;
-          t <- list_nth_mut_loop_pair_loop T n1 tl0 tl1 i1;
-          let '(p, back'a, back'b) := t in
-          let back'a1 :=
-            fun (ret : T) => tl01 <- back'a ret; Ok (List_Cons x0 tl01) in
-          let back'b1 :=
-            fun (ret : T) => tl11 <- back'b ret; Ok (List_Cons x1 tl11) in
-          Ok (p, back'a1, back'b1))
-      | List_Nil => Fail_ Failure
-      end
-    | List_Nil => Fail_ Failure
-    end
-  end
+  admit
 .
 
 (** [loops::list_nth_mut_loop_pair]:
@@ -391,31 +186,7 @@ Definition list_nth_mut_loop_pair
   (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
   result ((T * T) * (T -> result (List_t T)) * (T -> result (List_t T)))
   :=
-  list_nth_mut_loop_pair_loop T n ls0 ls1 i
-.
-
-(** [loops::list_nth_shared_loop_pair]: loop 0:
-    Source: 'tests/src/loops.rs', lines 208:0-229:1 *)
-Fixpoint list_nth_shared_loop_pair_loop
-  (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
-  result (T * T)
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls0 with
-    | List_Cons x0 tl0 =>
-      match ls1 with
-      | List_Cons x1 tl1 =>
-        if i s= 0%u32
-        then Ok (x0, x1)
-        else (
-          i1 <- u32_sub i 1%u32; list_nth_shared_loop_pair_loop T n1 tl0 tl1 i1)
-      | List_Nil => Fail_ Failure
-      end
-    | List_Nil => Fail_ Failure
-    end
-  end
+  admit
 .
 
 (** [loops::list_nth_shared_loop_pair]:
@@ -424,43 +195,7 @@ Definition list_nth_shared_loop_pair
   (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
   result (T * T)
   :=
-  list_nth_shared_loop_pair_loop T n ls0 ls1 i
-.
-
-(** [loops::list_nth_mut_loop_pair_merge]: loop 0:
-    Source: 'tests/src/loops.rs', lines 233:0-248:1 *)
-Fixpoint list_nth_mut_loop_pair_merge_loop
-  (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
-  result ((T * T) * ((T * T) -> result ((List_t T) * (List_t T))))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls0 with
-    | List_Cons x0 tl0 =>
-      match ls1 with
-      | List_Cons x1 tl1 =>
-        if i s= 0%u32
-        then
-          let back :=
-            fun (ret : (T * T)) =>
-              let (t, t1) := ret in Ok (List_Cons t tl0, List_Cons t1 tl1) in
-          Ok ((x0, x1), back)
-        else (
-          i1 <- u32_sub i 1%u32;
-          p <- list_nth_mut_loop_pair_merge_loop T n1 tl0 tl1 i1;
-          let (p1, back) := p in
-          let back1 :=
-            fun (ret : (T * T)) =>
-              p2 <- back ret;
-              let (tl01, tl11) := p2 in
-              Ok (List_Cons x0 tl01, List_Cons x1 tl11) in
-          Ok (p1, back1))
-      | List_Nil => Fail_ Failure
-      end
-    | List_Nil => Fail_ Failure
-    end
-  end
+  admit
 .
 
 (** [loops::list_nth_mut_loop_pair_merge]:
@@ -469,32 +204,7 @@ Definition list_nth_mut_loop_pair_merge
   (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
   result ((T * T) * ((T * T) -> result ((List_t T) * (List_t T))))
   :=
-  list_nth_mut_loop_pair_merge_loop T n ls0 ls1 i
-.
-
-(** [loops::list_nth_shared_loop_pair_merge]: loop 0:
-    Source: 'tests/src/loops.rs', lines 251:0-266:1 *)
-Fixpoint list_nth_shared_loop_pair_merge_loop
-  (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
-  result (T * T)
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls0 with
-    | List_Cons x0 tl0 =>
-      match ls1 with
-      | List_Cons x1 tl1 =>
-        if i s= 0%u32
-        then Ok (x0, x1)
-        else (
-          i1 <- u32_sub i 1%u32;
-          list_nth_shared_loop_pair_merge_loop T n1 tl0 tl1 i1)
-      | List_Nil => Fail_ Failure
-      end
-    | List_Nil => Fail_ Failure
-    end
-  end
+  admit
 .
 
 (** [loops::list_nth_shared_loop_pair_merge]:
@@ -503,38 +213,7 @@ Definition list_nth_shared_loop_pair_merge
   (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
   result (T * T)
   :=
-  list_nth_shared_loop_pair_merge_loop T n ls0 ls1 i
-.
-
-(** [loops::list_nth_mut_shared_loop_pair]: loop 0:
-    Source: 'tests/src/loops.rs', lines 269:0-284:1 *)
-Fixpoint list_nth_mut_shared_loop_pair_loop
-  (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
-  result ((T * T) * (T -> result (List_t T)))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls0 with
-    | List_Cons x0 tl0 =>
-      match ls1 with
-      | List_Cons x1 tl1 =>
-        if i s= 0%u32
-        then
-          let back := fun (ret : T) => Ok (List_Cons ret tl0) in
-          Ok ((x0, x1), back)
-        else (
-          i1 <- u32_sub i 1%u32;
-          p <- list_nth_mut_shared_loop_pair_loop T n1 tl0 tl1 i1;
-          let (p1, back) := p in
-          let back1 :=
-            fun (ret : T) => tl01 <- back ret; Ok (List_Cons x0 tl01) in
-          Ok (p1, back1))
-      | List_Nil => Fail_ Failure
-      end
-    | List_Nil => Fail_ Failure
-    end
-  end
+  admit
 .
 
 (** [loops::list_nth_mut_shared_loop_pair]:
@@ -543,38 +222,7 @@ Definition list_nth_mut_shared_loop_pair
   (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
   result ((T * T) * (T -> result (List_t T)))
   :=
-  list_nth_mut_shared_loop_pair_loop T n ls0 ls1 i
-.
-
-(** [loops::list_nth_mut_shared_loop_pair_merge]: loop 0:
-    Source: 'tests/src/loops.rs', lines 288:0-303:1 *)
-Fixpoint list_nth_mut_shared_loop_pair_merge_loop
-  (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
-  result ((T * T) * (T -> result (List_t T)))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls0 with
-    | List_Cons x0 tl0 =>
-      match ls1 with
-      | List_Cons x1 tl1 =>
-        if i s= 0%u32
-        then
-          let back := fun (ret : T) => Ok (List_Cons ret tl0) in
-          Ok ((x0, x1), back)
-        else (
-          i1 <- u32_sub i 1%u32;
-          p <- list_nth_mut_shared_loop_pair_merge_loop T n1 tl0 tl1 i1;
-          let (p1, back) := p in
-          let back1 :=
-            fun (ret : T) => tl01 <- back ret; Ok (List_Cons x0 tl01) in
-          Ok (p1, back1))
-      | List_Nil => Fail_ Failure
-      end
-    | List_Nil => Fail_ Failure
-    end
-  end
+  admit
 .
 
 (** [loops::list_nth_mut_shared_loop_pair_merge]:
@@ -583,38 +231,7 @@ Definition list_nth_mut_shared_loop_pair_merge
   (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
   result ((T * T) * (T -> result (List_t T)))
   :=
-  list_nth_mut_shared_loop_pair_merge_loop T n ls0 ls1 i
-.
-
-(** [loops::list_nth_shared_mut_loop_pair]: loop 0:
-    Source: 'tests/src/loops.rs', lines 307:0-322:1 *)
-Fixpoint list_nth_shared_mut_loop_pair_loop
-  (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
-  result ((T * T) * (T -> result (List_t T)))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls0 with
-    | List_Cons x0 tl0 =>
-      match ls1 with
-      | List_Cons x1 tl1 =>
-        if i s= 0%u32
-        then
-          let back := fun (ret : T) => Ok (List_Cons ret tl1) in
-          Ok ((x0, x1), back)
-        else (
-          i1 <- u32_sub i 1%u32;
-          p <- list_nth_shared_mut_loop_pair_loop T n1 tl0 tl1 i1;
-          let (p1, back) := p in
-          let back1 :=
-            fun (ret : T) => tl11 <- back ret; Ok (List_Cons x1 tl11) in
-          Ok (p1, back1))
-      | List_Nil => Fail_ Failure
-      end
-    | List_Nil => Fail_ Failure
-    end
-  end
+  admit
 .
 
 (** [loops::list_nth_shared_mut_loop_pair]:
@@ -623,38 +240,7 @@ Definition list_nth_shared_mut_loop_pair
   (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
   result ((T * T) * (T -> result (List_t T)))
   :=
-  list_nth_shared_mut_loop_pair_loop T n ls0 ls1 i
-.
-
-(** [loops::list_nth_shared_mut_loop_pair_merge]: loop 0:
-    Source: 'tests/src/loops.rs', lines 326:0-341:1 *)
-Fixpoint list_nth_shared_mut_loop_pair_merge_loop
-  (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
-  result ((T * T) * (T -> result (List_t T)))
-  :=
-  match n with
-  | O => Fail_ OutOfFuel
-  | S n1 =>
-    match ls0 with
-    | List_Cons x0 tl0 =>
-      match ls1 with
-      | List_Cons x1 tl1 =>
-        if i s= 0%u32
-        then
-          let back := fun (ret : T) => Ok (List_Cons ret tl1) in
-          Ok ((x0, x1), back)
-        else (
-          i1 <- u32_sub i 1%u32;
-          p <- list_nth_shared_mut_loop_pair_merge_loop T n1 tl0 tl1 i1;
-          let (p1, back) := p in
-          let back1 :=
-            fun (ret : T) => tl11 <- back ret; Ok (List_Cons x1 tl11) in
-          Ok (p1, back1))
-      | List_Nil => Fail_ Failure
-      end
-    | List_Nil => Fail_ Failure
-    end
-  end
+  admit
 .
 
 (** [loops::list_nth_shared_mut_loop_pair_merge]:
@@ -663,7 +249,7 @@ Definition list_nth_shared_mut_loop_pair_merge
   (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
   result ((T * T) * (T -> result (List_t T)))
   :=
-  list_nth_shared_mut_loop_pair_merge_loop T n ls0 ls1 i
+  admit
 .
 
 (** [loops::ignore_input_mut_borrow]: loop 0:
-- 
cgit v1.2.3


From 092dae81f5f90281b634e229102d2dff7f5c3fd7 Mon Sep 17 00:00:00 2001
From: Aymeric Fromherz
Date: Fri, 31 May 2024 13:09:37 +0200
Subject: Regenerate test output

---
 tests/coq/arrays/Arrays.v                    |  68 +++-
 tests/coq/demo/Demo.v                        |  27 +-
 tests/coq/hashmap/Hashmap_Funs.v             | 198 +++++++++++-
 tests/coq/hashmap_on_disk/HashmapMain_Funs.v | 205 +++++++++++-
 tests/coq/misc/Loops.v                       | 446 ++++++++++++++++++++++++++-
 5 files changed, 908 insertions(+), 36 deletions(-)

(limited to 'tests/coq')

diff --git a/tests/coq/arrays/Arrays.v b/tests/coq/arrays/Arrays.v
index b7bef7c7..35dea58c 100644
--- a/tests/coq/arrays/Arrays.v
+++ b/tests/coq/arrays/Arrays.v
@@ -375,15 +375,58 @@ Definition non_copyable_array : result unit :=
   take_array_t (mk_array AB_t 2%usize [ AB_A; AB_B ])
 .
 
+(** [arrays::sum]: loop 0:
+    Source: 'tests/src/arrays.rs', lines 242:0-250:1 *)
+Fixpoint sum_loop
+  (n : nat) (s : slice u32) (sum1 : u32) (i : usize) : result u32 :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    let i1 := slice_len u32 s in
+    if i s< i1
+    then (
+      i2 <- slice_index_usize u32 s i;
+      sum3 <- u32_add sum1 i2;
+      i3 <- usize_add i 1%usize;
+      sum_loop n1 s sum3 i3)
+    else Ok sum1
+  end
+.
+
 (** [arrays::sum]:
     Source: 'tests/src/arrays.rs', lines 242:0-242:28 *)
 Definition sum (n : nat) (s : slice u32) : result u32 :=
-  admit.
+  sum_loop n s 0%u32 0%usize
+.
+
+(** [arrays::sum2]: loop 0:
+    Source: 'tests/src/arrays.rs', lines 252:0-261:1 *)
+Fixpoint sum2_loop
+  (n : nat) (s : slice u32) (s2 : slice u32) (sum1 : u32) (i : usize) :
+  result u32
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    let i1 := slice_len u32 s in
+    if i s< i1
+    then (
+      i2 <- slice_index_usize u32 s i;
+      i3 <- slice_index_usize u32 s2 i;
+      i4 <- u32_add i2 i3;
+      sum3 <- u32_add sum1 i4;
+      i5 <- usize_add i 1%usize;
+      sum2_loop n1 s s2 sum3 i5)
+    else Ok sum1
+  end
+.
 
 (** [arrays::sum2]:
     Source: 'tests/src/arrays.rs', lines 252:0-252:41 *)
 Definition sum2 (n : nat) (s : slice u32) (s2 : slice u32) : result u32 :=
-  admit
+  let i := slice_len u32 s in
+  let i1 := slice_len u32 s2 in
+  if negb (i s= i1) then Fail_ Failure else sum2_loop n s s2 0%u32 0%usize
 .
 
 (** [arrays::f0]:
@@ -464,10 +507,29 @@ Definition ite : result unit :=
   Ok tt
 .
 
+(** [arrays::zero_slice]: loop 0:
+    Source: 'tests/src/arrays.rs', lines 303:0-310:1 *)
+Fixpoint zero_slice_loop
+  (n : nat) (a : slice u8) (i : usize) (len : usize) : result (slice u8) :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    if i s< len
+    then (
+      p <- slice_index_mut_usize u8 a i;
+      let (_, index_mut_back) := p in
+      i1 <- usize_add i 1%usize;
+      a1 <- index_mut_back 0%u8;
+      zero_slice_loop n1 a1 i1 len)
+    else Ok a
+  end
+.
+
 (** [arrays::zero_slice]:
     Source: 'tests/src/arrays.rs', lines 303:0-303:31 *)
 Definition zero_slice (n : nat) (a : slice u8) : result (slice u8) :=
-  admit.
+  let len := slice_len u8 a in zero_slice_loop n a 0%usize len
+.
 
 (** [arrays::iter_mut_slice]: loop 0:
     Source: 'tests/src/arrays.rs', lines 312:0-318:1 *)
diff --git a/tests/coq/demo/Demo.v b/tests/coq/demo/Demo.v
index 14b1ca9d..8d8f840d 100644
--- a/tests/coq/demo/Demo.v
+++ b/tests/coq/demo/Demo.v
@@ -90,13 +90,38 @@ Fixpoint list_nth_mut
   end
 .
 
+(** [demo::list_nth_mut1]: loop 0:
+    Source: 'tests/src/demo.rs', lines 69:0-78:1 *)
+Fixpoint list_nth_mut1_loop
+  (T : Type) (n : nat) (l : CList_t T) (i : u32) :
+  result (T * (T -> result (CList_t T)))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match l with
+    | CList_CCons x tl =>
+      if i s= 0%u32
+      then let back := fun (ret : T) => Ok (CList_CCons ret tl) in Ok (x, back)
+      else (
+        i1 <- u32_sub i 1%u32;
+        p <- list_nth_mut1_loop T n1 tl i1;
+        let (t, back) := p in
+        let back1 := fun (ret : T) => tl1 <- back ret; Ok (CList_CCons x tl1)
+          in
+        Ok (t, back1))
+    | CList_CNil => Fail_ Failure
+    end
+  end
+.
+
 (** [demo::list_nth_mut1]:
     Source: 'tests/src/demo.rs', lines 69:0-69:77 *)
 Definition list_nth_mut1
   (T : Type) (n : nat) (l : CList_t T) (i : u32) :
   result (T * (T -> result (CList_t T)))
   :=
-  admit
+  list_nth_mut1_loop T n l i
 .
 
 (** [demo::i32_id]:
diff --git a/tests/coq/hashmap/Hashmap_Funs.v b/tests/coq/hashmap/Hashmap_Funs.v
index b5c2bff0..6a4f8e99 100644
--- a/tests/coq/hashmap/Hashmap_Funs.v
+++ b/tests/coq/hashmap/Hashmap_Funs.v
@@ -67,11 +67,41 @@ Definition hashMap_new (T : Type) (n : nat) : result (HashMap_t T) :=
   hashMap_new_with_capacity T n 32%usize 4%usize 5%usize
 .
 
+(** [hashmap::{hashmap::HashMap<T>}::clear]: loop 0:
+    Source: 'tests/src/hashmap.rs', lines 80:4-88:5 *)
+Fixpoint hashMap_clear_loop
+  (T : Type) (n : nat) (slots : alloc_vec_Vec (List_t T)) (i : usize) :
+  result (alloc_vec_Vec (List_t T))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    let i1 := alloc_vec_Vec_len (List_t T) slots in
+    if i s< i1
+    then (
+      p <-
+        alloc_vec_Vec_index_mut (List_t T) usize
+          (core_slice_index_SliceIndexUsizeSliceTInst (List_t T)) slots i;
+      let (_, index_mut_back) := p in
+      i2 <- usize_add i 1%usize;
+      slots1 <- index_mut_back List_Nil;
+      hashMap_clear_loop T n1 slots1 i2)
+    else Ok slots
+  end
+.
+
 (** [hashmap::{hashmap::HashMap<T>}::clear]:
     Source: 'tests/src/hashmap.rs', lines 80:4-80:27 *)
 Definition hashMap_clear
   (T : Type) (n : nat) (self : HashMap_t T) : result (HashMap_t T) :=
-  admit
+  hm <- hashMap_clear_loop T n self.(hashMap_slots) 0%usize;
+  Ok
+    {|
+      hashMap_num_entries := 0%usize;
+      hashMap_max_load_factor := self.(hashMap_max_load_factor);
+      hashMap_max_load := self.(hashMap_max_load);
+      hashMap_slots := hm
+    |}
 .
 
 (** [hashmap::{hashmap::HashMap<T>}::len]:
@@ -80,13 +110,35 @@ Definition hashMap_len (T : Type) (self : HashMap_t T) : result usize :=
   Ok self.(hashMap_num_entries)
 .
 
+(** [hashmap::{hashmap::HashMap<T>}::insert_in_list]: loop 0:
+    Source: 'tests/src/hashmap.rs', lines 97:4-114:5 *)
+Fixpoint hashMap_insert_in_list_loop
+  (T : Type) (n : nat) (key : usize) (value : T) (ls : List_t T) :
+  result (bool * (List_t T))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls with
+    | List_Cons ckey cvalue tl =>
+      if ckey s= key
+      then Ok (false, List_Cons ckey value tl)
+      else (
+        p <- hashMap_insert_in_list_loop T n1 key value tl;
+        let (b, tl1) := p in
+        Ok (b, List_Cons ckey cvalue tl1))
+    | List_Nil => Ok (true, List_Cons key value List_Nil)
+    end
+  end
+.
+
 (** [hashmap::{hashmap::HashMap<T>}::insert_in_list]:
     Source: 'tests/src/hashmap.rs', lines 97:4-97:71 *)
 Definition hashMap_insert_in_list
   (T : Type) (n : nat) (key : usize) (value : T) (ls : List_t T) :
   result (bool * (List_t T))
   :=
-  admit
+  hashMap_insert_in_list_loop T n key value ls
 .
 
 (** [hashmap::{hashmap::HashMap<T>}::insert_no_resize]:
@@ -127,13 +179,57 @@ Definition hashMap_insert_no_resize
       |})
 .
 
+(** [hashmap::{hashmap::HashMap<T>}::move_elements_from_list]: loop 0:
+    Source: 'tests/src/hashmap.rs', lines 183:4-196:5 *)
+Fixpoint hashMap_move_elements_from_list_loop
+  (T : Type) (n : nat) (ntable : HashMap_t T) (ls : List_t T) :
+  result (HashMap_t T)
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls with
+    | List_Cons k v tl =>
+      ntable1 <- hashMap_insert_no_resize T n1 ntable k v;
+      hashMap_move_elements_from_list_loop T n1 ntable1 tl
+    | List_Nil => Ok ntable
+    end
+  end
+.
+
 (** [hashmap::{hashmap::HashMap<T>}::move_elements_from_list]:
     Source: 'tests/src/hashmap.rs', lines 183:4-183:72 *)
 Definition hashMap_move_elements_from_list
   (T : Type) (n : nat) (ntable : HashMap_t T) (ls : List_t T) :
   result (HashMap_t T)
   :=
-  admit
+  hashMap_move_elements_from_list_loop T n ntable ls
+.
+
+(** [hashmap::{hashmap::HashMap<T>}::move_elements]: loop 0:
+    Source: 'tests/src/hashmap.rs', lines 171:4-180:5 *)
+Fixpoint hashMap_move_elements_loop
+  (T : Type) (n : nat) (ntable : HashMap_t T)
+  (slots : alloc_vec_Vec (List_t T)) (i : usize) :
+  result ((alloc_vec_Vec (List_t T)) * (HashMap_t T))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    let i1 := alloc_vec_Vec_len (List_t T) slots in
+    if i s< i1
+    then (
+      p <-
+        alloc_vec_Vec_index_mut (List_t T) usize
+          (core_slice_index_SliceIndexUsizeSliceTInst (List_t T)) slots i;
+      let (l, index_mut_back) := p in
+      let (ls, l1) := core_mem_replace (List_t T) l List_Nil in
+      ntable1 <- hashMap_move_elements_from_list T n1 ntable ls;
+      i2 <- usize_add i 1%usize;
+      slots1 <- index_mut_back l1;
+      hashMap_move_elements_loop T n1 ntable1 slots1 i2)
+    else Ok (ntable, slots)
+  end
 .
 
 (** [hashmap::{hashmap::HashMap<T>}::move_elements]:
@@ -143,7 +239,7 @@ Definition hashMap_move_elements
   (slots : alloc_vec_Vec (List_t T)) (i : usize) :
   result ((HashMap_t T) * (alloc_vec_Vec (List_t T)))
   :=
-  admit
+  hashMap_move_elements_loop T n ntable slots i
 .
 
 (** [hashmap::{hashmap::HashMap<T>}::try_resize]:
@@ -191,11 +287,28 @@ Definition hashMap_insert
   else Ok self1
 .
 
+(** [hashmap::{hashmap::HashMap<T>}::contains_key_in_list]: loop 0:
+    Source: 'tests/src/hashmap.rs', lines 206:4-219:5 *)
+Fixpoint hashMap_contains_key_in_list_loop
+  (T : Type) (n : nat) (key : usize) (ls : List_t T) : result bool :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls with
+    | List_Cons ckey _ tl =>
+      if ckey s= key
+      then Ok true
+      else hashMap_contains_key_in_list_loop T n1 key tl
+    | List_Nil => Ok false
+    end
+  end
+.
+
 (** [hashmap::{hashmap::HashMap<T>}::contains_key_in_list]:
     Source: 'tests/src/hashmap.rs', lines 206:4-206:68 *)
 Definition hashMap_contains_key_in_list
   (T : Type) (n : nat) (key : usize) (ls : List_t T) : result bool :=
-  admit
+  hashMap_contains_key_in_list_loop T n key ls
 .
 
 (** [hashmap::{hashmap::HashMap<T>}::contains_key]:
@@ -212,11 +325,26 @@ Definition hashMap_contains_key
   hashMap_contains_key_in_list T n key l
 .
 
+(** [hashmap::{hashmap::HashMap<T>}::get_in_list]: loop 0:
+    Source: 'tests/src/hashmap.rs', lines 224:4-237:5 *)
+Fixpoint hashMap_get_in_list_loop
+  (T : Type) (n : nat) (key : usize) (ls : List_t T) : result T :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls with
+    | List_Cons ckey cvalue tl =>
+      if ckey s= key then Ok cvalue else hashMap_get_in_list_loop T n1 key tl
+    | List_Nil => Fail_ Failure
+    end
+  end
+.
+
 (** [hashmap::{hashmap::HashMap<T>}::get_in_list]:
     Source: 'tests/src/hashmap.rs', lines 224:4-224:70 *)
 Definition hashMap_get_in_list
   (T : Type) (n : nat) (key : usize) (ls : List_t T) : result T :=
-  admit
+  hashMap_get_in_list_loop T n key ls
 .
 
 (** [hashmap::{hashmap::HashMap<T>}::get]:
@@ -233,13 +361,39 @@ Definition hashMap_get
   hashMap_get_in_list T n key l
 .
 
+(** [hashmap::{hashmap::HashMap<T>}::get_mut_in_list]: loop 0:
+    Source: 'tests/src/hashmap.rs', lines 245:4-254:5 *)
+Fixpoint hashMap_get_mut_in_list_loop
+  (T : Type) (n : nat) (ls : List_t T) (key : usize) :
+  result (T * (T -> result (List_t T)))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls with
+    | List_Cons ckey cvalue tl =>
+      if ckey s= key
+      then
+        let back := fun (ret : T) => Ok (List_Cons ckey ret tl) in
+        Ok (cvalue, back)
+      else (
+        p <- hashMap_get_mut_in_list_loop T n1 tl key;
+        let (t, back) := p in
+        let back1 :=
+          fun (ret : T) => tl1 <- back ret; Ok (List_Cons ckey cvalue tl1) in
+        Ok (t, back1))
+    | List_Nil => Fail_ Failure
+    end
+  end
+.
+
 (** [hashmap::{hashmap::HashMap<T>}::get_mut_in_list]:
     Source: 'tests/src/hashmap.rs', lines 245:4-245:86 *)
 Definition hashMap_get_mut_in_list
   (T : Type) (n : nat) (ls : List_t T) (key : usize) :
   result (T * (T -> result (List_t T)))
   :=
-  admit
+  hashMap_get_mut_in_list_loop T n ls key
 .
 
 (** [hashmap::{hashmap::HashMap<T>}::get_mut]:
@@ -272,13 +426,41 @@ Definition hashMap_get_mut
   Ok (t, back)
 .
 
+(** [hashmap::{hashmap::HashMap<T>}::remove_from_list]: loop 0:
+    Source: 'tests/src/hashmap.rs', lines 265:4-291:5 *)
+Fixpoint hashMap_remove_from_list_loop
+  (T : Type) (n : nat) (key : usize) (ls : List_t T) :
+  result ((option T) * (List_t T))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls with
+    | List_Cons ckey t tl =>
+      if ckey s= key
+      then
+        let (mv_ls, _) :=
+          core_mem_replace (List_t T) (List_Cons ckey t tl) List_Nil in
+        match mv_ls with
+        | List_Cons _ cvalue tl1 => Ok (Some cvalue, tl1)
+        | List_Nil => Fail_ Failure
+        end
+      else (
+        p <- hashMap_remove_from_list_loop T n1 key tl;
+        let (o, tl1) := p in
+        Ok (o, List_Cons ckey t tl1))
+    | List_Nil => Ok (None, List_Nil)
+    end
+  end
+.
+
 (** [hashmap::{hashmap::HashMap<T>}::remove_from_list]:
     Source: 'tests/src/hashmap.rs', lines 265:4-265:69 *)
 Definition hashMap_remove_from_list
   (T : Type) (n : nat) (key : usize) (ls : List_t T) :
   result ((option T) * (List_t T))
   :=
-  admit
+  hashMap_remove_from_list_loop T n key ls
 .
 
 (** [hashmap::{hashmap::HashMap<T>}::remove]:
diff --git a/tests/coq/hashmap_on_disk/HashmapMain_Funs.v b/tests/coq/hashmap_on_disk/HashmapMain_Funs.v
index e37b111c..fd7f7f16 100644
--- a/tests/coq/hashmap_on_disk/HashmapMain_Funs.v
+++ b/tests/coq/hashmap_on_disk/HashmapMain_Funs.v
@@ -74,13 +74,44 @@ Definition hashmap_HashMap_new
   hashmap_HashMap_new_with_capacity T n 32%usize 4%usize 5%usize
 .
 
+(** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::clear]: loop 0:
+    Source: 'tests/src/hashmap.rs', lines 80:4-88:5 *)
+Fixpoint hashmap_HashMap_clear_loop
+  (T : Type) (n : nat) (slots : alloc_vec_Vec (hashmap_List_t T)) (i : usize) :
+  result (alloc_vec_Vec (hashmap_List_t T))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    let i1 := alloc_vec_Vec_len (hashmap_List_t T) slots in
+    if i s< i1
+    then (
+      p <-
+        alloc_vec_Vec_index_mut (hashmap_List_t T) usize
+          (core_slice_index_SliceIndexUsizeSliceTInst (hashmap_List_t T)) slots
+          i;
+      let (_, index_mut_back) := p in
+      i2 <- usize_add i 1%usize;
+      slots1 <- index_mut_back Hashmap_List_Nil;
+      hashmap_HashMap_clear_loop T n1 slots1 i2)
+    else Ok slots
+  end
+.
+
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::clear]:
     Source: 'tests/src/hashmap.rs', lines 80:4-80:27 *)
 Definition hashmap_HashMap_clear
   (T : Type) (n : nat) (self : hashmap_HashMap_t T) :
   result (hashmap_HashMap_t T)
   :=
-  admit
+  hm <- hashmap_HashMap_clear_loop T n self.(hashmap_HashMap_slots) 0%usize;
+  Ok
+    {|
+      hashmap_HashMap_num_entries := 0%usize;
+      hashmap_HashMap_max_load_factor := self.(hashmap_HashMap_max_load_factor);
+      hashmap_HashMap_max_load := self.(hashmap_HashMap_max_load);
+      hashmap_HashMap_slots := hm
+    |}
 .
 
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::len]:
@@ -90,13 +121,36 @@ Definition hashmap_HashMap_len
   Ok self.(hashmap_HashMap_num_entries)
 .
 
+(** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::insert_in_list]: loop 0:
+    Source: 'tests/src/hashmap.rs', lines 97:4-114:5 *)
+Fixpoint hashmap_HashMap_insert_in_list_loop
+  (T : Type) (n : nat) (key : usize) (value : T) (ls : hashmap_List_t T) :
+  result (bool * (hashmap_List_t T))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls with
+    | Hashmap_List_Cons ckey cvalue tl =>
+      if ckey s= key
+      then Ok (false, Hashmap_List_Cons ckey value tl)
+      else (
+        p <- hashmap_HashMap_insert_in_list_loop T n1 key value tl;
+        let (b, tl1) := p in
+        Ok (b, Hashmap_List_Cons ckey cvalue tl1))
+    | Hashmap_List_Nil =>
+      Ok (true, Hashmap_List_Cons key value Hashmap_List_Nil)
+    end
+  end
+.
+
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::insert_in_list]:
     Source: 'tests/src/hashmap.rs', lines 97:4-97:71 *)
 Definition hashmap_HashMap_insert_in_list
   (T : Type) (n : nat) (key : usize) (value : T) (ls : hashmap_List_t T) :
   result (bool * (hashmap_List_t T))
   :=
-  admit
+  hashmap_HashMap_insert_in_list_loop T n key value ls
 .
 
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::insert_no_resize]:
@@ -139,13 +193,58 @@ Definition hashmap_HashMap_insert_no_resize
       |})
 .
 
+(** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::move_elements_from_list]: loop 0:
+    Source: 'tests/src/hashmap.rs', lines 183:4-196:5 *)
+Fixpoint hashmap_HashMap_move_elements_from_list_loop
+  (T : Type) (n : nat) (ntable : hashmap_HashMap_t T) (ls : hashmap_List_t T) :
+  result (hashmap_HashMap_t T)
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls with
+    | Hashmap_List_Cons k v tl =>
+      ntable1 <- hashmap_HashMap_insert_no_resize T n1 ntable k v;
+      hashmap_HashMap_move_elements_from_list_loop T n1 ntable1 tl
+    | Hashmap_List_Nil => Ok ntable
+    end
+  end
+.
+
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::move_elements_from_list]:
     Source: 'tests/src/hashmap.rs', lines 183:4-183:72 *)
 Definition hashmap_HashMap_move_elements_from_list
   (T : Type) (n : nat) (ntable : hashmap_HashMap_t T) (ls : hashmap_List_t T) :
   result (hashmap_HashMap_t T)
   :=
-  admit
+  hashmap_HashMap_move_elements_from_list_loop T n ntable ls
+.
+
+(** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::move_elements]: loop 0:
+    Source: 'tests/src/hashmap.rs', lines 171:4-180:5 *)
+Fixpoint hashmap_HashMap_move_elements_loop
+  (T : Type) (n : nat) (ntable : hashmap_HashMap_t T)
+  (slots : alloc_vec_Vec (hashmap_List_t T)) (i : usize) :
+  result ((alloc_vec_Vec (hashmap_List_t T)) * (hashmap_HashMap_t T))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    let i1 := alloc_vec_Vec_len (hashmap_List_t T) slots in
+    if i s< i1
+    then (
+      p <-
+        alloc_vec_Vec_index_mut (hashmap_List_t T) usize
+          (core_slice_index_SliceIndexUsizeSliceTInst (hashmap_List_t T)) slots
+          i;
+      let (l, index_mut_back) := p in
+      let (ls, l1) := core_mem_replace (hashmap_List_t T) l Hashmap_List_Nil in
+      ntable1 <- hashmap_HashMap_move_elements_from_list T n1 ntable ls;
+      i2 <- usize_add i 1%usize;
+      slots1 <- index_mut_back l1;
+      hashmap_HashMap_move_elements_loop T n1 ntable1 slots1 i2)
+    else Ok (ntable, slots)
+  end
 .
 
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::move_elements]:
@@ -155,7 +254,7 @@ Definition hashmap_HashMap_move_elements
   (slots : alloc_vec_Vec (hashmap_List_t T)) (i : usize) :
   result ((hashmap_HashMap_t T) * (alloc_vec_Vec (hashmap_List_t T)))
   :=
-  admit
+  hashmap_HashMap_move_elements_loop T n ntable slots i
 .
 
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::try_resize]:
@@ -208,11 +307,28 @@ Definition hashmap_HashMap_insert
   else Ok self1
 .
 
+(** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::contains_key_in_list]: loop 0:
+    Source: 'tests/src/hashmap.rs', lines 206:4-219:5 *)
+Fixpoint hashmap_HashMap_contains_key_in_list_loop
+  (T : Type) (n : nat) (key : usize) (ls : hashmap_List_t T) : result bool :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls with
+    | Hashmap_List_Cons ckey _ tl =>
+      if ckey s= key
+      then Ok true
+      else hashmap_HashMap_contains_key_in_list_loop T n1 key tl
+    | Hashmap_List_Nil => Ok false
+    end
+  end
+.
+
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::contains_key_in_list]:
     Source: 'tests/src/hashmap.rs', lines 206:4-206:68 *)
 Definition hashmap_HashMap_contains_key_in_list
   (T : Type) (n : nat) (key : usize) (ls : hashmap_List_t T) : result bool :=
-  admit
+  hashmap_HashMap_contains_key_in_list_loop T n key ls
 .
 
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::contains_key]:
@@ -231,11 +347,28 @@ Definition hashmap_HashMap_contains_key
   hashmap_HashMap_contains_key_in_list T n key l
 .
 
+(** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::get_in_list]: loop 0:
+    Source: 'tests/src/hashmap.rs', lines 224:4-237:5 *)
+Fixpoint hashmap_HashMap_get_in_list_loop
+  (T : Type) (n : nat) (key : usize) (ls : hashmap_List_t T) : result T :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls with
+    | Hashmap_List_Cons ckey cvalue tl =>
+      if ckey s= key
+      then Ok cvalue
+      else hashmap_HashMap_get_in_list_loop T n1 key tl
+    | Hashmap_List_Nil => Fail_ Failure
+    end
+  end
+.
+
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::get_in_list]:
     Source: 'tests/src/hashmap.rs', lines 224:4-224:70 *)
 Definition hashmap_HashMap_get_in_list
   (T : Type) (n : nat) (key : usize) (ls : hashmap_List_t T) : result T :=
-  admit
+  hashmap_HashMap_get_in_list_loop T n key ls
 .
 
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::get]:
@@ -252,13 +385,40 @@ Definition hashmap_HashMap_get
   hashmap_HashMap_get_in_list T n key l
 .
 
+(** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::get_mut_in_list]: loop 0:
+    Source: 'tests/src/hashmap.rs', lines 245:4-254:5 *)
+Fixpoint hashmap_HashMap_get_mut_in_list_loop
+  (T : Type) (n : nat) (ls : hashmap_List_t T) (key : usize) :
+  result (T * (T -> result (hashmap_List_t T)))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls with
+    | Hashmap_List_Cons ckey cvalue tl =>
+      if ckey s= key
+      then
+        let back := fun (ret : T) => Ok (Hashmap_List_Cons ckey ret tl) in
+        Ok (cvalue, back)
+      else (
+        p <- hashmap_HashMap_get_mut_in_list_loop T n1 tl key;
+        let (t, back) := p in
+        let back1 :=
+          fun (ret : T) =>
+            tl1 <- back ret; Ok (Hashmap_List_Cons ckey cvalue tl1) in
+        Ok (t, back1))
+    | Hashmap_List_Nil => Fail_ Failure
+    end
+  end
+.
+
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::get_mut_in_list]:
     Source: 'tests/src/hashmap.rs', lines 245:4-245:86 *)
 Definition hashmap_HashMap_get_mut_in_list
   (T : Type) (n : nat) (ls : hashmap_List_t T) (key : usize) :
   result (T * (T -> result (hashmap_List_t T)))
   :=
-  admit
+  hashmap_HashMap_get_mut_in_list_loop T n ls key
 .
 
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::get_mut]:
@@ -292,13 +452,42 @@ Definition hashmap_HashMap_get_mut
   Ok (t, back)
 .
 
+(** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::remove_from_list]: loop 0:
+    Source: 'tests/src/hashmap.rs', lines 265:4-291:5 *)
+Fixpoint hashmap_HashMap_remove_from_list_loop
+  (T : Type) (n : nat) (key : usize) (ls : hashmap_List_t T) :
+  result ((option T) * (hashmap_List_t T))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls with
+    | Hashmap_List_Cons ckey t tl =>
+      if ckey s= key
+      then
+        let (mv_ls, _) :=
+          core_mem_replace (hashmap_List_t T) (Hashmap_List_Cons ckey t tl)
+            Hashmap_List_Nil in
+        match mv_ls with
+        | Hashmap_List_Cons _ cvalue tl1 => Ok (Some cvalue, tl1)
+        | Hashmap_List_Nil => Fail_ Failure
+        end
+      else (
+        p <- hashmap_HashMap_remove_from_list_loop T n1 key tl;
+        let (o, tl1) := p in
+        Ok (o, Hashmap_List_Cons ckey t tl1))
+    | Hashmap_List_Nil => Ok (None, Hashmap_List_Nil)
+    end
+  end
+.
+
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::remove_from_list]:
     Source: 'tests/src/hashmap.rs', lines 265:4-265:69 *)
 Definition hashmap_HashMap_remove_from_list
   (T : Type) (n : nat) (key : usize) (ls : hashmap_List_t T) :
   result ((option T) * (hashmap_List_t T))
   :=
-  admit
+  hashmap_HashMap_remove_from_list_loop T n key ls
 .
 
 (** [hashmap_main::hashmap::{hashmap_main::hashmap::HashMap<T>}::remove]:
diff --git a/tests/coq/misc/Loops.v b/tests/coq/misc/Loops.v
index bd2b287b..bf0a8bc1 100644
--- a/tests/coq/misc/Loops.v
+++ b/tests/coq/misc/Loops.v
@@ -93,11 +93,32 @@ Definition sum_array (N : usize) (n : nat) (a : array u32 N) : result u32 :=
   sum_array_loop N n a 0%usize 0%u32
 .
 
+(** [loops::clear]: loop 0:
+    Source: 'tests/src/loops.rs', lines 62:0-68:1 *)
+Fixpoint clear_loop
+  (n : nat) (v : alloc_vec_Vec u32) (i : usize) : result (alloc_vec_Vec u32) :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    let i1 := alloc_vec_Vec_len u32 v in
+    if i s< i1
+    then (
+      p <-
+        alloc_vec_Vec_index_mut u32 usize
+          (core_slice_index_SliceIndexUsizeSliceTInst u32) v i;
+      let (_, index_mut_back) := p in
+      i2 <- usize_add i 1%usize;
+      v1 <- index_mut_back 0%u32;
+      clear_loop n1 v1 i2)
+    else Ok v
+  end
+.
+
 (** [loops::clear]:
     Source: 'tests/src/loops.rs', lines 62:0-62:30 *)
 Definition clear
   (n : nat) (v : alloc_vec_Vec u32) : result (alloc_vec_Vec u32) :=
-  admit
+  clear_loop n v 0%usize
 .
 
 (** [loops::List]
@@ -110,10 +131,47 @@ Inductive List_t (T : Type) :=
 Arguments List_Cons { _ }.
 Arguments List_Nil { _ }.
 
+(** [loops::list_mem]: loop 0:
+    Source: 'tests/src/loops.rs', lines 76:0-85:1 *)
+Fixpoint list_mem_loop (n : nat) (x : u32) (ls : List_t u32) : result bool :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls with
+    | List_Cons y tl => if y s= x then Ok true else list_mem_loop n1 x tl
+    | List_Nil => Ok false
+    end
+  end
+.
+
 (** [loops::list_mem]:
     Source: 'tests/src/loops.rs', lines 76:0-76:52 *)
 Definition list_mem (n : nat) (x : u32) (ls : List_t u32) : result bool :=
-  admit
+  list_mem_loop n x ls
+.
+
+(** [loops::list_nth_mut_loop]: loop 0:
+    Source: 'tests/src/loops.rs', lines 88:0-98:1 *)
+Fixpoint list_nth_mut_loop_loop
+  (T : Type) (n : nat) (ls : List_t T) (i : u32) :
+  result (T * (T -> result (List_t T)))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls with
+    | List_Cons x tl =>
+      if i s= 0%u32
+      then let back := fun (ret : T) => Ok (List_Cons ret tl) in Ok (x, back)
+      else (
+        i1 <- u32_sub i 1%u32;
+        p <- list_nth_mut_loop_loop T n1 tl i1;
+        let (t, back) := p in
+        let back1 := fun (ret : T) => tl1 <- back ret; Ok (List_Cons x tl1) in
+        Ok (t, back1))
+    | List_Nil => Fail_ Failure
+    end
+  end
 .
 
 (** [loops::list_nth_mut_loop]:
@@ -122,14 +180,56 @@ Definition list_nth_mut_loop
   (T : Type) (n : nat) (ls : List_t T) (i : u32) :
   result (T * (T -> result (List_t T)))
   :=
-  admit
+  list_nth_mut_loop_loop T n ls i
+.
+
+(** [loops::list_nth_shared_loop]: loop 0:
+    Source: 'tests/src/loops.rs', lines 101:0-111:1 *)
+Fixpoint list_nth_shared_loop_loop
+  (T : Type) (n : nat) (ls : List_t T) (i : u32) : result T :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls with
+    | List_Cons x tl =>
+      if i s= 0%u32
+      then Ok x
+      else (i1 <- u32_sub i 1%u32; list_nth_shared_loop_loop T n1 tl i1)
+    | List_Nil => Fail_ Failure
+    end
+  end
 .
 
 (** [loops::list_nth_shared_loop]:
     Source: 'tests/src/loops.rs', lines 101:0-101:66 *)
 Definition list_nth_shared_loop
   (T : Type) (n : nat) (ls : List_t T) (i : u32) : result T :=
-  admit
+  list_nth_shared_loop_loop T n ls i
+.
+
+(** [loops::get_elem_mut]: loop 0:
+    Source: 'tests/src/loops.rs', lines 113:0-127:1 *)
+Fixpoint get_elem_mut_loop
+  (n : nat) (x : usize) (ls : List_t usize) :
+  result (usize * (usize -> result (List_t usize)))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls with
+    | List_Cons y tl =>
+      if y s= x
+      then
+        let back := fun (ret : usize) => Ok (List_Cons ret tl) in Ok (y, back)
+      else (
+        p <- get_elem_mut_loop n1 x tl;
+        let (i, back) := p in
+        let back1 := fun (ret : usize) => tl1 <- back ret; Ok (List_Cons y tl1)
+          in
+        Ok (i, back1))
+    | List_Nil => Fail_ Failure
+    end
+  end
 .
 
 (** [loops::get_elem_mut]:
@@ -138,7 +238,28 @@ Definition get_elem_mut
   (n : nat) (slots : alloc_vec_Vec (List_t usize)) (x : usize) :
   result (usize * (usize -> result (alloc_vec_Vec (List_t usize))))
   :=
-  admit
+  p <-
+    alloc_vec_Vec_index_mut (List_t usize) usize
+      (core_slice_index_SliceIndexUsizeSliceTInst (List_t usize)) slots 0%usize;
+  let (ls, index_mut_back) := p in
+  p1 <- get_elem_mut_loop n x ls;
+  let (i, back) := p1 in
+  let back1 := fun (ret : usize) => l <- back ret; index_mut_back l in
+  Ok (i, back1)
+.
+
+(** [loops::get_elem_shared]: loop 0:
+    Source: 'tests/src/loops.rs', lines 129:0-143:1 *)
+Fixpoint get_elem_shared_loop
+  (n : nat) (x : usize) (ls : List_t usize) : result usize :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls with
+    | List_Cons y tl => if y s= x then Ok y else get_elem_shared_loop n1 x tl
+    | List_Nil => Fail_ Failure
+    end
+  end
 .
 
 (** [loops::get_elem_shared]:
@@ -147,7 +268,10 @@ Definition get_elem_shared
   (n : nat) (slots : alloc_vec_Vec (List_t usize)) (x : usize) :
   result usize
   :=
-  admit
+  ls <-
+    alloc_vec_Vec_index (List_t usize) usize
+      (core_slice_index_SliceIndexUsizeSliceTInst (List_t usize)) slots 0%usize;
+  get_elem_shared_loop n x ls
 .
 
 (** [loops::id_mut]:
@@ -164,20 +288,101 @@ Definition id_mut
 Definition id_shared (T : Type) (ls : List_t T) : result (List_t T) :=
   Ok ls.
 
+(** [loops::list_nth_mut_loop_with_id]: loop 0:
+    Source: 'tests/src/loops.rs', lines 154:0-165:1 *)
+Fixpoint list_nth_mut_loop_with_id_loop
+  (T : Type) (n : nat) (i : u32) (ls : List_t T) :
+  result (T * (T -> result (List_t T)))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls with
+    | List_Cons x tl =>
+      if i s= 0%u32
+      then let back := fun (ret : T) => Ok (List_Cons ret tl) in Ok (x, back)
+      else (
+        i1 <- u32_sub i 1%u32;
+        p <- list_nth_mut_loop_with_id_loop T n1 i1 tl;
+        let (t, back) := p in
+        let back1 := fun (ret : T) => tl1 <- back ret; Ok (List_Cons x tl1) in
+        Ok (t, back1))
+    | List_Nil => Fail_ Failure
+    end
+  end
+.
+
 (** [loops::list_nth_mut_loop_with_id]:
     Source: 'tests/src/loops.rs', lines 154:0-154:75 *)
 Definition list_nth_mut_loop_with_id
   (T : Type) (n : nat) (ls : List_t T) (i : u32) :
   result (T * (T -> result (List_t T)))
   :=
-  admit
+  p <- id_mut T ls;
+  let (ls1, id_mut_back) := p in
+  p1 <- list_nth_mut_loop_with_id_loop T n i ls1;
+  let (t, back) := p1 in
+  let back1 := fun (ret : T) => l <- back ret; id_mut_back l in
+  Ok (t, back1)
+.
+
+(** [loops::list_nth_shared_loop_with_id]: loop 0:
+    Source: 'tests/src/loops.rs', lines 168:0-179:1 *)
+Fixpoint list_nth_shared_loop_with_id_loop
+  (T : Type) (n : nat) (i : u32) (ls : List_t T) : result T :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls with
+    | List_Cons x tl =>
+      if i s= 0%u32
+      then Ok x
+      else (
+        i1 <- u32_sub i 1%u32; list_nth_shared_loop_with_id_loop T n1 i1 tl)
+    | List_Nil => Fail_ Failure
+    end
+  end
 .
 
 (** [loops::list_nth_shared_loop_with_id]:
     Source: 'tests/src/loops.rs', lines 168:0-168:70 *)
 Definition list_nth_shared_loop_with_id
   (T : Type) (n : nat) (ls : List_t T) (i : u32) : result T :=
-  admit
+  ls1 <- id_shared T ls; list_nth_shared_loop_with_id_loop T n i ls1
+.
+
+(** [loops::list_nth_mut_loop_pair]: loop 0:
+    Source: 'tests/src/loops.rs', lines 184:0-205:1 *)
+Fixpoint list_nth_mut_loop_pair_loop
+  (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
+  result ((T * T) * (T -> result (List_t T)) * (T -> result (List_t T)))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls0 with
+    | List_Cons x0 tl0 =>
+      match ls1 with
+      | List_Cons x1 tl1 =>
+        if i s= 0%u32
+        then
+          let back'a := fun (ret : T) => Ok (List_Cons ret tl0) in
+          let back'b := fun (ret : T) => Ok (List_Cons ret tl1) in
+          Ok ((x0, x1), back'a, back'b)
+        else (
+          i1 <- u32_sub i 1%u32;
+          t <- list_nth_mut_loop_pair_loop T n1 tl0 tl1 i1;
+          let '(p, back'a, back'b) := t in
+          let back'a1 :=
+            fun (ret : T) => tl01 <- back'a ret; Ok (List_Cons x0 tl01) in
+          let back'b1 :=
+            fun (ret : T) => tl11 <- back'b ret; Ok (List_Cons x1 tl11) in
+          Ok (p, back'a1, back'b1))
+      | List_Nil => Fail_ Failure
+      end
+    | List_Nil => Fail_ Failure
+    end
+  end
 .
 
 (** [loops::list_nth_mut_loop_pair]:
@@ -186,7 +391,31 @@ Definition list_nth_mut_loop_pair
   (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
   result ((T * T) * (T -> result (List_t T)) * (T -> result (List_t T)))
   :=
-  admit
+  list_nth_mut_loop_pair_loop T n ls0 ls1 i
+.
+
+(** [loops::list_nth_shared_loop_pair]: loop 0:
+    Source: 'tests/src/loops.rs', lines 208:0-229:1 *)
+Fixpoint list_nth_shared_loop_pair_loop
+  (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
+  result (T * T)
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls0 with
+    | List_Cons x0 tl0 =>
+      match ls1 with
+      | List_Cons x1 tl1 =>
+        if i s= 0%u32
+        then Ok (x0, x1)
+        else (
+          i1 <- u32_sub i 1%u32; list_nth_shared_loop_pair_loop T n1 tl0 tl1 i1)
+      | List_Nil => Fail_ Failure
+      end
+    | List_Nil => Fail_ Failure
+    end
+  end
 .
 
 (** [loops::list_nth_shared_loop_pair]:
@@ -195,7 +424,43 @@ Definition list_nth_shared_loop_pair
   (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
   result (T * T)
   :=
-  admit
+  list_nth_shared_loop_pair_loop T n ls0 ls1 i
+.
+
+(** [loops::list_nth_mut_loop_pair_merge]: loop 0:
+    Source: 'tests/src/loops.rs', lines 233:0-248:1 *)
+Fixpoint list_nth_mut_loop_pair_merge_loop
+  (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
+  result ((T * T) * ((T * T) -> result ((List_t T) * (List_t T))))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls0 with
+    | List_Cons x0 tl0 =>
+      match ls1 with
+      | List_Cons x1 tl1 =>
+        if i s= 0%u32
+        then
+          let back :=
+            fun (ret : (T * T)) =>
+              let (t, t1) := ret in Ok (List_Cons t tl0, List_Cons t1 tl1) in
+          Ok ((x0, x1), back)
+        else (
+          i1 <- u32_sub i 1%u32;
+          p <- list_nth_mut_loop_pair_merge_loop T n1 tl0 tl1 i1;
+          let (p1, back) := p in
+          let back1 :=
+            fun (ret : (T * T)) =>
+              p2 <- back ret;
+              let (tl01, tl11) := p2 in
+              Ok (List_Cons x0 tl01, List_Cons x1 tl11) in
+          Ok (p1, back1))
+      | List_Nil => Fail_ Failure
+      end
+    | List_Nil => Fail_ Failure
+    end
+  end
 .
 
 (** [loops::list_nth_mut_loop_pair_merge]:
@@ -204,7 +469,32 @@ Definition list_nth_mut_loop_pair_merge
   (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
   result ((T * T) * ((T * T) -> result ((List_t T) * (List_t T))))
   :=
-  admit
+  list_nth_mut_loop_pair_merge_loop T n ls0 ls1 i
+.
+
+(** [loops::list_nth_shared_loop_pair_merge]: loop 0:
+    Source: 'tests/src/loops.rs', lines 251:0-266:1 *)
+Fixpoint list_nth_shared_loop_pair_merge_loop
+  (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
+  result (T * T)
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls0 with
+    | List_Cons x0 tl0 =>
+      match ls1 with
+      | List_Cons x1 tl1 =>
+        if i s= 0%u32
+        then Ok (x0, x1)
+        else (
+          i1 <- u32_sub i 1%u32;
+          list_nth_shared_loop_pair_merge_loop T n1 tl0 tl1 i1)
+      | List_Nil => Fail_ Failure
+      end
+    | List_Nil => Fail_ Failure
+    end
+  end
 .
 
 (** [loops::list_nth_shared_loop_pair_merge]:
@@ -213,7 +503,38 @@ Definition list_nth_shared_loop_pair_merge
   (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
   result (T * T)
   :=
-  admit
+  list_nth_shared_loop_pair_merge_loop T n ls0 ls1 i
+.
+
+(** [loops::list_nth_mut_shared_loop_pair]: loop 0:
+    Source: 'tests/src/loops.rs', lines 269:0-284:1 *)
+Fixpoint list_nth_mut_shared_loop_pair_loop
+  (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
+  result ((T * T) * (T -> result (List_t T)))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls0 with
+    | List_Cons x0 tl0 =>
+      match ls1 with
+      | List_Cons x1 tl1 =>
+        if i s= 0%u32
+        then
+          let back := fun (ret : T) => Ok (List_Cons ret tl0) in
+          Ok ((x0, x1), back)
+        else (
+          i1 <- u32_sub i 1%u32;
+          p <- list_nth_mut_shared_loop_pair_loop T n1 tl0 tl1 i1;
+          let (p1, back) := p in
+          let back1 :=
+            fun (ret : T) => tl01 <- back ret; Ok (List_Cons x0 tl01) in
+          Ok (p1, back1))
+      | List_Nil => Fail_ Failure
+      end
+    | List_Nil => Fail_ Failure
+    end
+  end
 .
 
 (** [loops::list_nth_mut_shared_loop_pair]:
@@ -222,7 +543,38 @@ Definition list_nth_mut_shared_loop_pair
   (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
   result ((T * T) * (T -> result (List_t T)))
   :=
-  admit
+  list_nth_mut_shared_loop_pair_loop T n ls0 ls1 i
+.
+
+(** [loops::list_nth_mut_shared_loop_pair_merge]: loop 0:
+    Source: 'tests/src/loops.rs', lines 288:0-303:1 *)
+Fixpoint list_nth_mut_shared_loop_pair_merge_loop
+  (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
+  result ((T * T) * (T -> result (List_t T)))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls0 with
+    | List_Cons x0 tl0 =>
+      match ls1 with
+      | List_Cons x1 tl1 =>
+        if i s= 0%u32
+        then
+          let back := fun (ret : T) => Ok (List_Cons ret tl0) in
+          Ok ((x0, x1), back)
+        else (
+          i1 <- u32_sub i 1%u32;
+          p <- list_nth_mut_shared_loop_pair_merge_loop T n1 tl0 tl1 i1;
+          let (p1, back) := p in
+          let back1 :=
+            fun (ret : T) => tl01 <- back ret; Ok (List_Cons x0 tl01) in
+          Ok (p1, back1))
+      | List_Nil => Fail_ Failure
+      end
+    | List_Nil => Fail_ Failure
+    end
+  end
 .
 
 (** [loops::list_nth_mut_shared_loop_pair_merge]:
@@ -231,7 +583,38 @@ Definition list_nth_mut_shared_loop_pair_merge
   (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
   result ((T * T) * (T -> result (List_t T)))
   :=
-  admit
+  list_nth_mut_shared_loop_pair_merge_loop T n ls0 ls1 i
+.
+
+(** [loops::list_nth_shared_mut_loop_pair]: loop 0:
+    Source: 'tests/src/loops.rs', lines 307:0-322:1 *)
+Fixpoint list_nth_shared_mut_loop_pair_loop
+  (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
+  result ((T * T) * (T -> result (List_t T)))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls0 with
+    | List_Cons x0 tl0 =>
+      match ls1 with
+      | List_Cons x1 tl1 =>
+        if i s= 0%u32
+        then
+          let back := fun (ret : T) => Ok (List_Cons ret tl1) in
+          Ok ((x0, x1), back)
+        else (
+          i1 <- u32_sub i 1%u32;
+          p <- list_nth_shared_mut_loop_pair_loop T n1 tl0 tl1 i1;
+          let (p1, back) := p in
+          let back1 :=
+            fun (ret : T) => tl11 <- back ret; Ok (List_Cons x1 tl11) in
+          Ok (p1, back1))
+      | List_Nil => Fail_ Failure
+      end
+    | List_Nil => Fail_ Failure
+    end
+  end
 .
 
 (** [loops::list_nth_shared_mut_loop_pair]:
@@ -240,7 +623,38 @@ Definition list_nth_shared_mut_loop_pair
   (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
   result ((T * T) * (T -> result (List_t T)))
   :=
-  admit
+  list_nth_shared_mut_loop_pair_loop T n ls0 ls1 i
+.
+
+(** [loops::list_nth_shared_mut_loop_pair_merge]: loop 0:
+    Source: 'tests/src/loops.rs', lines 326:0-341:1 *)
+Fixpoint list_nth_shared_mut_loop_pair_merge_loop
+  (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
+  result ((T * T) * (T -> result (List_t T)))
+  :=
+  match n with
+  | O => Fail_ OutOfFuel
+  | S n1 =>
+    match ls0 with
+    | List_Cons x0 tl0 =>
+      match ls1 with
+      | List_Cons x1 tl1 =>
+        if i s= 0%u32
+        then
+          let back := fun (ret : T) => Ok (List_Cons ret tl1) in
+          Ok ((x0, x1), back)
+        else (
+          i1 <- u32_sub i 1%u32;
+          p <- list_nth_shared_mut_loop_pair_merge_loop T n1 tl0 tl1 i1;
+          let (p1, back) := p in
+          let back1 :=
+            fun (ret : T) => tl11 <- back ret; Ok (List_Cons x1 tl11) in
+          Ok (p1, back1))
+      | List_Nil => Fail_ Failure
+      end
+    | List_Nil => Fail_ Failure
+    end
+  end
 .
 
 (** [loops::list_nth_shared_mut_loop_pair_merge]:
@@ -249,7 +663,7 @@ Definition list_nth_shared_mut_loop_pair_merge
   (T : Type) (n : nat) (ls0 : List_t T) (ls1 : List_t T) (i : u32) :
   result ((T * T) * (T -> result (List_t T)))
   :=
-  admit
+  list_nth_shared_mut_loop_pair_merge_loop T n ls0 ls1 i
 .
 
 (** [loops::ignore_input_mut_borrow]: loop 0:
-- 
cgit v1.2.3


From 2e3d1cdfde3e19af97e0d0fa47f92cfd66c688d9 Mon Sep 17 00:00:00 2001
From: Aymeric Fromherz
Date: Fri, 31 May 2024 14:25:23 +0200
Subject: Regenerate tests

---
 tests/coq/arrays/_CoqProject                 |  2 +-
 tests/coq/betree/_CoqProject                 | 12 ++++++------
 tests/coq/demo/_CoqProject                   |  2 +-
 tests/coq/hashmap/Hashmap_Funs.v             |  2 +-
 tests/coq/hashmap/_CoqProject                |  4 ++--
 tests/coq/hashmap_on_disk/HashmapMain_Funs.v |  2 +-
 tests/coq/hashmap_on_disk/_CoqProject        | 12 ++++++------
 tests/coq/misc/_CoqProject                   | 24 ++++++++++++------------
 tests/coq/traits/_CoqProject                 |  2 +-
 9 files changed, 31 insertions(+), 31 deletions(-)

(limited to 'tests/coq')

diff --git a/tests/coq/arrays/_CoqProject b/tests/coq/arrays/_CoqProject
index a4e82408..4ccc7663 100644
--- a/tests/coq/arrays/_CoqProject
+++ b/tests/coq/arrays/_CoqProject
@@ -3,5 +3,5 @@
 -arg -w
 -arg all
 
-Arrays.v
+Arrays.v 
 Primitives.v
diff --git a/tests/coq/betree/_CoqProject b/tests/coq/betree/_CoqProject
index b14bed66..2ba444c2 100644
--- a/tests/coq/betree/_CoqProject
+++ b/tests/coq/betree/_CoqProject
@@ -3,10 +3,10 @@
 -arg -w
 -arg all
 
-BetreeMain_TypesExternal_Template.v
-BetreeMain_Types.v
+BetreeMain_Funs.v 
+BetreeMain_FunsExternal.v 
+BetreeMain_FunsExternal_Template.v 
+BetreeMain_Types.v 
+BetreeMain_TypesExternal.v 
+BetreeMain_TypesExternal_Template.v 
 Primitives.v
-BetreeMain_FunsExternal_Template.v
-BetreeMain_Funs.v
-BetreeMain_TypesExternal.v
-BetreeMain_FunsExternal.v
diff --git a/tests/coq/demo/_CoqProject b/tests/coq/demo/_CoqProject
index 62554699..67e4f2a4 100644
--- a/tests/coq/demo/_CoqProject
+++ b/tests/coq/demo/_CoqProject
@@ -3,5 +3,5 @@
 -arg -w
 -arg all
 
-Demo.v
+Demo.v 
 Primitives.v
diff --git a/tests/coq/hashmap/Hashmap_Funs.v b/tests/coq/hashmap/Hashmap_Funs.v
index 6a4f8e99..1f2b2b22 100644
--- a/tests/coq/hashmap/Hashmap_Funs.v
+++ b/tests/coq/hashmap/Hashmap_Funs.v
@@ -211,7 +211,7 @@ Definition hashMap_move_elements_from_list
 Fixpoint hashMap_move_elements_loop
   (T : Type) (n : nat) (ntable : HashMap_t T)
   (slots : alloc_vec_Vec (List_t T)) (i : usize) :
-  result ((alloc_vec_Vec (List_t T)) * (HashMap_t T))
+  result ((HashMap_t T) * (alloc_vec_Vec (List_t T)))
   :=
   match n with
   | O => Fail_ OutOfFuel
diff --git a/tests/coq/hashmap/_CoqProject b/tests/coq/hashmap/_CoqProject
index 7f80afbf..5d98662a 100644
--- a/tests/coq/hashmap/_CoqProject
+++ b/tests/coq/hashmap/_CoqProject
@@ -3,6 +3,6 @@
 -arg -w
 -arg all
 
-Hashmap_Types.v
+Hashmap_Funs.v 
+Hashmap_Types.v 
 Primitives.v
-Hashmap_Funs.v
diff --git a/tests/coq/hashmap_on_disk/HashmapMain_Funs.v b/tests/coq/hashmap_on_disk/HashmapMain_Funs.v
index fd7f7f16..facd84ea 100644
--- a/tests/coq/hashmap_on_disk/HashmapMain_Funs.v
+++ b/tests/coq/hashmap_on_disk/HashmapMain_Funs.v
@@ -225,7 +225,7 @@ Definition hashmap_HashMap_move_elements_from_list
 Fixpoint hashmap_HashMap_move_elements_loop
   (T : Type) (n : nat) (ntable : hashmap_HashMap_t T)
   (slots : alloc_vec_Vec (hashmap_List_t T)) (i : usize) :
-  result ((alloc_vec_Vec (hashmap_List_t T)) * (hashmap_HashMap_t T))
+  result ((hashmap_HashMap_t T) * (alloc_vec_Vec (hashmap_List_t T)))
   :=
   match n with
   | O => Fail_ OutOfFuel
diff --git a/tests/coq/hashmap_on_disk/_CoqProject b/tests/coq/hashmap_on_disk/_CoqProject
index d73541d9..837bbbaf 100644
--- a/tests/coq/hashmap_on_disk/_CoqProject
+++ b/tests/coq/hashmap_on_disk/_CoqProject
@@ -3,10 +3,10 @@
 -arg -w
 -arg all
 
-HashmapMain_Types.v
-HashmapMain_FunsExternal_Template.v
+HashmapMain_Funs.v 
+HashmapMain_FunsExternal.v 
+HashmapMain_FunsExternal_Template.v 
+HashmapMain_Types.v 
+HashmapMain_TypesExternal.v 
+HashmapMain_TypesExternal_Template.v 
 Primitives.v
-HashmapMain_Funs.v
-HashmapMain_TypesExternal.v
-HashmapMain_FunsExternal.v
-HashmapMain_TypesExternal_Template.v
diff --git a/tests/coq/misc/_CoqProject b/tests/coq/misc/_CoqProject
index 308de4f4..bffb6699 100644
--- a/tests/coq/misc/_CoqProject
+++ b/tests/coq/misc/_CoqProject
@@ -3,16 +3,16 @@
 -arg -w
 -arg all
 
-External_FunsExternal_Template.v
-Loops.v
-External_Types.v
+Bitwise.v 
+Constants.v 
+External_Funs.v 
+External_FunsExternal.v 
+External_FunsExternal_Template.v 
+External_Types.v 
+External_TypesExternal.v 
+External_TypesExternal_Template.v 
+Loops.v 
+NoNestedBorrows.v 
+Paper.v 
+PoloniusList.v 
 Primitives.v
-External_Funs.v
-External_TypesExternal.v
-Constants.v
-PoloniusList.v
-NoNestedBorrows.v
-External_FunsExternal.v
-Bitwise.v
-External_TypesExternal_Template.v
-Paper.v
diff --git a/tests/coq/traits/_CoqProject b/tests/coq/traits/_CoqProject
index 5b6199fc..14a91aa8 100644
--- a/tests/coq/traits/_CoqProject
+++ b/tests/coq/traits/_CoqProject
@@ -3,5 +3,5 @@
 -arg -w
 -arg all
 
+Primitives.v 
 Traits.v
-Primitives.v
-- 
cgit v1.2.3


From 374eb6fe2e35791e4f18e415cd8d761d89a8bec5 Mon Sep 17 00:00:00 2001
From: Son Ho
Date: Mon, 3 Jun 2024 21:29:08 +0200
Subject: Add a test

---
 tests/coq/misc/NoNestedBorrows.v | 73 +++++++++++++++++++++-------------------
 1 file changed, 39 insertions(+), 34 deletions(-)

(limited to 'tests/coq')

diff --git a/tests/coq/misc/NoNestedBorrows.v b/tests/coq/misc/NoNestedBorrows.v
index a83347a7..de31fec7 100644
--- a/tests/coq/misc/NoNestedBorrows.v
+++ b/tests/coq/misc/NoNestedBorrows.v
@@ -243,14 +243,19 @@ Check (choose_test )%return.
 Definition test_char : result char :=
   Ok (char_of_byte Coq.Init.Byte.x61).
 
+(** [no_nested_borrows::panic_mut_borrow]:
+    Source: 'tests/src/no_nested_borrows.rs', lines 217:0-217:36 *)
+Definition panic_mut_borrow (i : u32) : result u32 :=
+  Fail_ Failure.
+
 (** [no_nested_borrows::Tree]
-    Source: 'tests/src/no_nested_borrows.rs', lines 217:0-217:16 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 222:0-222:16 *)
 Inductive Tree_t (T : Type) :=
 | Tree_Leaf : T -> Tree_t T
 | Tree_Node : T -> NodeElem_t T -> Tree_t T -> Tree_t T
 
 (** [no_nested_borrows::NodeElem]
-    Source: 'tests/src/no_nested_borrows.rs', lines 222:0-222:20 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 227:0-227:20 *)
 with NodeElem_t (T : Type) :=
 | NodeElem_Cons : Tree_t T -> NodeElem_t T -> NodeElem_t T
 | NodeElem_Nil : NodeElem_t T
@@ -263,7 +268,7 @@ Arguments NodeElem_Cons { _ }.
 Arguments NodeElem_Nil { _ }.
 
 (** [no_nested_borrows::list_length]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 257:0-257:48 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 262:0-262:48 *)
 Fixpoint list_length (T : Type) (l : List_t T) : result u32 :=
   match l with
   | List_Cons _ l1 => i <- list_length T l1; u32_add 1%u32 i
@@ -272,7 +277,7 @@ Fixpoint list_length (T : Type) (l : List_t T) : result u32 :=
 .
 
 (** [no_nested_borrows::list_nth_shared]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 265:0-265:62 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 270:0-270:62 *)
 Fixpoint list_nth_shared (T : Type) (l : List_t T) (i : u32) : result T :=
   match l with
   | List_Cons x tl =>
@@ -284,7 +289,7 @@ Fixpoint list_nth_shared (T : Type) (l : List_t T) (i : u32) : result T :=
 .
 
 (** [no_nested_borrows::list_nth_mut]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 281:0-281:67 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 286:0-286:67 *)
 Fixpoint list_nth_mut
   (T : Type) (l : List_t T) (i : u32) :
   result (T * (T -> result (List_t T)))
@@ -305,7 +310,7 @@ Fixpoint list_nth_mut
 .
 
 (** [no_nested_borrows::list_rev_aux]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 297:0-297:63 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 302:0-302:63 *)
 Fixpoint list_rev_aux
   (T : Type) (li : List_t T) (lo : List_t T) : result (List_t T) :=
   match li with
@@ -315,14 +320,14 @@ Fixpoint list_rev_aux
 .
 
 (** [no_nested_borrows::list_rev]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 311:0-311:42 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 316:0-316:42 *)
 Definition list_rev (T : Type) (l : List_t T) : result (List_t T) :=
   let (li, _) := core_mem_replace (List_t T) l List_Nil in
   list_rev_aux T li List_Nil
 .
 
 (** [no_nested_borrows::test_list_functions]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 316:0-316:28 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 321:0-321:28 *)
 Definition test_list_functions : result unit :=
   let l := List_Cons 2%i32 List_Nil in
   let l1 := List_Cons 1%i32 l in
@@ -361,7 +366,7 @@ Definition test_list_functions : result unit :=
 Check (test_list_functions )%return.
 
 (** [no_nested_borrows::id_mut_pair1]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 332:0-332:89 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 337:0-337:89 *)
 Definition id_mut_pair1
   (T1 T2 : Type) (x : T1) (y : T2) :
   result ((T1 * T2) * ((T1 * T2) -> result (T1 * T2)))
@@ -370,7 +375,7 @@ Definition id_mut_pair1
 .
 
 (** [no_nested_borrows::id_mut_pair2]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 336:0-336:88 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 341:0-341:88 *)
 Definition id_mut_pair2
   (T1 T2 : Type) (p : (T1 * T2)) :
   result ((T1 * T2) * ((T1 * T2) -> result (T1 * T2)))
@@ -379,7 +384,7 @@ Definition id_mut_pair2
 .
 
 (** [no_nested_borrows::id_mut_pair3]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 340:0-340:93 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 345:0-345:93 *)
 Definition id_mut_pair3
   (T1 T2 : Type) (x : T1) (y : T2) :
   result ((T1 * T2) * (T1 -> result T1) * (T2 -> result T2))
@@ -388,7 +393,7 @@ Definition id_mut_pair3
 .
 
 (** [no_nested_borrows::id_mut_pair4]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 344:0-344:92 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 349:0-349:92 *)
 Definition id_mut_pair4
   (T1 T2 : Type) (p : (T1 * T2)) :
   result ((T1 * T2) * (T1 -> result T1) * (T2 -> result T2))
@@ -397,7 +402,7 @@ Definition id_mut_pair4
 .
 
 (** [no_nested_borrows::StructWithTuple]
-    Source: 'tests/src/no_nested_borrows.rs', lines 351:0-351:34 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 356:0-356:34 *)
 Record StructWithTuple_t (T1 T2 : Type) :=
 mkStructWithTuple_t {
   structWithTuple_p : (T1 * T2);
@@ -408,25 +413,25 @@ Arguments mkStructWithTuple_t { _ _ }.
 Arguments structWithTuple_p { _ _ }.
 
 (** [no_nested_borrows::new_tuple1]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 355:0-355:48 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 360:0-360:48 *)
 Definition new_tuple1 : result (StructWithTuple_t u32 u32) :=
   Ok {| structWithTuple_p := (1%u32, 2%u32) |}
 .
 
 (** [no_nested_borrows::new_tuple2]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 359:0-359:48 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 364:0-364:48 *)
 Definition new_tuple2 : result (StructWithTuple_t i16 i16) :=
   Ok {| structWithTuple_p := (1%i16, 2%i16) |}
 .
 
 (** [no_nested_borrows::new_tuple3]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 363:0-363:48 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 368:0-368:48 *)
 Definition new_tuple3 : result (StructWithTuple_t u64 i64) :=
   Ok {| structWithTuple_p := (1%u64, 2%i64) |}
 .
 
 (** [no_nested_borrows::StructWithPair]
-    Source: 'tests/src/no_nested_borrows.rs', lines 368:0-368:33 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 373:0-373:33 *)
 Record StructWithPair_t (T1 T2 : Type) :=
 mkStructWithPair_t {
   structWithPair_p : Pair_t T1 T2;
@@ -437,13 +442,13 @@ Arguments mkStructWithPair_t { _ _ }.
 Arguments structWithPair_p { _ _ }.
 
 (** [no_nested_borrows::new_pair1]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 372:0-372:46 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 377:0-377:46 *)
 Definition new_pair1 : result (StructWithPair_t u32 u32) :=
   Ok {| structWithPair_p := {| pair_x := 1%u32; pair_y := 2%u32 |} |}
 .
 
 (** [no_nested_borrows::test_constants]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 380:0-380:23 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 385:0-385:23 *)
 Definition test_constants : result unit :=
   swt <- new_tuple1;
   let (i, _) := swt.(structWithTuple_p) in
@@ -470,7 +475,7 @@ Definition test_constants : result unit :=
 Check (test_constants )%return.
 
 (** [no_nested_borrows::test_weird_borrows1]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 389:0-389:28 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 394:0-394:28 *)
 Definition test_weird_borrows1 : result unit :=
   Ok tt.
 
@@ -478,78 +483,78 @@ Definition test_weird_borrows1 : result unit :=
 Check (test_weird_borrows1 )%return.
 
 (** [no_nested_borrows::test_mem_replace]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 399:0-399:37 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 404:0-404:37 *)
 Definition test_mem_replace (px : u32) : result u32 :=
   let (y, _) := core_mem_replace u32 px 1%u32 in
   if negb (y s= 0%u32) then Fail_ Failure else Ok 2%u32
 .
 
 (** [no_nested_borrows::test_shared_borrow_bool1]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 406:0-406:47 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 411:0-411:47 *)
 Definition test_shared_borrow_bool1 (b : bool) : result u32 :=
   if b then Ok 0%u32 else Ok 1%u32
 .
 
 (** [no_nested_borrows::test_shared_borrow_bool2]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 419:0-419:40 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 424:0-424:40 *)
 Definition test_shared_borrow_bool2 : result u32 :=
   Ok 0%u32.
 
 (** [no_nested_borrows::test_shared_borrow_enum1]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 434:0-434:52 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 439:0-439:52 *)
 Definition test_shared_borrow_enum1 (l : List_t u32) : result u32 :=
   match l with | List_Cons _ _ => Ok 1%u32 | List_Nil => Ok 0%u32 end
 .
 
 (** [no_nested_borrows::test_shared_borrow_enum2]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 446:0-446:40 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 451:0-451:40 *)
 Definition test_shared_borrow_enum2 : result u32 :=
   Ok 0%u32.
 
 (** [no_nested_borrows::incr]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 457:0-457:24 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 462:0-462:24 *)
 Definition incr (x : u32) : result u32 :=
   u32_add x 1%u32.
 
 (** [no_nested_borrows::call_incr]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 461:0-461:35 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 466:0-466:35 *)
 Definition call_incr (x : u32) : result u32 :=
   incr x.
 
 (** [no_nested_borrows::read_then_incr]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 466:0-466:41 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 471:0-471:41 *)
 Definition read_then_incr (x : u32) : result (u32 * u32) :=
   x1 <- u32_add x 1%u32; Ok (x, x1)
 .
 
 (** [no_nested_borrows::Tuple]
-    Source: 'tests/src/no_nested_borrows.rs', lines 472:0-472:24 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 477:0-477:24 *)
 Definition Tuple_t (T1 T2 : Type) : Type := T1 * T2.
 
 (** [no_nested_borrows::use_tuple_struct]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 474:0-474:48 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 479:0-479:48 *)
 Definition use_tuple_struct (x : Tuple_t u32 u32) : result (Tuple_t u32 u32) :=
   let (_, i) := x in Ok (1%u32, i)
 .
 
 (** [no_nested_borrows::create_tuple_struct]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 478:0-478:61 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 483:0-483:61 *)
 Definition create_tuple_struct
   (x : u32) (y : u64) : result (Tuple_t u32 u64) :=
   Ok (x, y)
 .
 
 (** [no_nested_borrows::IdType]
-    Source: 'tests/src/no_nested_borrows.rs', lines 483:0-483:20 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 488:0-488:20 *)
 Definition IdType_t (T : Type) : Type := T.
 
 (** [no_nested_borrows::use_id_type]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 485:0-485:40 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 490:0-490:40 *)
 Definition use_id_type (T : Type) (x : IdType_t T) : result T :=
   Ok x.
 
 (** [no_nested_borrows::create_id_type]:
-    Source: 'tests/src/no_nested_borrows.rs', lines 489:0-489:43 *)
+    Source: 'tests/src/no_nested_borrows.rs', lines 494:0-494:43 *)
 Definition create_id_type (T : Type) (x : T) : result (IdType_t T) :=
   Ok x.
 
-- 
cgit v1.2.3