@@ -631,7 +631,8 @@ Definition LoopStruct__forLoopWait: val :=
631
631
then Break
632
632
else
633
633
struct .get LoopStruct "loopNext" "ls" <-[uint64T] ![uint64T] (struct .get LoopStruct "loopNext" "ls") + #1;;
634
- Continue)).
634
+ Continue));;
635
+ #().
635
636
Theorem LoopStruct__forLoopWait_t: ⊢ LoopStruct__forLoopWait : (struct.t LoopStruct -> uint64T -> unitT).
636
637
Proof . typecheck. Qed .
637
638
Hint Resolve LoopStruct__forLoopWait_t : types.
@@ -684,14 +685,16 @@ Definition testBreakFromLoopNoContinue: val :=
684
685
then
685
686
"i" <-[uint64T] ![uint64T] "i" + #1;;
686
687
Break
687
- else "i" <-[uint64T] ![uint64T] "i" + #2));;
688
+ else
689
+ "i" <-[uint64T] ![uint64T] "i" + #2;;
690
+ Continue));;
688
691
(![uint64T] "i" = #1).
689
692
Theorem testBreakFromLoopNoContinue_t: ⊢ testBreakFromLoopNoContinue : (unitT -> boolT).
690
693
Proof . typecheck. Qed .
691
694
Hint Resolve testBreakFromLoopNoContinue_t : types.
692
695
693
- Definition failing_testBreakFromLoopNoContinueDouble : val :=
694
- rec: "failing_testBreakFromLoopNoContinueDouble " <> :=
696
+ Definition testBreakFromLoopNoContinueDouble : val :=
697
+ rec: "testBreakFromLoopNoContinueDouble " <> :=
695
698
let : "i" := ref_to uint64T #0 in
696
699
Skip;;
697
700
(for : (λ: <>, ![uint64T] "i" < #3); (λ: <>, Skip) := λ: <>,
@@ -701,11 +704,12 @@ Definition failing_testBreakFromLoopNoContinueDouble: val :=
701
704
Break
702
705
else
703
706
"i" <-[uint64T] ![uint64T] "i" + #2;;
704
- "i" <-[uint64T] ![uint64T] "i" + #2));;
707
+ "i" <-[uint64T] ![uint64T] "i" + #2;;
708
+ Continue));;
705
709
(![uint64T] "i" = #4).
706
- Theorem failing_testBreakFromLoopNoContinueDouble_t : ⊢ failing_testBreakFromLoopNoContinueDouble : (unitT -> boolT).
710
+ Theorem testBreakFromLoopNoContinueDouble_t : ⊢ testBreakFromLoopNoContinueDouble : (unitT -> boolT).
707
711
Proof . typecheck. Qed .
708
- Hint Resolve failing_testBreakFromLoopNoContinueDouble_t : types.
712
+ Hint Resolve testBreakFromLoopNoContinueDouble_t : types.
709
713
710
714
Definition testBreakFromLoopForOnly: val :=
711
715
rec: "testBreakFromLoopForOnly" <> :=
@@ -1100,9 +1104,7 @@ Definition testOrCompare: val :=
1100
1104
rec: "testOrCompare" <> :=
1101
1105
let : "ok" := ref_to boolT #true in
1102
1106
(if : ~ (#3 > #4) || (#4 > #3)
1103
- then
1104
- "ok" <-[boolT] #false;;
1105
- #()
1107
+ then "ok" <-[boolT] #false
1106
1108
else #());;
1107
1109
(if : (#4 < #3) || (#2 > #3)
1108
1110
then "ok" <-[boolT] #false
@@ -1116,9 +1118,7 @@ Definition testAndCompare: val :=
1116
1118
rec: "testAndCompare" <> :=
1117
1119
let : "ok" := ref_to boolT #true in
1118
1120
(if : (#3 > #4) && (#4 > #3)
1119
- then
1120
- "ok" <-[boolT] #false;;
1121
- #()
1121
+ then "ok" <-[boolT] #false
1122
1122
else #());;
1123
1123
(if : (#4 > #3) || (#2 < #3)
1124
1124
then #()
@@ -1248,7 +1248,8 @@ Definition ArrayEditor__Advance: val :=
1248
1248
SliceSet uint64T "arr" #0 (SliceGet uint64T "arr" #0 + #1);;
1249
1249
SliceSet uint64T (struct .loadF ArrayEditor "s" "ae") #0 (struct .loadF ArrayEditor "next_val" "ae");;
1250
1250
struct .storeF ArrayEditor "next_val" "ae" "next";;
1251
- struct .storeF ArrayEditor "s" "ae" (SliceSkip uint64T (struct .loadF ArrayEditor "s" "ae") #1).
1251
+ struct .storeF ArrayEditor "s" "ae" (SliceSkip uint64T (struct .loadF ArrayEditor "s" "ae") #1);;
1252
+ #().
1252
1253
Theorem ArrayEditor__Advance_t: ⊢ ArrayEditor__Advance : (struct.ptrT ArrayEditor -> slice.T uint64T -> uint64T -> unitT).
1253
1254
Proof . typecheck. Qed .
1254
1255
Hint Resolve ArrayEditor__Advance_t : types.
@@ -1360,14 +1361,16 @@ Definition Foo := struct.decl [
1360
1361
Definition Bar__mutate: val :=
1361
1362
rec: "Bar__mutate" "bar" :=
1362
1363
struct .storeF Bar "a" "bar" #2;;
1363
- struct .storeF Bar "b" "bar" #3.
1364
+ struct .storeF Bar "b" "bar" #3;;
1365
+ #().
1364
1366
Theorem Bar__mutate_t: ⊢ Bar__mutate : (struct.ptrT Bar -> unitT).
1365
1367
Proof . typecheck. Qed .
1366
1368
Hint Resolve Bar__mutate_t : types.
1367
1369
1368
1370
Definition Foo__mutateBar: val :=
1369
1371
rec: "Foo__mutateBar" "foo" :=
1370
- Bar__mutate (struct .loadF Foo "bar" "foo").
1372
+ Bar__mutate (struct .loadF Foo "bar" "foo");;
1373
+ #().
1371
1374
Theorem Foo__mutateBar_t: ⊢ Foo__mutateBar : (struct.ptrT Foo -> unitT).
1372
1375
Proof . typecheck. Qed .
1373
1376
Hint Resolve Foo__mutateBar_t : types.
@@ -1436,14 +1439,16 @@ Hint Resolve S__readBVal_t : types.
1436
1439
1437
1440
Definition S__updateBValX: val :=
1438
1441
rec: "S__updateBValX" "s" "i" :=
1439
- struct .storeF TwoInts "x" (struct .fieldRef S "b" "s") "i".
1442
+ struct .storeF TwoInts "x" (struct .fieldRef S "b" "s") "i";;
1443
+ #().
1440
1444
Theorem S__updateBValX_t: ⊢ S__updateBValX : (struct.ptrT S -> uint64T -> unitT).
1441
1445
Proof . typecheck. Qed .
1442
1446
Hint Resolve S__updateBValX_t : types.
1443
1447
1444
1448
Definition S__negateC: val :=
1445
1449
rec: "S__negateC" "s" :=
1446
- struct .storeF S "c" "s" (~ (struct .loadF S "c" "s")).
1450
+ struct .storeF S "c" "s" (~ (struct .loadF S "c" "s"));;
1451
+ #().
1447
1452
Theorem S__negateC_t: ⊢ S__negateC : (struct.ptrT S -> unitT).
1448
1453
Proof . typecheck. Qed .
1449
1454
Hint Resolve S__negateC_t : types.
@@ -1649,9 +1654,7 @@ Definition New: val :=
1649
1654
let : "d" := disk.Get #() in
1650
1655
let : "diskSize" := disk.Size #() in
1651
1656
(if : "diskSize" ≤ logLength
1652
- then
1653
- Panic ("disk is too small to host log");;
1654
- #()
1657
+ then Panic ("disk is too small to host log")
1655
1658
else #());;
1656
1659
let : "cache" := NewMap disk.blockT in
1657
1660
let : "header" := intToBlock #0 in
@@ -1671,14 +1674,16 @@ Hint Resolve New_t : types.
1671
1674
1672
1675
Definition Log__lock: val :=
1673
1676
rec: "Log__lock" "l" :=
1674
- lock.acquire (struct .get Log "l" "l").
1677
+ lock.acquire (struct .get Log "l" "l");;
1678
+ #().
1675
1679
Theorem Log__lock_t: ⊢ Log__lock : (struct.t Log -> unitT).
1676
1680
Proof . typecheck. Qed .
1677
1681
Hint Resolve Log__lock_t : types.
1678
1682
1679
1683
Definition Log__unlock: val :=
1680
1684
rec: "Log__unlock" "l" :=
1681
- lock.release (struct .get Log "l" "l").
1685
+ lock.release (struct .get Log "l" "l");;
1686
+ #().
1682
1687
Theorem Log__unlock_t: ⊢ Log__unlock : (struct.t Log -> unitT).
1683
1688
Proof . typecheck. Qed .
1684
1689
Hint Resolve Log__unlock_t : types.
@@ -1734,17 +1739,16 @@ Definition Log__Write: val :=
1734
1739
Log__lock "l";;
1735
1740
let : "length" := ![uint64T] (struct.get Log "length" "l") in
1736
1741
(if : "length" ≥ MaxTxnWrites
1737
- then
1738
- Panic ("transaction is at capacity");;
1739
- #()
1742
+ then Panic ("transaction is at capacity")
1740
1743
else #());;
1741
1744
let : "aBlock" := intToBlock "a" in
1742
1745
let : "nextAddr" := #1 + #2 * "length" in
1743
1746
disk.Write "nextAddr" "aBlock";;
1744
1747
disk.Write ("nextAddr" + #1) "v";;
1745
1748
MapInsert (struct .get Log "cache" "l") "a" "v";;
1746
1749
struct .get Log "length" "l" <-[uint64T] "length" + #1;;
1747
- Log__unlock "l".
1750
+ Log__unlock "l";;
1751
+ #().
1748
1752
Theorem Log__Write_t: ⊢ Log__Write : (struct.t Log -> uint64T -> disk.blockT -> unitT).
1749
1753
Proof . typecheck. Qed .
1750
1754
Hint Resolve Log__Write_t : types.
@@ -1756,7 +1760,8 @@ Definition Log__Commit: val :=
1756
1760
let : "length" := ![uint64T] (struct.get Log "length" "l") in
1757
1761
Log__unlock "l";;
1758
1762
let : "header" := intToBlock "length" in
1759
- disk.Write #0 "header".
1763
+ disk.Write #0 "header";;
1764
+ #().
1760
1765
Theorem Log__Commit_t: ⊢ Log__Commit : (struct.t Log -> unitT).
1761
1766
Proof . typecheck. Qed .
1762
1767
Hint Resolve Log__Commit_t : types.
@@ -1783,15 +1788,17 @@ Definition applyLog: val :=
1783
1788
disk.Write (logLength + "a") "v";;
1784
1789
"i" <-[uint64T] ![uint64T] "i" + #1;;
1785
1790
Continue
1786
- else Break)).
1791
+ else Break));;
1792
+ #().
1787
1793
Theorem applyLog_t: ⊢ applyLog : (disk.Disk -> uint64T -> unitT).
1788
1794
Proof . typecheck. Qed .
1789
1795
Hint Resolve applyLog_t : types.
1790
1796
1791
1797
Definition clearLog: val :=
1792
1798
rec: "clearLog" "d" :=
1793
1799
let : "header" := intToBlock #0 in
1794
- disk.Write #0 "header".
1800
+ disk.Write #0 "header";;
1801
+ #().
1795
1802
Theorem clearLog_t: ⊢ clearLog : (disk.Disk -> unitT).
1796
1803
Proof . typecheck. Qed .
1797
1804
Hint Resolve clearLog_t : types.
@@ -1806,7 +1813,8 @@ Definition Log__Apply: val :=
1806
1813
applyLog (struct .get Log "d" "l") "length";;
1807
1814
clearLog (struct .get Log "d" "l");;
1808
1815
struct .get Log "length" "l" <-[uint64T] #0;;
1809
- Log__unlock "l".
1816
+ Log__unlock "l";;
1817
+ #().
1810
1818
Theorem Log__Apply_t: ⊢ Log__Apply : (struct.t Log -> unitT).
1811
1819
Proof . typecheck. Qed .
1812
1820
Hint Resolve Log__Apply_t : types.
@@ -1839,9 +1847,7 @@ Definition disabled_testWal: val :=
1839
1847
let : "ok" := ref_to boolT #true in
1840
1848
let : "lg" := New #() in
1841
1849
(if : Log__BeginTxn "lg"
1842
- then
1843
- Log__Write "lg" #2 (intToBlock #11);;
1844
- #()
1850
+ then Log__Write "lg" #2 (intToBlock #11)
1845
1851
else #());;
1846
1852
"ok" <-[boolT] (![boolT] "ok") && (blockToInt (Log__Read "lg" #2) = #11);;
1847
1853
"ok" <-[boolT] (![boolT] "ok") && (blockToInt (disk.Read #0) = #0);;
0 commit comments