@@ -5,29 +5,21 @@ From Perennial.goose_lang Require Import ffi.disk_prelude.
5
5
(* logging2.go *)
6
6
7
7
Definition LOGCOMMIT : expr := #0.
8
- Theorem LOGCOMMIT_t Γ : Γ ⊢ LOGCOMMIT : uint64T.
9
- Proof . typecheck. Qed .
10
8
11
9
Definition LOGSTART : expr := #1.
12
- Theorem LOGSTART_t Γ : Γ ⊢ LOGSTART : uint64T.
13
- Proof . typecheck. Qed .
14
10
15
11
Definition LOGMAXBLK : expr := #510.
16
- Theorem LOGMAXBLK_t Γ : Γ ⊢ LOGMAXBLK : uint64T.
17
- Proof . typecheck. Qed .
18
12
19
13
Definition LOGEND : expr := LOGMAXBLK + LOGSTART.
20
- Theorem LOGEND_t Γ : Γ ⊢ LOGEND : uint64T.
21
- Proof . typecheck. Qed .
22
14
23
15
Definition Log := struct.decl [
24
- "logLock" :: lockRefT ;
25
- "memLock" :: lockRefT ;
16
+ "logLock" :: ptrT ;
17
+ "memLock" :: ptrT ;
26
18
"logSz" :: uint64T;
27
- "memLog" :: refT (slice.T disk.blockT) ;
28
- "memLen" :: refT uint64T ;
29
- "memTxnNxt" :: refT uint64T ;
30
- "logTxnNxt" :: refT uint64T
19
+ "memLog" :: ptrT ;
20
+ "memLen" :: ptrT ;
21
+ "memTxnNxt" :: ptrT ;
22
+ "logTxnNxt" :: ptrT
31
23
].
32
24
33
25
Definition Log__writeHdr: val :=
@@ -36,9 +28,6 @@ Definition Log__writeHdr: val :=
36
28
UInt64Put "hdr" "len";;
37
29
disk.Write LOGCOMMIT "hdr";;
38
30
#().
39
- Theorem Log__writeHdr_t: ⊢ Log__writeHdr : (struct.t Log -> uint64T -> unitT).
40
- Proof . typecheck. Qed .
41
- Hint Resolve Log__writeHdr_t : types.
42
31
43
32
Definition Init: val :=
44
33
rec: "Init" "logSz" :=
@@ -53,18 +42,12 @@ Definition Init: val :=
53
42
] in
54
43
Log__writeHdr "log" #0;;
55
44
"log".
56
- Theorem Init_t: ⊢ Init : (uint64T -> struct.t Log).
57
- Proof . typecheck. Qed .
58
- Hint Resolve Init_t : types.
59
45
60
46
Definition Log__readHdr: val :=
61
47
rec: "Log__readHdr" "log" :=
62
48
let : "hdr" := disk.Read LOGCOMMIT in
63
49
let : "disklen" := UInt64Get "hdr" in
64
50
"disklen".
65
- Theorem Log__readHdr_t: ⊢ Log__readHdr : (struct.t Log -> uint64T).
66
- Proof . typecheck. Qed .
67
- Hint Resolve Log__readHdr_t : types.
68
51
69
52
Definition Log__readBlocks: val :=
70
53
rec: "Log__readBlocks" "log" "len" :=
@@ -75,9 +58,6 @@ Definition Log__readBlocks: val :=
75
58
"blks" <-[slice.T (slice.T byteT)] SliceAppend (slice.T byteT) (![slice.T (slice.T byteT)] "blks") "blk";;
76
59
Continue);;
77
60
![slice.T (slice.T byteT)] "blks".
78
- Theorem Log__readBlocks_t: ⊢ Log__readBlocks : (struct.t Log -> uint64T -> slice.T disk.blockT).
79
- Proof . typecheck. Qed .
80
- Hint Resolve Log__readBlocks_t : types.
81
61
82
62
Definition Log__Read: val :=
83
63
rec: "Log__Read" "log" :=
@@ -86,9 +66,6 @@ Definition Log__Read: val :=
86
66
let : "blks" := Log__readBlocks "log" "disklen" in
87
67
lock.release (struct .get Log "logLock" "log");;
88
68
"blks".
89
- Theorem Log__Read_t: ⊢ Log__Read : (struct.t Log -> slice.T disk.blockT).
90
- Proof . typecheck. Qed .
91
- Hint Resolve Log__Read_t : types.
92
69
93
70
Definition Log__memWrite: val :=
94
71
rec: "Log__memWrite" "log" "l" :=
@@ -98,9 +75,6 @@ Definition Log__memWrite: val :=
98
75
struct .get Log "memLog" "log" <-[slice.T (slice.T byteT)] SliceAppend (slice.T byteT) (![slice.T (slice.T byteT)] (struct .get Log "memLog" "log")) (SliceGet (slice.T byteT) "l" (![uint64T] "i"));;
99
76
Continue);;
100
77
#().
101
- Theorem Log__memWrite_t: ⊢ Log__memWrite : (struct.t Log -> slice.T disk.blockT -> unitT).
102
- Proof . typecheck. Qed .
103
- Hint Resolve Log__memWrite_t : types.
104
78
105
79
Definition Log__memAppend: val :=
106
80
rec: "Log__memAppend" "log" "l" :=
@@ -116,9 +90,6 @@ Definition Log__memAppend: val :=
116
90
struct .get Log "memTxnNxt" "log" <-[uint64T] ![uint64T] (struct .get Log "memTxnNxt" "log") + #1;;
117
91
lock.release (struct .get Log "memLock" "log");;
118
92
(#true, "txn")).
119
- Theorem Log__memAppend_t: ⊢ Log__memAppend : (struct.t Log -> slice.T disk.blockT -> (boolT * uint64T)).
120
- Proof . typecheck. Qed .
121
- Hint Resolve Log__memAppend_t : types.
122
93
123
94
(* XXX just an atomic read? *)
124
95
Definition Log__readLogTxnNxt: val :=
@@ -127,9 +98,6 @@ Definition Log__readLogTxnNxt: val :=
127
98
let : "n" := ![uint64T] (struct.get Log "logTxnNxt" "log") in
128
99
lock.release (struct .get Log "memLock" "log");;
129
100
"n".
130
- Theorem Log__readLogTxnNxt_t: ⊢ Log__readLogTxnNxt : (struct.t Log -> uint64T).
131
- Proof . typecheck. Qed .
132
- Hint Resolve Log__readLogTxnNxt_t : types.
133
101
134
102
Definition Log__diskAppendWait: val :=
135
103
rec: "Log__diskAppendWait" "log" "txn" :=
@@ -140,9 +108,6 @@ Definition Log__diskAppendWait: val :=
140
108
then Break
141
109
else Continue));;
142
110
#().
143
- Theorem Log__diskAppendWait_t: ⊢ Log__diskAppendWait : (struct.t Log -> uint64T -> unitT).
144
- Proof . typecheck. Qed .
145
- Hint Resolve Log__diskAppendWait_t : types.
146
111
147
112
Definition Log__Append: val :=
148
113
rec: "Log__Append" "log" "l" :=
@@ -151,9 +116,6 @@ Definition Log__Append: val :=
151
116
then Log__diskAppendWait "log" "txn"
152
117
else #());;
153
118
"ok".
154
- Theorem Log__Append_t: ⊢ Log__Append : (struct.t Log -> slice.T disk.blockT -> boolT).
155
- Proof . typecheck. Qed .
156
- Hint Resolve Log__Append_t : types.
157
119
158
120
Definition Log__writeBlocks: val :=
159
121
rec: "Log__writeBlocks" "log" "l" "pos" :=
@@ -164,9 +126,6 @@ Definition Log__writeBlocks: val :=
164
126
disk.Write ("pos" + ![uint64T] "i") "bk";;
165
127
Continue);;
166
128
#().
167
- Theorem Log__writeBlocks_t: ⊢ Log__writeBlocks : (struct.t Log -> slice.T disk.blockT -> uint64T -> unitT).
168
- Proof . typecheck. Qed .
169
- Hint Resolve Log__writeBlocks_t : types.
170
129
171
130
Definition Log__diskAppend: val :=
172
131
rec: "Log__diskAppend" "log" :=
@@ -183,9 +142,6 @@ Definition Log__diskAppend: val :=
183
142
struct .get Log "logTxnNxt" "log" <-[uint64T] "memnxt";;
184
143
lock.release (struct .get Log "logLock" "log");;
185
144
#().
186
- Theorem Log__diskAppend_t: ⊢ Log__diskAppend : (struct.t Log -> unitT).
187
- Proof . typecheck. Qed .
188
- Hint Resolve Log__diskAppend_t : types.
189
145
190
146
Definition Log__Logger: val :=
191
147
rec: "Log__Logger" "log" :=
@@ -194,14 +150,11 @@ Definition Log__Logger: val :=
194
150
Log__diskAppend "log";;
195
151
Continue);;
196
152
#().
197
- Theorem Log__Logger_t: ⊢ Log__Logger : (struct.t Log -> unitT).
198
- Proof . typecheck. Qed .
199
- Hint Resolve Log__Logger_t : types.
200
153
201
154
(* txn.go *)
202
155
203
156
Definition Txn := struct.decl [
204
- "log" :: struct. ptrT Log ;
157
+ "log" :: ptrT;
205
158
"blks" :: mapT disk.blockT
206
159
].
207
160
@@ -213,9 +166,6 @@ Definition Begin: val :=
213
166
"blks" ::= NewMap disk.blockT #()
214
167
] in
215
168
"txn".
216
- Theorem Begin_t: ⊢ Begin : (struct.ptrT Log -> struct .t Txn).
217
- Proof . typecheck. Qed .
218
- Hint Resolve Begin_t : types.
219
169
220
170
Definition Txn__Write: val :=
221
171
rec: "Txn__Write" "txn" "addr" "blk" :=
@@ -231,19 +181,13 @@ Definition Txn__Write: val :=
231
181
else MapInsert (struct .get Txn "blks" "txn") "addr" (![slice.T byteT] "blk"))
232
182
else #());;
233
183
![boolT] "ret".
234
- Theorem Txn__Write_t: ⊢ Txn__Write : (struct.t Txn -> uint64T -> refT disk.blockT -> boolT).
235
- Proof . typecheck. Qed .
236
- Hint Resolve Txn__Write_t : types.
237
184
238
185
Definition Txn__Read: val :=
239
186
rec: "Txn__Read" "txn" "addr" :=
240
187
let : ("v", "ok") := MapGet (struct.get Txn "blks" "txn") "addr" in
241
188
(if : "ok"
242
189
then "v"
243
190
else disk.Read ("addr" + LOGEND)).
244
- Theorem Txn__Read_t: ⊢ Txn__Read : (struct.t Txn -> uint64T -> disk.blockT).
245
- Proof . typecheck. Qed .
246
- Hint Resolve Txn__Read_t : types.
247
191
248
192
Definition Txn__Commit: val :=
249
193
rec: "Txn__Commit" "txn" :=
@@ -252,6 +196,3 @@ Definition Txn__Commit: val :=
252
196
"blks" <-[slice.T (slice.T byteT)] SliceAppend (slice.T byteT) (![slice.T (slice.T byteT)] "blks") "v");;
253
197
let : "ok" := Log__Append (struct.load Log (struct .get Txn "log" "txn")) (![slice.T (slice.T byteT)] "blks") in
254
198
"ok".
255
- Theorem Txn__Commit_t: ⊢ Txn__Commit : (struct.t Txn -> boolT).
256
- Proof . typecheck. Qed .
257
- Hint Resolve Txn__Commit_t : types.
0 commit comments