summaryrefslogtreecommitdiff
path: root/tests/lean/Loops.lean
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tests/lean/Loops.lean652
1 files changed, 254 insertions, 398 deletions
diff --git a/tests/lean/Loops.lean b/tests/lean/Loops.lean
index 08aa08a5..fbb4616f 100644
--- a/tests/lean/Loops.lean
+++ b/tests/lean/Loops.lean
@@ -5,73 +5,72 @@ open Primitives
namespace loops
-/- [loops::sum]: loop 0: forward function
+/- [loops::sum]: loop 0:
Source: 'src/loops.rs', lines 4:0-14:1 -/
divergent def sum_loop (max : U32) (i : U32) (s : U32) : Result U32 :=
if i < max
then do
- let s0 ← s + i
- let i0 ← i + 1#u32
- sum_loop max i0 s0
+ let s1 ← s + i
+ let i1 ← i + 1#u32
+ sum_loop max i1 s1
else s * 2#u32
-/- [loops::sum]: forward function
+/- [loops::sum]:
Source: 'src/loops.rs', lines 4:0-4:27 -/
def sum (max : U32) : Result U32 :=
sum_loop max 0#u32 0#u32
-/- [loops::sum_with_mut_borrows]: loop 0: forward function
+/- [loops::sum_with_mut_borrows]: loop 0:
Source: 'src/loops.rs', lines 19:0-31:1 -/
divergent def sum_with_mut_borrows_loop
(max : U32) (mi : U32) (ms : U32) : Result U32 :=
if mi < max
then
do
- let ms0 ← ms + mi
- let mi0 ← mi + 1#u32
- sum_with_mut_borrows_loop max mi0 ms0
+ let ms1 ← ms + mi
+ let mi1 ← mi + 1#u32
+ sum_with_mut_borrows_loop max mi1 ms1
else ms * 2#u32
-/- [loops::sum_with_mut_borrows]: forward function
+/- [loops::sum_with_mut_borrows]:
Source: 'src/loops.rs', lines 19:0-19:44 -/
def sum_with_mut_borrows (max : U32) : Result U32 :=
sum_with_mut_borrows_loop max 0#u32 0#u32
-/- [loops::sum_with_shared_borrows]: loop 0: forward function
+/- [loops::sum_with_shared_borrows]: loop 0:
Source: 'src/loops.rs', lines 34:0-48:1 -/
divergent def sum_with_shared_borrows_loop
(max : U32) (i : U32) (s : U32) : Result U32 :=
if i < max
then
do
- let i0 ← i + 1#u32
- let s0 ← s + i0
- sum_with_shared_borrows_loop max i0 s0
+ let i1 ← i + 1#u32
+ let s1 ← s + i1
+ sum_with_shared_borrows_loop max i1 s1
else s * 2#u32
-/- [loops::sum_with_shared_borrows]: forward function
+/- [loops::sum_with_shared_borrows]:
Source: 'src/loops.rs', lines 34:0-34:47 -/
def sum_with_shared_borrows (max : U32) : Result U32 :=
sum_with_shared_borrows_loop max 0#u32 0#u32
-/- [loops::clear]: loop 0: merged forward/backward function
- (there is a single backward function, and the forward function returns ())
+/- [loops::clear]: loop 0:
Source: 'src/loops.rs', lines 52:0-58:1 -/
divergent def clear_loop
(v : alloc.vec.Vec U32) (i : Usize) : Result (alloc.vec.Vec U32) :=
- let i0 := alloc.vec.Vec.len U32 v
- if i < i0
+ let i1 := alloc.vec.Vec.len U32 v
+ if i < i1
then
do
- let i1 ← i + 1#usize
- let v0 ←
- alloc.vec.Vec.index_mut_back U32 Usize
- (core.slice.index.SliceIndexUsizeSliceTInst U32) v i 0#u32
- clear_loop v0 i1
+ let (_, index_mut_back) ←
+ alloc.vec.Vec.index_mut U32 Usize
+ (core.slice.index.SliceIndexUsizeSliceTInst U32) v i
+ let i2 ← i + 1#usize
+ let v1 ← index_mut_back 0#u32
+ clear_loop v1 i2
else Result.ret v
-/- [loops::clear]: merged forward/backward function
- (there is a single backward function, and the forward function returns ())
+/- [loops::clear]:
Source: 'src/loops.rs', lines 52:0-52:30 -/
def clear (v : alloc.vec.Vec U32) : Result (alloc.vec.Vec U32) :=
clear_loop v 0#usize
@@ -82,7 +81,7 @@ inductive List (T : Type) :=
| Cons : T → List T → List T
| Nil : List T
-/- [loops::list_mem]: loop 0: forward function
+/- [loops::list_mem]: loop 0:
Source: 'src/loops.rs', lines 66:0-75:1 -/
divergent def list_mem_loop (x : U32) (ls : List U32) : Result Bool :=
match ls with
@@ -91,51 +90,41 @@ divergent def list_mem_loop (x : U32) (ls : List U32) : Result Bool :=
else list_mem_loop x tl
| List.Nil => Result.ret false
-/- [loops::list_mem]: forward function
+/- [loops::list_mem]:
Source: 'src/loops.rs', lines 66:0-66:52 -/
def list_mem (x : U32) (ls : List U32) : Result Bool :=
list_mem_loop x ls
-/- [loops::list_nth_mut_loop]: loop 0: forward function
+/- [loops::list_nth_mut_loop]: loop 0:
Source: 'src/loops.rs', lines 78:0-88:1 -/
divergent def list_nth_mut_loop_loop
- (T : Type) (ls : List T) (i : U32) : Result T :=
- match ls with
- | List.Cons x tl =>
- if i = 0#u32
- then Result.ret x
- else do
- let i0 ← i - 1#u32
- list_nth_mut_loop_loop T tl i0
- | List.Nil => Result.fail .panic
-
-/- [loops::list_nth_mut_loop]: forward function
- Source: 'src/loops.rs', lines 78:0-78:71 -/
-def list_nth_mut_loop (T : Type) (ls : List T) (i : U32) : Result T :=
- list_nth_mut_loop_loop T ls i
-
-/- [loops::list_nth_mut_loop]: loop 0: backward function 0
- Source: 'src/loops.rs', lines 78:0-88:1 -/
-divergent def list_nth_mut_loop_loop_back
- (T : Type) (ls : List T) (i : U32) (ret : T) : Result (List T) :=
+ (T : Type) (ls : List T) (i : U32) : Result (T × (T → Result (List T))) :=
match ls with
| List.Cons x tl =>
if i = 0#u32
- then Result.ret (List.Cons ret tl)
+ then
+ let back := fun ret => Result.ret (List.Cons ret tl)
+ Result.ret (x, back)
else
do
- let i0 ← i - 1#u32
- let tl0 ← list_nth_mut_loop_loop_back T tl i0 ret
- Result.ret (List.Cons x tl0)
+ let i1 ← i - 1#u32
+ let (t, back) ← list_nth_mut_loop_loop T tl i1
+ let back1 :=
+ fun ret => do
+ let tl1 ← back ret
+ Result.ret (List.Cons x tl1)
+ Result.ret (t, back1)
| List.Nil => Result.fail .panic
-/- [loops::list_nth_mut_loop]: backward function 0
+/- [loops::list_nth_mut_loop]:
Source: 'src/loops.rs', lines 78:0-78:71 -/
-def list_nth_mut_loop_back
- (T : Type) (ls : List T) (i : U32) (ret : T) : Result (List T) :=
- list_nth_mut_loop_loop_back T ls i ret
+def list_nth_mut_loop
+ (T : Type) (ls : List T) (i : U32) : Result (T × (T → Result (List T))) :=
+ do
+ let (t, back) ← list_nth_mut_loop_loop T ls i
+ Result.ret (t, back)
-/- [loops::list_nth_shared_loop]: loop 0: forward function
+/- [loops::list_nth_shared_loop]: loop 0:
Source: 'src/loops.rs', lines 91:0-101:1 -/
divergent def list_nth_shared_loop_loop
(T : Type) (ls : List T) (i : U32) : Result T :=
@@ -144,64 +133,54 @@ divergent def list_nth_shared_loop_loop
if i = 0#u32
then Result.ret x
else do
- let i0 ← i - 1#u32
- list_nth_shared_loop_loop T tl i0
+ let i1 ← i - 1#u32
+ list_nth_shared_loop_loop T tl i1
| List.Nil => Result.fail .panic
-/- [loops::list_nth_shared_loop]: forward function
+/- [loops::list_nth_shared_loop]:
Source: 'src/loops.rs', lines 91:0-91:66 -/
def list_nth_shared_loop (T : Type) (ls : List T) (i : U32) : Result T :=
list_nth_shared_loop_loop T ls i
-/- [loops::get_elem_mut]: loop 0: forward function
+/- [loops::get_elem_mut]: loop 0:
Source: 'src/loops.rs', lines 103:0-117:1 -/
-divergent def get_elem_mut_loop (x : Usize) (ls : List Usize) : Result Usize :=
- match ls with
- | List.Cons y tl => if y = x
- then Result.ret y
- else get_elem_mut_loop x tl
- | List.Nil => Result.fail .panic
-
-/- [loops::get_elem_mut]: forward function
- Source: 'src/loops.rs', lines 103:0-103:73 -/
-def get_elem_mut
- (slots : alloc.vec.Vec (List Usize)) (x : Usize) : Result Usize :=
- do
- let l ←
- alloc.vec.Vec.index_mut (List Usize) Usize
- (core.slice.index.SliceIndexUsizeSliceTInst (List Usize)) slots 0#usize
- get_elem_mut_loop x l
-
-/- [loops::get_elem_mut]: loop 0: backward function 0
- Source: 'src/loops.rs', lines 103:0-117:1 -/
-divergent def get_elem_mut_loop_back
- (x : Usize) (ls : List Usize) (ret : Usize) : Result (List Usize) :=
+divergent def get_elem_mut_loop
+ (x : Usize) (ls : List Usize) :
+ Result (Usize × (Usize → Result (List Usize)))
+ :=
match ls with
| List.Cons y tl =>
if y = x
- then Result.ret (List.Cons ret tl)
+ then
+ let back := fun ret => Result.ret (List.Cons ret tl)
+ Result.ret (y, back)
else
do
- let tl0 ← get_elem_mut_loop_back x tl ret
- Result.ret (List.Cons y tl0)
+ let (i, back) ← get_elem_mut_loop x tl
+ let back1 :=
+ fun ret => do
+ let tl1 ← back ret
+ Result.ret (List.Cons y tl1)
+ Result.ret (i, back1)
| List.Nil => Result.fail .panic
-/- [loops::get_elem_mut]: backward function 0
+/- [loops::get_elem_mut]:
Source: 'src/loops.rs', lines 103:0-103:73 -/
-def get_elem_mut_back
- (slots : alloc.vec.Vec (List Usize)) (x : Usize) (ret : Usize) :
- Result (alloc.vec.Vec (List Usize))
+def get_elem_mut
+ (slots : alloc.vec.Vec (List Usize)) (x : Usize) :
+ Result (Usize × (Usize → Result (alloc.vec.Vec (List Usize))))
:=
do
- let l ←
- alloc.vec.Vec.index_mut (List Usize) Usize
- (core.slice.index.SliceIndexUsizeSliceTInst (List Usize)) slots 0#usize
- let l0 ← get_elem_mut_loop_back x l ret
- alloc.vec.Vec.index_mut_back (List Usize) Usize
+ let (l, index_mut_back) ←
+ alloc.vec.Vec.index_mut (List Usize) Usize
(core.slice.index.SliceIndexUsizeSliceTInst (List Usize)) slots 0#usize
- l0
+ let (i, back) ← get_elem_mut_loop x l
+ let back1 := fun ret => do
+ let l1 ← back ret
+ index_mut_back l1
+ Result.ret (i, back1)
-/- [loops::get_elem_shared]: loop 0: forward function
+/- [loops::get_elem_shared]: loop 0:
Source: 'src/loops.rs', lines 119:0-133:1 -/
divergent def get_elem_shared_loop
(x : Usize) (ls : List Usize) : Result Usize :=
@@ -211,76 +190,63 @@ divergent def get_elem_shared_loop
else get_elem_shared_loop x tl
| List.Nil => Result.fail .panic
-/- [loops::get_elem_shared]: forward function
+/- [loops::get_elem_shared]:
Source: 'src/loops.rs', lines 119:0-119:68 -/
def get_elem_shared
(slots : alloc.vec.Vec (List Usize)) (x : Usize) : Result Usize :=
do
- let l ←
- alloc.vec.Vec.index (List Usize) Usize
- (core.slice.index.SliceIndexUsizeSliceTInst (List Usize)) slots 0#usize
- get_elem_shared_loop x l
-
-/- [loops::id_mut]: forward function
- Source: 'src/loops.rs', lines 135:0-135:50 -/
-def id_mut (T : Type) (ls : List T) : Result (List T) :=
- Result.ret ls
+ let l ←
+ alloc.vec.Vec.index (List Usize) Usize
+ (core.slice.index.SliceIndexUsizeSliceTInst (List Usize)) slots 0#usize
+ get_elem_shared_loop x l
-/- [loops::id_mut]: backward function 0
+/- [loops::id_mut]:
Source: 'src/loops.rs', lines 135:0-135:50 -/
-def id_mut_back (T : Type) (ls : List T) (ret : List T) : Result (List T) :=
- Result.ret ret
+def id_mut
+ (T : Type) (ls : List T) :
+ Result ((List T) × (List T → Result (List T)))
+ :=
+ Result.ret (ls, Result.ret)
-/- [loops::id_shared]: forward function
+/- [loops::id_shared]:
Source: 'src/loops.rs', lines 139:0-139:45 -/
def id_shared (T : Type) (ls : List T) : Result (List T) :=
Result.ret ls
-/- [loops::list_nth_mut_loop_with_id]: loop 0: forward function
+/- [loops::list_nth_mut_loop_with_id]: loop 0:
Source: 'src/loops.rs', lines 144:0-155:1 -/
divergent def list_nth_mut_loop_with_id_loop
- (T : Type) (i : U32) (ls : List T) : Result T :=
+ (T : Type) (i : U32) (ls : List T) : Result (T × (T → Result (List T))) :=
match ls with
| List.Cons x tl =>
if i = 0#u32
- then Result.ret x
- else do
- let i0 ← i - 1#u32
- list_nth_mut_loop_with_id_loop T i0 tl
- | List.Nil => Result.fail .panic
-
-/- [loops::list_nth_mut_loop_with_id]: forward function
- Source: 'src/loops.rs', lines 144:0-144:75 -/
-def list_nth_mut_loop_with_id (T : Type) (ls : List T) (i : U32) : Result T :=
- do
- let ls0 ← id_mut T ls
- list_nth_mut_loop_with_id_loop T i ls0
-
-/- [loops::list_nth_mut_loop_with_id]: loop 0: backward function 0
- Source: 'src/loops.rs', lines 144:0-155:1 -/
-divergent def list_nth_mut_loop_with_id_loop_back
- (T : Type) (i : U32) (ls : List T) (ret : T) : Result (List T) :=
- match ls with
- | List.Cons x tl =>
- if i = 0#u32
- then Result.ret (List.Cons ret tl)
+ then
+ let back := fun ret => Result.ret (List.Cons ret tl)
+ Result.ret (x, back)
else
do
- let i0 ← i - 1#u32
- let tl0 ← list_nth_mut_loop_with_id_loop_back T i0 tl ret
- Result.ret (List.Cons x tl0)
+ let i1 ← i - 1#u32
+ let (t, back) ← list_nth_mut_loop_with_id_loop T i1 tl
+ let back1 :=
+ fun ret => do
+ let tl1 ← back ret
+ Result.ret (List.Cons x tl1)
+ Result.ret (t, back1)
| List.Nil => Result.fail .panic
-/- [loops::list_nth_mut_loop_with_id]: backward function 0
+/- [loops::list_nth_mut_loop_with_id]:
Source: 'src/loops.rs', lines 144:0-144:75 -/
-def list_nth_mut_loop_with_id_back
- (T : Type) (ls : List T) (i : U32) (ret : T) : Result (List T) :=
+def list_nth_mut_loop_with_id
+ (T : Type) (ls : List T) (i : U32) : Result (T × (T → Result (List T))) :=
do
- let ls0 ← id_mut T ls
- let l ← list_nth_mut_loop_with_id_loop_back T i ls0 ret
- id_mut_back T ls l
-
-/- [loops::list_nth_shared_loop_with_id]: loop 0: forward function
+ let (ls1, id_mut_back) ← id_mut T ls
+ let (t, back) ← list_nth_mut_loop_with_id_loop T i ls1
+ let back1 := fun ret => do
+ let l ← back ret
+ id_mut_back l
+ Result.ret (t, back1)
+
+/- [loops::list_nth_shared_loop_with_id]: loop 0:
Source: 'src/loops.rs', lines 158:0-169:1 -/
divergent def list_nth_shared_loop_with_id_loop
(T : Type) (i : U32) (ls : List T) : Result T :=
@@ -289,97 +255,60 @@ divergent def list_nth_shared_loop_with_id_loop
if i = 0#u32
then Result.ret x
else do
- let i0 ← i - 1#u32
- list_nth_shared_loop_with_id_loop T i0 tl
+ let i1 ← i - 1#u32
+ list_nth_shared_loop_with_id_loop T i1 tl
| List.Nil => Result.fail .panic
-/- [loops::list_nth_shared_loop_with_id]: forward function
+/- [loops::list_nth_shared_loop_with_id]:
Source: 'src/loops.rs', lines 158:0-158:70 -/
def list_nth_shared_loop_with_id
(T : Type) (ls : List T) (i : U32) : Result T :=
do
- let ls0 ← id_shared T ls
- list_nth_shared_loop_with_id_loop T i ls0
+ let ls1 ← id_shared T ls
+ list_nth_shared_loop_with_id_loop T i ls1
-/- [loops::list_nth_mut_loop_pair]: loop 0: forward function
+/- [loops::list_nth_mut_loop_pair]: loop 0:
Source: 'src/loops.rs', lines 174:0-195:1 -/
divergent def list_nth_mut_loop_pair_loop
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) : Result (T × T) :=
- match ls0 with
- | List.Cons x0 tl0 =>
- match ls1 with
- | List.Cons x1 tl1 =>
- if i = 0#u32
- then Result.ret (x0, x1)
- else do
- let i0 ← i - 1#u32
- list_nth_mut_loop_pair_loop T tl0 tl1 i0
- | List.Nil => Result.fail .panic
- | List.Nil => Result.fail .panic
-
-/- [loops::list_nth_mut_loop_pair]: forward function
- Source: 'src/loops.rs', lines 174:0-178:27 -/
-def list_nth_mut_loop_pair
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) : Result (T × T) :=
- list_nth_mut_loop_pair_loop T ls0 ls1 i
-
-/- [loops::list_nth_mut_loop_pair]: loop 0: backward function 0
- Source: 'src/loops.rs', lines 174:0-195:1 -/
-divergent def list_nth_mut_loop_pair_loop_back'a
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) (ret : T) :
- Result (List T)
+ (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) :
+ Result ((T × T) × (T → Result (List T)) × (T → Result (List T)))
:=
match ls0 with
| List.Cons x0 tl0 =>
match ls1 with
| List.Cons x1 tl1 =>
if i = 0#u32
- then Result.ret (List.Cons ret tl0)
+ then
+ let back_'a := fun ret => Result.ret (List.Cons ret tl0)
+ let back_'b := fun ret => Result.ret (List.Cons ret tl1)
+ Result.ret ((x0, x1), back_'a, back_'b)
else
do
- let i0 ← i - 1#u32
- let tl00 ← list_nth_mut_loop_pair_loop_back'a T tl0 tl1 i0 ret
- Result.ret (List.Cons x0 tl00)
+ let i1 ← i - 1#u32
+ let (p, back_'a, back_'b) ← list_nth_mut_loop_pair_loop T tl0 tl1 i1
+ let back_'a1 :=
+ fun ret => do
+ let tl01 ← back_'a ret
+ Result.ret (List.Cons x0 tl01)
+ let back_'b1 :=
+ fun ret => do
+ let tl11 ← back_'b ret
+ Result.ret (List.Cons x1 tl11)
+ Result.ret (p, back_'a1, back_'b1)
| List.Nil => Result.fail .panic
| List.Nil => Result.fail .panic
-/- [loops::list_nth_mut_loop_pair]: backward function 0
+/- [loops::list_nth_mut_loop_pair]:
Source: 'src/loops.rs', lines 174:0-178:27 -/
-def list_nth_mut_loop_pair_back'a
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) (ret : T) :
- Result (List T)
- :=
- list_nth_mut_loop_pair_loop_back'a T ls0 ls1 i ret
-
-/- [loops::list_nth_mut_loop_pair]: loop 0: backward function 1
- Source: 'src/loops.rs', lines 174:0-195:1 -/
-divergent def list_nth_mut_loop_pair_loop_back'b
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) (ret : T) :
- Result (List T)
- :=
- match ls0 with
- | List.Cons x0 tl0 =>
- match ls1 with
- | List.Cons x1 tl1 =>
- if i = 0#u32
- then Result.ret (List.Cons ret tl1)
- else
- do
- let i0 ← i - 1#u32
- let tl10 ← list_nth_mut_loop_pair_loop_back'b T tl0 tl1 i0 ret
- Result.ret (List.Cons x1 tl10)
- | List.Nil => Result.fail .panic
- | List.Nil => Result.fail .panic
-
-/- [loops::list_nth_mut_loop_pair]: backward function 1
- Source: 'src/loops.rs', lines 174:0-178:27 -/
-def list_nth_mut_loop_pair_back'b
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) (ret : T) :
- Result (List T)
+def list_nth_mut_loop_pair
+ (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) :
+ Result ((T × T) × (T → Result (List T)) × (T → Result (List T)))
:=
- list_nth_mut_loop_pair_loop_back'b T ls0 ls1 i ret
+ do
+ let (p, back_'a, back_'b) ← list_nth_mut_loop_pair_loop T ls0 ls1 i
+ Result.ret (p, back_'a, back_'b)
-/- [loops::list_nth_shared_loop_pair]: loop 0: forward function
+/- [loops::list_nth_shared_loop_pair]: loop 0:
Source: 'src/loops.rs', lines 198:0-219:1 -/
divergent def list_nth_shared_loop_pair_loop
(T : Type) (ls0 : List T) (ls1 : List T) (i : U32) : Result (T × T) :=
@@ -390,71 +319,58 @@ divergent def list_nth_shared_loop_pair_loop
if i = 0#u32
then Result.ret (x0, x1)
else do
- let i0 ← i - 1#u32
- list_nth_shared_loop_pair_loop T tl0 tl1 i0
+ let i1 ← i - 1#u32
+ list_nth_shared_loop_pair_loop T tl0 tl1 i1
| List.Nil => Result.fail .panic
| List.Nil => Result.fail .panic
-/- [loops::list_nth_shared_loop_pair]: forward function
+/- [loops::list_nth_shared_loop_pair]:
Source: 'src/loops.rs', lines 198:0-202:19 -/
def list_nth_shared_loop_pair
(T : Type) (ls0 : List T) (ls1 : List T) (i : U32) : Result (T × T) :=
list_nth_shared_loop_pair_loop T ls0 ls1 i
-/- [loops::list_nth_mut_loop_pair_merge]: loop 0: forward function
+/- [loops::list_nth_mut_loop_pair_merge]: loop 0:
Source: 'src/loops.rs', lines 223:0-238:1 -/
divergent def list_nth_mut_loop_pair_merge_loop
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) : Result (T × T) :=
- match ls0 with
- | List.Cons x0 tl0 =>
- match ls1 with
- | List.Cons x1 tl1 =>
- if i = 0#u32
- then Result.ret (x0, x1)
- else
- do
- let i0 ← i - 1#u32
- list_nth_mut_loop_pair_merge_loop T tl0 tl1 i0
- | List.Nil => Result.fail .panic
- | List.Nil => Result.fail .panic
-
-/- [loops::list_nth_mut_loop_pair_merge]: forward function
- Source: 'src/loops.rs', lines 223:0-227:27 -/
-def list_nth_mut_loop_pair_merge
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) : Result (T × T) :=
- list_nth_mut_loop_pair_merge_loop T ls0 ls1 i
-
-/- [loops::list_nth_mut_loop_pair_merge]: loop 0: backward function 0
- Source: 'src/loops.rs', lines 223:0-238:1 -/
-divergent def list_nth_mut_loop_pair_merge_loop_back
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) (ret : (T × T)) :
- Result ((List T) × (List T))
+ (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) :
+ Result ((T × T) × ((T × T) → Result ((List T) × (List T))))
:=
match ls0 with
| List.Cons x0 tl0 =>
match ls1 with
| List.Cons x1 tl1 =>
if i = 0#u32
- then let (t, t0) := ret
- Result.ret (List.Cons t tl0, List.Cons t0 tl1)
+ then
+ let back_'a :=
+ fun ret =>
+ let (t, t1) := ret
+ Result.ret (List.Cons t tl0, List.Cons t1 tl1)
+ Result.ret ((x0, x1), back_'a)
else
do
- let i0 ← i - 1#u32
- let (tl00, tl10) ←
- list_nth_mut_loop_pair_merge_loop_back T tl0 tl1 i0 ret
- Result.ret (List.Cons x0 tl00, List.Cons x1 tl10)
+ let i1 ← i - 1#u32
+ let (p, back_'a) ← list_nth_mut_loop_pair_merge_loop T tl0 tl1 i1
+ let back_'a1 :=
+ fun ret =>
+ do
+ let (tl01, tl11) ← back_'a ret
+ Result.ret (List.Cons x0 tl01, List.Cons x1 tl11)
+ Result.ret (p, back_'a1)
| List.Nil => Result.fail .panic
| List.Nil => Result.fail .panic
-/- [loops::list_nth_mut_loop_pair_merge]: backward function 0
+/- [loops::list_nth_mut_loop_pair_merge]:
Source: 'src/loops.rs', lines 223:0-227:27 -/
-def list_nth_mut_loop_pair_merge_back
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) (ret : (T × T)) :
- Result ((List T) × (List T))
+def list_nth_mut_loop_pair_merge
+ (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) :
+ Result ((T × T) × ((T × T) → Result ((List T) × (List T))))
:=
- list_nth_mut_loop_pair_merge_loop_back T ls0 ls1 i ret
+ do
+ let (p, back_'a) ← list_nth_mut_loop_pair_merge_loop T ls0 ls1 i
+ Result.ret (p, back_'a)
-/- [loops::list_nth_shared_loop_pair_merge]: loop 0: forward function
+/- [loops::list_nth_shared_loop_pair_merge]: loop 0:
Source: 'src/loops.rs', lines 241:0-256:1 -/
divergent def list_nth_shared_loop_pair_merge_loop
(T : Type) (ls0 : List T) (ls1 : List T) (i : U32) : Result (T × T) :=
@@ -466,221 +382,161 @@ divergent def list_nth_shared_loop_pair_merge_loop
then Result.ret (x0, x1)
else
do
- let i0 ← i - 1#u32
- list_nth_shared_loop_pair_merge_loop T tl0 tl1 i0
+ let i1 ← i - 1#u32
+ list_nth_shared_loop_pair_merge_loop T tl0 tl1 i1
| List.Nil => Result.fail .panic
| List.Nil => Result.fail .panic
-/- [loops::list_nth_shared_loop_pair_merge]: forward function
+/- [loops::list_nth_shared_loop_pair_merge]:
Source: 'src/loops.rs', lines 241:0-245:19 -/
def list_nth_shared_loop_pair_merge
(T : Type) (ls0 : List T) (ls1 : List T) (i : U32) : Result (T × T) :=
list_nth_shared_loop_pair_merge_loop T ls0 ls1 i
-/- [loops::list_nth_mut_shared_loop_pair]: loop 0: forward function
+/- [loops::list_nth_mut_shared_loop_pair]: loop 0:
Source: 'src/loops.rs', lines 259:0-274:1 -/
divergent def list_nth_mut_shared_loop_pair_loop
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) : Result (T × T) :=
- match ls0 with
- | List.Cons x0 tl0 =>
- match ls1 with
- | List.Cons x1 tl1 =>
- if i = 0#u32
- then Result.ret (x0, x1)
- else
- do
- let i0 ← i - 1#u32
- list_nth_mut_shared_loop_pair_loop T tl0 tl1 i0
- | List.Nil => Result.fail .panic
- | List.Nil => Result.fail .panic
-
-/- [loops::list_nth_mut_shared_loop_pair]: forward function
- Source: 'src/loops.rs', lines 259:0-263:23 -/
-def list_nth_mut_shared_loop_pair
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) : Result (T × T) :=
- list_nth_mut_shared_loop_pair_loop T ls0 ls1 i
-
-/- [loops::list_nth_mut_shared_loop_pair]: loop 0: backward function 0
- Source: 'src/loops.rs', lines 259:0-274:1 -/
-divergent def list_nth_mut_shared_loop_pair_loop_back
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) (ret : T) :
- Result (List T)
+ (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) :
+ Result ((T × T) × (T → Result (List T)))
:=
match ls0 with
| List.Cons x0 tl0 =>
match ls1 with
| List.Cons x1 tl1 =>
if i = 0#u32
- then Result.ret (List.Cons ret tl0)
+ then
+ let back_'a := fun ret => Result.ret (List.Cons ret tl0)
+ Result.ret ((x0, x1), back_'a)
else
do
- let i0 ← i - 1#u32
- let tl00 ← list_nth_mut_shared_loop_pair_loop_back T tl0 tl1 i0 ret
- Result.ret (List.Cons x0 tl00)
+ let i1 ← i - 1#u32
+ let (p, back_'a) ← list_nth_mut_shared_loop_pair_loop T tl0 tl1 i1
+ let back_'a1 :=
+ fun ret => do
+ let tl01 ← back_'a ret
+ Result.ret (List.Cons x0 tl01)
+ Result.ret (p, back_'a1)
| List.Nil => Result.fail .panic
| List.Nil => Result.fail .panic
-/- [loops::list_nth_mut_shared_loop_pair]: backward function 0
+/- [loops::list_nth_mut_shared_loop_pair]:
Source: 'src/loops.rs', lines 259:0-263:23 -/
-def list_nth_mut_shared_loop_pair_back
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) (ret : T) :
- Result (List T)
+def list_nth_mut_shared_loop_pair
+ (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) :
+ Result ((T × T) × (T → Result (List T)))
:=
- list_nth_mut_shared_loop_pair_loop_back T ls0 ls1 i ret
+ do
+ let (p, back_'a) ← list_nth_mut_shared_loop_pair_loop T ls0 ls1 i
+ Result.ret (p, back_'a)
-/- [loops::list_nth_mut_shared_loop_pair_merge]: loop 0: forward function
+/- [loops::list_nth_mut_shared_loop_pair_merge]: loop 0:
Source: 'src/loops.rs', lines 278:0-293:1 -/
divergent def list_nth_mut_shared_loop_pair_merge_loop
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) : Result (T × T) :=
- match ls0 with
- | List.Cons x0 tl0 =>
- match ls1 with
- | List.Cons x1 tl1 =>
- if i = 0#u32
- then Result.ret (x0, x1)
- else
- do
- let i0 ← i - 1#u32
- list_nth_mut_shared_loop_pair_merge_loop T tl0 tl1 i0
- | List.Nil => Result.fail .panic
- | List.Nil => Result.fail .panic
-
-/- [loops::list_nth_mut_shared_loop_pair_merge]: forward function
- Source: 'src/loops.rs', lines 278:0-282:23 -/
-def list_nth_mut_shared_loop_pair_merge
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) : Result (T × T) :=
- list_nth_mut_shared_loop_pair_merge_loop T ls0 ls1 i
-
-/- [loops::list_nth_mut_shared_loop_pair_merge]: loop 0: backward function 0
- Source: 'src/loops.rs', lines 278:0-293:1 -/
-divergent def list_nth_mut_shared_loop_pair_merge_loop_back
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) (ret : T) :
- Result (List T)
+ (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) :
+ Result ((T × T) × (T → Result (List T)))
:=
match ls0 with
| List.Cons x0 tl0 =>
match ls1 with
| List.Cons x1 tl1 =>
if i = 0#u32
- then Result.ret (List.Cons ret tl0)
+ then
+ let back_'a := fun ret => Result.ret (List.Cons ret tl0)
+ Result.ret ((x0, x1), back_'a)
else
do
- let i0 ← i - 1#u32
- let tl00 ←
- list_nth_mut_shared_loop_pair_merge_loop_back T tl0 tl1 i0 ret
- Result.ret (List.Cons x0 tl00)
+ let i1 ← i - 1#u32
+ let (p, back_'a) ←
+ list_nth_mut_shared_loop_pair_merge_loop T tl0 tl1 i1
+ let back_'a1 :=
+ fun ret => do
+ let tl01 ← back_'a ret
+ Result.ret (List.Cons x0 tl01)
+ Result.ret (p, back_'a1)
| List.Nil => Result.fail .panic
| List.Nil => Result.fail .panic
-/- [loops::list_nth_mut_shared_loop_pair_merge]: backward function 0
+/- [loops::list_nth_mut_shared_loop_pair_merge]:
Source: 'src/loops.rs', lines 278:0-282:23 -/
-def list_nth_mut_shared_loop_pair_merge_back
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) (ret : T) :
- Result (List T)
+def list_nth_mut_shared_loop_pair_merge
+ (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) :
+ Result ((T × T) × (T → Result (List T)))
:=
- list_nth_mut_shared_loop_pair_merge_loop_back T ls0 ls1 i ret
+ do
+ let (p, back_'a) ← list_nth_mut_shared_loop_pair_merge_loop T ls0 ls1 i
+ Result.ret (p, back_'a)
-/- [loops::list_nth_shared_mut_loop_pair]: loop 0: forward function
+/- [loops::list_nth_shared_mut_loop_pair]: loop 0:
Source: 'src/loops.rs', lines 297:0-312:1 -/
divergent def list_nth_shared_mut_loop_pair_loop
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) : Result (T × T) :=
- match ls0 with
- | List.Cons x0 tl0 =>
- match ls1 with
- | List.Cons x1 tl1 =>
- if i = 0#u32
- then Result.ret (x0, x1)
- else
- do
- let i0 ← i - 1#u32
- list_nth_shared_mut_loop_pair_loop T tl0 tl1 i0
- | List.Nil => Result.fail .panic
- | List.Nil => Result.fail .panic
-
-/- [loops::list_nth_shared_mut_loop_pair]: forward function
- Source: 'src/loops.rs', lines 297:0-301:23 -/
-def list_nth_shared_mut_loop_pair
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) : Result (T × T) :=
- list_nth_shared_mut_loop_pair_loop T ls0 ls1 i
-
-/- [loops::list_nth_shared_mut_loop_pair]: loop 0: backward function 1
- Source: 'src/loops.rs', lines 297:0-312:1 -/
-divergent def list_nth_shared_mut_loop_pair_loop_back
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) (ret : T) :
- Result (List T)
+ (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) :
+ Result ((T × T) × (T → Result (List T)))
:=
match ls0 with
| List.Cons x0 tl0 =>
match ls1 with
| List.Cons x1 tl1 =>
if i = 0#u32
- then Result.ret (List.Cons ret tl1)
+ then
+ let back_'b := fun ret => Result.ret (List.Cons ret tl1)
+ Result.ret ((x0, x1), back_'b)
else
do
- let i0 ← i - 1#u32
- let tl10 ← list_nth_shared_mut_loop_pair_loop_back T tl0 tl1 i0 ret
- Result.ret (List.Cons x1 tl10)
+ let i1 ← i - 1#u32
+ let (p, back_'b) ← list_nth_shared_mut_loop_pair_loop T tl0 tl1 i1
+ let back_'b1 :=
+ fun ret => do
+ let tl11 ← back_'b ret
+ Result.ret (List.Cons x1 tl11)
+ Result.ret (p, back_'b1)
| List.Nil => Result.fail .panic
| List.Nil => Result.fail .panic
-/- [loops::list_nth_shared_mut_loop_pair]: backward function 1
+/- [loops::list_nth_shared_mut_loop_pair]:
Source: 'src/loops.rs', lines 297:0-301:23 -/
-def list_nth_shared_mut_loop_pair_back
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) (ret : T) :
- Result (List T)
+def list_nth_shared_mut_loop_pair
+ (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) :
+ Result ((T × T) × (T → Result (List T)))
:=
- list_nth_shared_mut_loop_pair_loop_back T ls0 ls1 i ret
+ do
+ let (p, back_'b) ← list_nth_shared_mut_loop_pair_loop T ls0 ls1 i
+ Result.ret (p, back_'b)
-/- [loops::list_nth_shared_mut_loop_pair_merge]: loop 0: forward function
+/- [loops::list_nth_shared_mut_loop_pair_merge]: loop 0:
Source: 'src/loops.rs', lines 316:0-331:1 -/
divergent def list_nth_shared_mut_loop_pair_merge_loop
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) : Result (T × T) :=
- match ls0 with
- | List.Cons x0 tl0 =>
- match ls1 with
- | List.Cons x1 tl1 =>
- if i = 0#u32
- then Result.ret (x0, x1)
- else
- do
- let i0 ← i - 1#u32
- list_nth_shared_mut_loop_pair_merge_loop T tl0 tl1 i0
- | List.Nil => Result.fail .panic
- | List.Nil => Result.fail .panic
-
-/- [loops::list_nth_shared_mut_loop_pair_merge]: forward function
- Source: 'src/loops.rs', lines 316:0-320:23 -/
-def list_nth_shared_mut_loop_pair_merge
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) : Result (T × T) :=
- list_nth_shared_mut_loop_pair_merge_loop T ls0 ls1 i
-
-/- [loops::list_nth_shared_mut_loop_pair_merge]: loop 0: backward function 0
- Source: 'src/loops.rs', lines 316:0-331:1 -/
-divergent def list_nth_shared_mut_loop_pair_merge_loop_back
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) (ret : T) :
- Result (List T)
+ (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) :
+ Result ((T × T) × (T → Result (List T)))
:=
match ls0 with
| List.Cons x0 tl0 =>
match ls1 with
| List.Cons x1 tl1 =>
if i = 0#u32
- then Result.ret (List.Cons ret tl1)
+ then
+ let back_'a := fun ret => Result.ret (List.Cons ret tl1)
+ Result.ret ((x0, x1), back_'a)
else
do
- let i0 ← i - 1#u32
- let tl10 ←
- list_nth_shared_mut_loop_pair_merge_loop_back T tl0 tl1 i0 ret
- Result.ret (List.Cons x1 tl10)
+ let i1 ← i - 1#u32
+ let (p, back_'a) ←
+ list_nth_shared_mut_loop_pair_merge_loop T tl0 tl1 i1
+ let back_'a1 :=
+ fun ret => do
+ let tl11 ← back_'a ret
+ Result.ret (List.Cons x1 tl11)
+ Result.ret (p, back_'a1)
| List.Nil => Result.fail .panic
| List.Nil => Result.fail .panic
-/- [loops::list_nth_shared_mut_loop_pair_merge]: backward function 0
+/- [loops::list_nth_shared_mut_loop_pair_merge]:
Source: 'src/loops.rs', lines 316:0-320:23 -/
-def list_nth_shared_mut_loop_pair_merge_back
- (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) (ret : T) :
- Result (List T)
+def list_nth_shared_mut_loop_pair_merge
+ (T : Type) (ls0 : List T) (ls1 : List T) (i : U32) :
+ Result ((T × T) × (T → Result (List T)))
:=
- list_nth_shared_mut_loop_pair_merge_loop_back T ls0 ls1 i ret
+ do
+ let (p, back_'a) ← list_nth_shared_mut_loop_pair_merge_loop T ls0 ls1 i
+ Result.ret (p, back_'a)
end loops