Skip to content

Commit e8cff9c

Browse files
committed
mark recursive predicates as [rec]
1 parent a50de6c commit e8cff9c

5 files changed

Lines changed: 19 additions & 17 deletions

File tree

src/exercises/dllist/predicates.h

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,5 @@
11
/*@
2-
predicate (datatype DlList) DlList_at (pointer p) {
3-
if (is_null(p)) {
4-
return Empty_DlList{};
5-
} else {
6-
take n = RW<struct dllist>(p);
7-
take L = Take_Left(n.prev, p, n);
8-
take R = Take_Right(n.next, p, n);
9-
return Nonempty_DlList{left: L, curr: n, right: R};
10-
}
11-
}
12-
13-
predicate (datatype List) Take_Right (pointer p,
2+
predicate [rec] (datatype List) Take_Right (pointer p,
143
pointer prev_pointer,
154
struct dllist prev_dllist) {
165
if (is_null(p)) {
@@ -24,7 +13,7 @@ predicate (datatype List) Take_Right (pointer p,
2413
}
2514
}
2615
27-
predicate (datatype List) Take_Left (pointer p,
16+
predicate [rec] (datatype List) Take_Left (pointer p,
2817
pointer next_pointer,
2918
struct dllist next_dllist) {
3019
if (is_null(p)) {
@@ -37,4 +26,17 @@ predicate (datatype List) Take_Left (pointer p,
3726
return Cons{Head: P.data, Tail: T};
3827
}
3928
}
29+
30+
31+
predicate (datatype DlList) DlList_at (pointer p) {
32+
if (is_null(p)) {
33+
return Empty_DlList{};
34+
} else {
35+
take n = RW<struct dllist>(p);
36+
take L = Take_Left(n.prev, p, n);
37+
take R = Take_Right(n.next, p, n);
38+
return Nonempty_DlList{left: L, curr: n, right: R};
39+
}
40+
}
41+
4042
@*/

src/exercises/list/cn_types.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ datatype List {
44
Cons {i32 Head, datatype List Tail}
55
}
66
7-
predicate (datatype List) SLList_At(pointer p) {
7+
predicate [rec] (datatype List) SLList_At(pointer p) {
88
if (is_null(p)) {
99
return Nil{};
1010
} else {

src/exercises/queue/cn_types_3.test.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*@
2-
predicate (datatype List) QueueAux (pointer f, pointer b) {
2+
predicate [rec] (datatype List) QueueAux (pointer f, pointer b) {
33
if (ptr_eq(f,b)) {
44
return Nil{};
55
} else {

src/exercises/queue/cn_types_3.verif.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*@
2-
predicate (datatype List) QueueAux (pointer f, pointer b) {
2+
predicate [rec] (datatype List) QueueAux (pointer f, pointer b) {
33
if (ptr_eq(f,b)) {
44
return Nil{};
55
} else {

src/underconstruction/bst/cn_types.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ datatype Tree {
77
Node {datatype Tree Left, i32 Data, datatype Tree Right}
88
}
99
10-
predicate (datatype Tree) Tree_At (pointer t)
10+
predicate [rec] (datatype Tree) Tree_At (pointer t)
1111
{
1212
if (is_null(t))
1313
{

0 commit comments

Comments
 (0)