@@ -32,8 +32,9 @@ def addSlotFun : Fun :=
3232def guardedAddSlotFun : Fun :=
3333 { name := "guardedAddSlot"
3434 args := ["slot" , "delta" ]
35- body := require
36- (Expr.gt (Expr.var "delta" ) (Expr.lit 0 ))
35+ body := requireGt
36+ (v "delta" )
37+ (n 0 )
3738 (Stmt.sstore (Expr.var "slot" )
3839 (Expr.add (Expr.sload (Expr.var "slot" )) (Expr.var "delta" )))
3940 ret := none }
@@ -80,13 +81,13 @@ theorem guarded_add_updates (slot base delta : Nat) (h : delta > 0) :
8081 execFun guardedAddSlotFun [slot, delta] (storeOf slot base) [] =
8182 ExecResult.ok (bindArgs emptyEnv ["slot" , "delta" ] [slot, delta]) (storeOf slot (base + delta)) := by
8283 simp [guardedAddSlotFun, require, execFun, execStmt, evalExpr, storeOf, bindArgs, emptyEnv,
83- updateEnv, updateStore, h]
84+ updateEnv, updateStore, h, requireGt, v, n ]
8485
8586theorem guarded_add_reverts (slot base delta : Nat) (h : delta = 0 ) :
8687 execFun guardedAddSlotFun [slot, delta] (storeOf slot base) [] =
8788 ExecResult.reverted := by
8889 simp [guardedAddSlotFun, require, execFun, execStmt, evalExpr, storeOf, bindArgs, emptyEnv,
89- updateEnv, updateStore, h]
90+ updateEnv, updateStore, h, requireGt, v, n ]
9091
9192-- Storage specs (Store-level).
9293
@@ -119,7 +120,7 @@ theorem guardedAddSlot_meets_spec (s : Store) (slot delta : Nat) :
119120 intro hreq
120121 have hpos : delta > 0 := by exact hreq
121122 simp [guardedAddSlotSpec, guardedAddSlotFun, require, execFun, execStmt, evalExpr,
122- bindArgs, emptyEnv, updateEnv, updateStore, hpos]
123+ bindArgs, emptyEnv, updateEnv, updateStore, hpos, requireGt, v, n ]
123124
124125theorem guardedAddSlot_meets_specR_ok (s : Store) (slot delta : Nat) :
125126 (guardedAddSlotSpecR slot delta).requires s ->
@@ -129,21 +130,21 @@ theorem guardedAddSlot_meets_specR_ok (s : Store) (slot delta : Nat) :
129130 intro hreq
130131 have hpos : delta > 0 := by exact hreq
131132 simp [guardedAddSlotSpecR, guardedAddSlotFun, require, execFun, execStmt, evalExpr,
132- bindArgs, emptyEnv, updateEnv, updateStore, hpos]
133+ bindArgs, emptyEnv, updateEnv, updateStore, hpos, requireGt, v, n ]
133134
134135theorem guardedAddSlot_meets_specR_reverts (s : Store) (slot delta : Nat) :
135136 (guardedAddSlotSpecR slot delta).reverts s ->
136137 execFun guardedAddSlotFun [slot, delta] s [] = ExecResult.reverted := by
137138 intro hrev
138139 simp [guardedAddSlotSpecR, guardedAddSlotFun, require, execFun, execStmt, evalExpr,
139- bindArgs, emptyEnv, updateEnv, updateStore, hrev]
140+ bindArgs, emptyEnv, updateEnv, updateStore, hrev, requireGt, v, n ]
140141
141142theorem guardedAddSlot_reverts_when_not_requires (slot delta : Nat) (h : delta = 0 ) :
142143 (guardedAddSlotSpec slot delta).requires (storeOf slot 0 ) = False ∧
143144 execFun guardedAddSlotFun [slot, delta] (storeOf slot 0 ) [] = ExecResult.reverted := by
144145 constructor
145146 · simp [guardedAddSlotSpec, h]
146147 · simp [guardedAddSlotFun, require, execFun, execStmt, evalExpr, storeOf, bindArgs, emptyEnv,
147- updateEnv, updateStore, h]
148+ updateEnv, updateStore, h, requireGt, v, n ]
148149
149150end DumbContracts.Examples
0 commit comments