summaryrefslogtreecommitdiff
path: root/tests/coq/demo/Demo.v
diff options
context:
space:
mode:
Diffstat (limited to 'tests/coq/demo/Demo.v')
-rw-r--r--tests/coq/demo/Demo.v167
1 files changed, 167 insertions, 0 deletions
diff --git a/tests/coq/demo/Demo.v b/tests/coq/demo/Demo.v
new file mode 100644
index 00000000..1abe7c5c
--- /dev/null
+++ b/tests/coq/demo/Demo.v
@@ -0,0 +1,167 @@
+(** THIS FILE WAS AUTOMATICALLY GENERATED BY AENEAS *)
+(** [demo] *)
+Require Import Primitives.
+Import Primitives.
+Require Import Coq.ZArith.ZArith.
+Require Import List.
+Import ListNotations.
+Local Open Scope Primitives_scope.
+Module Demo.
+
+(** [demo::choose]:
+ Source: 'src/demo.rs', lines 5:0-5:70 *)
+Definition choose
+ (T : Type) (b : bool) (x : T) (y : T) : result (T * (T -> result (T * T))) :=
+ if b
+ then let back_'a := fun (ret : T) => Return (ret, y) in Return (x, back_'a)
+ else let back_'a := fun (ret : T) => Return (x, ret) in Return (y, back_'a)
+.
+
+(** [demo::mul2_add1]:
+ Source: 'src/demo.rs', lines 13:0-13:31 *)
+Definition mul2_add1 (x : u32) : result u32 :=
+ i <- u32_add x x; u32_add i 1%u32
+.
+
+(** [demo::use_mul2_add1]:
+ Source: 'src/demo.rs', lines 17:0-17:43 *)
+Definition use_mul2_add1 (x : u32) (y : u32) : result u32 :=
+ i <- mul2_add1 x; u32_add i y
+.
+
+(** [demo::incr]:
+ Source: 'src/demo.rs', lines 21:0-21:31 *)
+Definition incr (x : u32) : result u32 :=
+ u32_add x 1%u32.
+
+(** [demo::CList]
+ Source: 'src/demo.rs', lines 27:0-27:17 *)
+Inductive CList_t (T : Type) :=
+| CList_CCons : T -> CList_t T -> CList_t T
+| CList_CNil : CList_t T
+.
+
+Arguments CList_CCons { _ }.
+Arguments CList_CNil { _ }.
+
+(** [demo::list_nth]:
+ Source: 'src/demo.rs', lines 32:0-32:56 *)
+Fixpoint list_nth (T : Type) (n : nat) (l : CList_t T) (i : u32) : result T :=
+ match n with
+ | O => Fail_ OutOfFuel
+ | S n1 =>
+ match l with
+ | CList_CCons x tl =>
+ if i s= 0%u32
+ then Return x
+ else (i1 <- u32_sub i 1%u32; list_nth T n1 tl i1)
+ | CList_CNil => Fail_ Failure
+ end
+ end
+.
+
+(** [demo::list_nth_mut]:
+ Source: 'src/demo.rs', lines 47:0-47:68 *)
+Fixpoint list_nth_mut
+ (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_'a := fun (ret : T) => Return (CList_CCons ret tl) in
+ Return (x, back_'a)
+ else (
+ i1 <- u32_sub i 1%u32;
+ p <- list_nth_mut T n1 tl i1;
+ let (t, list_nth_mut_back) := p in
+ let back_'a :=
+ fun (ret : T) =>
+ tl1 <- list_nth_mut_back ret; Return (CList_CCons x tl1) in
+ Return (t, back_'a))
+ | CList_CNil => Fail_ Failure
+ end
+ end
+.
+
+(** [demo::list_nth_mut1]: loop 0:
+ Source: 'src/demo.rs', lines 62:0-71: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_'a := fun (ret : T) => Return (CList_CCons ret tl) in
+ Return (x, back_'a)
+ else (
+ i1 <- u32_sub i 1%u32;
+ p <- list_nth_mut1_loop T n1 tl i1;
+ let (t, back_'a) := p in
+ let back_'a1 :=
+ fun (ret : T) => tl1 <- back_'a ret; Return (CList_CCons x tl1) in
+ Return (t, back_'a1))
+ | CList_CNil => Fail_ Failure
+ end
+ end
+.
+
+(** [demo::list_nth_mut1]:
+ Source: 'src/demo.rs', lines 62:0-62:77 *)
+Definition list_nth_mut1
+ (T : Type) (n : nat) (l : CList_t T) (i : u32) :
+ result (T * (T -> result (CList_t T)))
+ :=
+ p <- list_nth_mut1_loop T n l i; let (t, back_'a) := p in Return (t, back_'a)
+.
+
+(** [demo::i32_id]:
+ Source: 'src/demo.rs', lines 73:0-73:28 *)
+Fixpoint i32_id (n : nat) (i : i32) : result i32 :=
+ match n with
+ | O => Fail_ OutOfFuel
+ | S n1 =>
+ if i s= 0%i32
+ then Return 0%i32
+ else (i1 <- i32_sub i 1%i32; i2 <- i32_id n1 i1; i32_add i2 1%i32)
+ end
+.
+
+(** Trait declaration: [demo::Counter]
+ Source: 'src/demo.rs', lines 83:0-83:17 *)
+Record Counter_t (Self : Type) := mkCounter_t {
+ Counter_t_incr : Self -> result (usize * Self);
+}.
+
+Arguments mkCounter_t { _ }.
+Arguments Counter_t_incr { _ }.
+
+(** [demo::{usize}::incr]:
+ Source: 'src/demo.rs', lines 88:4-88:31 *)
+Definition usize_incr (self : usize) : result (usize * usize) :=
+ self1 <- usize_add self 1%usize; Return (self, self1)
+.
+
+(** Trait implementation: [demo::{usize}]
+ Source: 'src/demo.rs', lines 87:0-87:22 *)
+Definition demo_CounterUsizeInst : Counter_t usize := {|
+ Counter_t_incr := usize_incr;
+|}.
+
+(** [demo::use_counter]:
+ Source: 'src/demo.rs', lines 95:0-95:59 *)
+Definition use_counter
+ (T : Type) (counterTInst : Counter_t T) (cnt : T) : result (usize * T) :=
+ counterTInst.(Counter_t_incr) cnt
+.
+
+End Demo.