summaryrefslogtreecommitdiff
path: root/tests/betree/BetreeMain.Clauses.fst
blob: 8fb43e07805bc65b24cb78ac8d9fb093d6f4e34d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
(** [betree_main]: templates for the decreases clauses *)
module BetreeMain.Clauses
open Primitives
open BetreeMain.Types

#set-options "--z3rlimit 50 --fuel 0 --ifuel 1"

(** [betree_main::betree::List::{1}::len]: decreases clause *)
unfold
let betree_list_len_decreases (t : Type0) (self : betree_list_t t) : betree_list_t t =
  self

(** [betree_main::betree::List::{1}::split_at]: decreases clause *)
unfold
let betree_list_split_at_decreases (t : Type0) (self : betree_list_t t)
  (n : u64) : nat =
  n

(** [betree_main::betree::List::{2}::partition_at_pivot]: decreases clause *)
unfold
let betree_list_partition_at_pivot_decreases (t : Type0)
  (self : betree_list_t (u64 & t)) (pivot : u64) : betree_list_t (u64 & t) =
  self

(** [betree_main::betree::Node::{5}::lookup_in_bindings]: decreases clause *)
unfold
let betree_node_lookup_in_bindings_decreases (key : u64)
  (bindings : betree_list_t (u64 & u64)) : betree_list_t (u64 & u64) =
  bindings

(** [betree_main::betree::Node::{5}::lookup_first_message_for_key]: decreases clause *)
unfold
let betree_node_lookup_first_message_for_key_decreases (key : u64)
  (msgs : betree_list_t (u64 & betree_message_t)) : betree_list_t (u64 & betree_message_t) =
  msgs

(** [betree_main::betree::Node::{5}::apply_upserts]: decreases clause *)
unfold
let betree_node_apply_upserts_decreases
  (msgs : betree_list_t (u64 & betree_message_t)) (prev : option u64)
  (key : u64) (st : state) : betree_list_t (u64 & betree_message_t) =
  msgs

(** [betree_main::betree::Internal::{4}::lookup_in_children]: decreases clause *)
unfold
let betree_internal_lookup_in_children_decreases (self : betree_internal_t)
  (key : u64) (st : state) : betree_internal_t =
  self

(** [betree_main::betree::Node::{5}::lookup]: decreases clause *)
unfold
let betree_node_lookup_decreases (self : betree_node_t) (key : u64)
  (st : state) : betree_node_t =
  self

(** [betree_main::betree::Node::{5}::lookup_mut_in_bindings]: decreases clause *)
unfold
let betree_node_lookup_mut_in_bindings_decreases (key : u64)
  (bindings : betree_list_t (u64 & u64)) : betree_list_t (u64 & u64) =
  bindings

unfold
let betree_node_apply_messages_to_leaf_decreases
  (bindings : betree_list_t (u64 & u64))
  (new_msgs : betree_list_t (u64 & betree_message_t)) : betree_list_t (u64 & betree_message_t) =
  new_msgs

(** [betree_main::betree::Node::{5}::filter_messages_for_key]: decreases clause *)
unfold
let betree_node_filter_messages_for_key_decreases (key : u64)
  (msgs : betree_list_t (u64 & betree_message_t)) : betree_list_t (u64 & betree_message_t) =
  msgs

(** [betree_main::betree::Node::{5}::lookup_first_message_after_key]: decreases clause *)
unfold
let betree_node_lookup_first_message_after_key_decreases (key : u64)
  (msgs : betree_list_t (u64 & betree_message_t)) : betree_list_t (u64 & betree_message_t) =
  msgs

let betree_node_apply_messages_to_internal_decreases
  (msgs : betree_list_t (u64 & betree_message_t))
  (new_msgs : betree_list_t (u64 & betree_message_t)) : betree_list_t (u64 & betree_message_t) =
  new_msgs

(* This is annoying, we can't use the following trick when defining decrease
 * clauses as separate functions:
 * [https://github.com/FStarLang/FStar/issues/138]
 *
 * Note that the quantity which effectively decreases is:
 *
 *   [betree_size; messages_length]
 *   where messages_length is 0 when there are no messages
 *   (and where we use the lexicographic ordering, of course)
 *
 * For now, we "patch" the code directly (we need to find a better way...)
 *)
let rec betree_size (bt : betree_node_t) : nat =
  match bt with
  | BetreeNodeInternal node -> 1 + betree_internal_size node
  | BetreeNodeLeaf _ -> 1

and betree_internal_size (node : betree_internal_t) : nat =
  1 + betree_size node.betree_internal_left + betree_size node.betree_internal_right

let rec betree_list_len (#a : Type0) (ls : betree_list_t a) : nat =
  match ls with
  | BetreeListCons _ tl -> 1 + betree_list_len tl
  | BetreeListNil -> 0

(*
(** [betree_main::betree::Internal::{4}::flush]: decreases clause *)
unfold
let betree_internal_flush_decreases (self : betree_internal_t)
  (params : betree_params_t) (node_id_cnt : betree_node_id_counter_t)
  (content : betree_list_t (u64 & betree_message_t)) (st : state) : nat =
  admit ()

(** [betree_main::betree::Node::{5}::apply_messages]: decreases clause *)
unfold
let betree_node_apply_messages_decreases (self : betree_node_t)
  (params : betree_params_t) (node_id_cnt : betree_node_id_counter_t)
  (msgs : betree_list_t (u64 & betree_message_t)) (st : state) : nat =
  admit ()
*)