Require Import DataTypeOps. Require Import LayerCONTRACT. Require Import DeepSpec.lib.Monad.StateMonadOption. Require Import DeepSpec.lib.Monad.RunStateTInv. Require Import lib.ArithInv. Import DeepSpec.lib.Monad.Monad.MonadNotation. Require Import Lia. Require Import List. Require Import Bool. Require Import ZArith. Require Import cclib.Maps. Require Import cclib.Integers. Require Import DataTypes. Require Import backend.MachineModel. Require Import DataTypes. Import ListNotations. Require Import core.MemoryModel. Require Import HyperTypeInst. Require Import Maps. Import Maps.Int256Tree_Properties. Import Maps.Int256Tree. Require Import ContractModel. Import ContractModel.ContractModel. Open Scope Z.Infix "+" := Int256.add : int256_scope. Infix "-" := Int256.sub : int256_scope. Infix "=?" := Int256.eq (at level 70, no associativity) : int256_scope. Ltac me_transfer_cases := try match goal with H : (Int256.one =? Int256.one)%int256 = false |- _ => rewrite Int256.eq_true in H; discriminate end; try match goal with H : runStateT mzero _ = ret _ |- _ => simpl in H; discriminate end. Ltac ds_inv := repeat ( try inv_runStateT_branching; let Case := fresh "NoOverflowOrUnderflowInTransferCase" in try match goal with | H : context[me_transfer _ _ _] |- _ => unfold me_transfer, make_machine_env in H; destruct (noOverflowOrUnderflowInTransfer _ _ _ _ && (_ _ _ _ _)) eqn:Case end ); me_transfer_cases. Section GenericProofs.forall (A B : Type) (m : list (A * B)) (x : B) (f : B -> B -> B), fold_left (fun (a : B) (p : A * B) => f a (snd p)) m x = fold_left f (List.map snd m) xforall (A B : Type) (m : list (A * B)) (x : B) (f : B -> B -> B), fold_left (fun (a : B) (p : A * B) => f a (snd p)) m x = fold_left f (List.map snd m) xA: Typeforall (B : Type) (m : list (A * B)) (x : B) (f : B -> B -> B), fold_left (fun (a : B) (p : A * B) => f a (snd p)) m x = fold_left f (List.map snd m) xA, B: Typeforall (x : B) (f : B -> B -> B), fold_left (fun (a : B) (p : A * B) => f a (snd p)) [] x = fold_left f (List.map snd []) xA, B: Type
a: (A * B)%type
m: list (A * B)
IHm: forall (x : B) (f : B -> B -> B), fold_left (fun (a : B) (p : A * B) => f a (snd p)) m x = fold_left f (List.map snd m) xforall (x : B) (f : B -> B -> B), fold_left (fun (a : B) (p : A * B) => f a (snd p)) (a :: m) x = fold_left f (List.map snd (a :: m)) xA, B: Typeforall (x : B) (f : B -> B -> B), fold_left (fun (a : B) (p : A * B) => f a (snd p)) [] x = fold_left f (List.map snd []) xA, B: Type
x: B
f: B -> B -> Bfold_left (fun (a : B) (p : A * B) => f a (snd p)) [] x = fold_left f (List.map snd []) xreflexivity.A, B: Type
x: B
f: B -> B -> Bx = xA, B: Type
a: (A * B)%type
m: list (A * B)
IHm: forall (x : B) (f : B -> B -> B), fold_left (fun (a : B) (p : A * B) => f a (snd p)) m x = fold_left f (List.map snd m) xforall (x : B) (f : B -> B -> B), fold_left (fun (a : B) (p : A * B) => f a (snd p)) (a :: m) x = fold_left f (List.map snd (a :: m)) xA, B: Type
a: (A * B)%type
m: list (A * B)
IHm: forall (x : B) (f : B -> B -> B), fold_left (fun (a : B) (p : A * B) => f a (snd p)) m x = fold_left f (List.map snd m) x
x: B
f: B -> B -> Bfold_left (fun (a : B) (p : A * B) => f a (snd p)) (a :: m) x = fold_left f (List.map snd (a :: m)) xA, B: Type
a: (A * B)%type
m: list (A * B)
IHm: forall (x : B) (f : B -> B -> B), fold_left (fun (a : B) (p : A * B) => f a (snd p)) m x = fold_left f (List.map snd m) x
x: B
f: B -> B -> Bfold_left (fun (a : B) (p : A * B) => f a (snd p)) m (f x (snd a)) = fold_left f (List.map snd m) (f x (snd a))reflexivity. Qed.A, B: Type
a: (A * B)%type
m: list (A * B)
IHm: forall (x : B) (f : B -> B -> B), fold_left (fun (a : B) (p : A * B) => f a (snd p)) m x = fold_left f (List.map snd m) x
x: B
f: B -> B -> Bfold_left f (List.map snd m) (f x (snd a)) = fold_left f (List.map snd m) (f x (snd a))forall (init : Z) (m : t Z), fold1 Z.add m init = fold1 Z.add m 0 + initforall (init : Z) (m : t Z), fold1 Z.add m init = fold1 Z.add m 0 + initinit: Z
m: t Zfold1 Z.add m init = fold1 Z.add m 0 + initinit: Z
m: t Zfold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements m) init = fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements m) 0 + initinit: Z
m: t Zforall x : Z, fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements m) x = fold_left Z.add (List.map snd (elements m)) xinit: Z
m: t Z
H: forall x : Z, fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements m) x = fold_left Z.add (List.map snd (elements m)) xfold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements m) init = fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements m) 0 + initinit: Z
m: t Zforall x : Z, fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements m) x = fold_left Z.add (List.map snd (elements m)) xapply fold_snd_map.init: Z
m: t Z
x: Zfold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements m) x = fold_left Z.add (List.map snd (elements m)) xinit: Z
m: t Z
H: forall x : Z, fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements m) x = fold_left Z.add (List.map snd (elements m)) xfold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements m) init = fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements m) 0 + initinit: Z
m: t Z
H: forall x : Z, fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements m) x = fold_left Z.add (List.map snd (elements m)) xfold_left Z.add (List.map snd (elements m)) init = fold_left Z.add (List.map snd (elements m)) 0 + initinit: Z
m: t Zfold_left Z.add (List.map snd (elements m)) init = fold_left Z.add (List.map snd (elements m)) 0 + initinit: Z
m: t Zfold_left Z.add (List.map snd (elements m)) init = fold_left Z.add (List.map snd (elements m) ++ [init]) 0init: Z
m: t Zfold_right Z.add init (List.map snd (elements m)) = fold_right Z.add 0 (List.map snd (elements m) ++ [init])init: Z
m: t Z
l: list Z
Heql: l = List.map snd (elements m)fold_right Z.add init l = fold_right Z.add 0 (l ++ [init])init: Z
m: t Z
l: list Zfold_right Z.add init l = fold_right Z.add 0 (l ++ [init])init: Z
l: list Zfold_right Z.add init l = fold_right Z.add 0 (l ++ [init])init: Zforall l : list Z, fold_right Z.add init l = fold_right Z.add 0 (l ++ [init])init: Zfold_right Z.add init [] = fold_right Z.add 0 ([] ++ [init])init, a: Z
l: list Z
IHl: fold_right Z.add init l = fold_right Z.add 0 (l ++ [init])fold_right Z.add init (a :: l) = fold_right Z.add 0 ((a :: l) ++ [init])init: Zfold_right Z.add init [] = fold_right Z.add 0 ([] ++ [init])lia.init: Zinit = init + 0init, a: Z
l: list Z
IHl: fold_right Z.add init l = fold_right Z.add 0 (l ++ [init])fold_right Z.add init (a :: l) = fold_right Z.add 0 ((a :: l) ++ [init])init, a: Z
l: list Z
IHl: fold_right Z.add init l = fold_right Z.add 0 (l ++ [init])a + fold_right Z.add init l = a + fold_right Z.add 0 (l ++ [init])reflexivity. Qed.init, a: Z
l: list Z
IHl: fold_right Z.add init l = fold_right Z.add 0 (l ++ [init])a + fold_right Z.add 0 (l ++ [init]) = a + fold_right Z.add 0 (l ++ [init])forall (m : t Z32) (k : elt) (v : Z32), get_default 0 k m = 0 -> sum (set k v m) = sum m + vforall (m : t Z32) (k : elt) (v : Z32), get_default 0 k m = 0 -> sum (set k v m) = sum m + vforall (m : t Z) (k : elt) (v : Z), get_default 0 k m = 0 -> sum (set k v m) = sum m + vm: t Z
k: elt
v: Z
H: get_default 0 k m = 0sum (set k v m) = sum m + vm: t Z
k: elt
v: Z
H: get_default 0 k m = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) (0 + v)sum (set k v m) = sum m + vm: t Z
k: elt
v: Z
H: get_default 0 k m = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) vsum (set k v m) = sum m + vm: t Z
k: elt
v: Z
H: get_default 0 k m = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) vfold1 Z.add (set k v m) 0 = fold1 Z.add m 0 + vm: t Z
k: elt
v: Z
H: get_default 0 k m = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) vfold1 Z.add (remove k (set k v m)) v = fold1 Z.add m 0 + vm: t Z
k: elt
v: Z
H: get_default 0 k m = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) vfold1 Z.add (remove k m) v = fold1 Z.add m 0 + vm: t Z
k: elt
v: Z
H: match get k m with | Some v => v | None => 0 end = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) vfold1 Z.add (remove k m) v = fold1 Z.add m 0 + vm: t Z
k: elt
v, z: Z
Case: get k m = Some z
H: z = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) vfold1 Z.add (remove k m) v = fold1 Z.add m 0 + vm: t Z
k: elt
v: Z
Case: get k m = None
H: 0 = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) vfold1 Z.add (remove k m) v = fold1 Z.add m 0 + vm: t Z
k: elt
v, z: Z
Case: get k m = Some z
H: z = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) vfold1 Z.add (remove k m) v = fold1 Z.add m 0 + vm: t Z
k: elt
v, z: Z
Case: get k m = Some 0
H: z = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) vfold1 Z.add (remove k m) v = fold1 Z.add m 0 + vm: t Z
k: elt
v, z: Z
Case: get k m = Some 0
H: z = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) v
Zswap: forall x y a : Z, a + x + y = a + y + xfold1 Z.add (remove k m) v = fold1 Z.add m 0 + vm: t Z
k: elt
v, z: Z
Case: get k m = Some 0
H: z = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) v
Zswap: forall x y a : Z, a + x + y = a + y + x
H0:= fold1_get Z.add Zswap v Case: fold1 Z.add m v = fold1 Z.add (remove k m) (v + 0)fold1 Z.add (remove k m) v = fold1 Z.add m 0 + vm: t Z
k: elt
v, z: Z
Case: get k m = Some 0
H: z = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) v
Zswap: forall x y a : Z, a + x + y = a + y + x
H0: fold1 Z.add m v = fold1 Z.add (remove k m) vfold1 Z.add (remove k m) v = fold1 Z.add m 0 + vm: t Z
k: elt
v, z: Z
Case: get k m = Some 0
H: z = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) v
Zswap: forall x y a : Z, a + x + y = a + y + x
H0: fold1 Z.add m v = fold1 Z.add (remove k m) vfold1 Z.add m v = fold1 Z.add m 0 + vapply sum_starting_from_init_equals_sum_plus_init.m: t Z
k: elt
v, z: Z
Case: get k m = Some 0
H: z = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) v
Zswap: forall x y a : Z, a + x + y = a + y + x
H0: fold1 Z.add m v = fold1 Z.add (remove k m) v
e:= sum_extensional: forall (m n : t Z) (init : Z), (forall i : elt, get_default 0 i m = get_default 0 i n) -> fold1 Z.add m init = fold1 Z.add n initfold1 Z.add m v = fold1 Z.add m 0 + vm: t Z
k: elt
v: Z
Case: get k m = None
H: 0 = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) vfold1 Z.add (remove k m) v = fold1 Z.add m 0 + vm: t Z
k: elt
v: Z
Case: get k m = None
H: 0 = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) vget_default 0 k m = 0m: t Z
k: elt
v: Z
Case: get k m = None
H: 0 = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) v
H0: get_default 0 k m = 0fold1 Z.add (remove k m) v = fold1 Z.add m 0 + vm: t Z
k: elt
v: Z
Case: get k m = None
H: 0 = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) vmatch get k m with | Some v => v | None => 0 end = 0m: t Z
k: elt
v: Z
Case: get k m = None
H: 0 = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) v
H0: get_default 0 k m = 0fold1 Z.add (remove k m) v = fold1 Z.add m 0 + vm: t Z
k: elt
v: Z
Case: get k m = None
H: 0 = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) v0 = 0m: t Z
k: elt
v: Z
Case: get k m = None
H: 0 = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) v
H0: get_default 0 k m = 0fold1 Z.add (remove k m) v = fold1 Z.add m 0 + vm: t Z
k: elt
v: Z
Case: get k m = None
H: 0 = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) v
H0: get_default 0 k m = 0fold1 Z.add (remove k m) v = fold1 Z.add m 0 + vm: t Z
k: elt
v: Z
Case: get k m = None
H: 0 = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) v
H0: get_default 0 k m = 0
e:= sum_get_default v k m H0: fold1 Z.add m v = fold1 Z.add (remove k m) (v + 0)fold1 Z.add (remove k m) v = fold1 Z.add m 0 + vm: t Z
k: elt
v: Z
Case: get k m = None
H: 0 = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) v
H0: get_default 0 k m = 0
e: fold1 Z.add m v = fold1 Z.add (remove k m) vfold1 Z.add (remove k m) v = fold1 Z.add m 0 + vapply sum_starting_from_init_equals_sum_plus_init. Qed.m: t Z
k: elt
v: Z
Case: get k m = None
H: 0 = 0
Lemma1:= sum_get_default 0 k (set k v m): get_default 0 k (set k v m) = v -> fold1 Z.add (set k v m) 0 = fold1 Z.add (remove k (set k v m)) v
H0: get_default 0 k m = 0
e: fold1 Z.add m v = fold1 Z.add (remove k m) vfold1 Z.add m v = fold1 Z.add m 0 + vforall (k : elt) (m : t Z), fold1 Z.add (set k 0 m) 0 = fold1 Z.add (remove k m) 0forall (k : elt) (m : t Z), fold1 Z.add (set k 0 m) 0 = fold1 Z.add (remove k m) 0k: elt
m: t Zfold1 Z.add (set k 0 m) 0 = fold1 Z.add (remove k m) 0k: elt
m: t Z
e:= grs k m: get k (remove k m) = Nonefold1 Z.add (set k 0 m) 0 = fold1 Z.add (remove k m) 0k: elt
m: t Z
e:= grs k m: get k (remove k m) = None
p:= set_permutation 0 e: Permutation.Permutation (elements (set k 0 (remove k m))) ((k, 0) :: elements (remove k m))fold1 Z.add (set k 0 m) 0 = fold1 Z.add (remove k m) 0k: elt
m: t Z
e:= grs k m: get k (remove k m) = None
p: Permutation.Permutation (elements (set k 0 m)) ((k, 0) :: elements (remove k m))fold1 Z.add (set k 0 m) 0 = fold1 Z.add (remove k m) 0k: elt
m: t Z
e:= grs k m: get k (remove k m) = None
p: Permutation.Permutation (elements (set k 0 m)) ((k, 0) :: elements (remove k m))fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements (set k 0 m)) 0 = fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements (remove k m)) 0k: elt
m: t Z
e:= grs k m: get k (remove k m) = None
p: Permutation.Permutation (elements (set k 0 m)) ((k, 0) :: elements (remove k m))
Hf_comm: forall (b1 b2 : elt * Z) (a : Z), a + snd b1 + snd b2 = a + snd b2 + snd b1fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements (set k 0 m)) 0 = fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements (remove k m)) 0k: elt
m: t Z
e:= grs k m: get k (remove k m) = None
p: Permutation.Permutation (elements (set k 0 m)) ((k, 0) :: elements (remove k m))
Hf_comm: forall (b1 b2 : elt * Z) (a : Z), a + snd b1 + snd b2 = a + snd b2 + snd b1
e0:= fold1_permutation (fun (a : Z) (p0 : elt * Z) => a + snd p0) Hf_comm p: forall init : Z, fold_left (fun (a : Z) (p0 : elt * Z) => a + snd p0) (elements (set k 0 m)) init = fold_left (fun (a : Z) (p0 : elt * Z) => a + snd p0) ((k, 0) :: elements (remove k m)) initfold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements (set k 0 m)) 0 = fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements (remove k m)) 0k: elt
m: t Z
e:= grs k m: get k (remove k m) = None
p: Permutation.Permutation (elements (set k 0 m)) ((k, 0) :: elements (remove k m))
Hf_comm: forall (b1 b2 : elt * Z) (a : Z), a + snd b1 + snd b2 = a + snd b2 + snd b1
e0:= fold1_permutation (fun (a : Z) (p0 : elt * Z) => a + snd p0) Hf_comm p: forall init : Z, fold_left (fun (a : Z) (p0 : elt * Z) => a + snd p0) (elements (set k 0 m)) init = fold_left (fun (a : Z) (p0 : elt * Z) => a + snd p0) ((k, 0) :: elements (remove k m)) initfold_left (fun (a : Z) (p0 : elt * Z) => a + snd p0) ((k, 0) :: elements (remove k m)) 0 = fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements (remove k m)) 0reflexivity. Qed.k: elt
m: t Z
e:= grs k m: get k (remove k m) = None
p: Permutation.Permutation (elements (set k 0 m)) ((k, 0) :: elements (remove k m))
Hf_comm: forall (b1 b2 : elt * Z) (a : Z), a + snd b1 + snd b2 = a + snd b2 + snd b1
e0:= fold1_permutation (fun (a : Z) (p0 : elt * Z) => a + snd p0) Hf_comm p: forall init : Z, fold_left (fun (a : Z) (p0 : elt * Z) => a + snd p0) (elements (set k 0 m)) init = fold_left (fun (a : Z) (p0 : elt * Z) => a + snd p0) ((k, 0) :: elements (remove k m)) initfold_left (fun (a : Z) (p0 : elt * Z) => a + snd p0) (elements (remove k m)) 0 = fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements (remove k m)) 0forall (k : elt) (m : t Z) (v : Z), get_default 0 k m = v -> sum (set k 0 m) = sum m - vforall (k : elt) (m : t Z) (v : Z), get_default 0 k m = v -> sum (set k 0 m) = sum m - vk: elt
m: t Z
v: Z
H: get_default 0 k m = vsum (set k 0 m) = sum m - vk: elt
m: t Z
v: Z
H: get_default 0 k m = vfold1 Z.add (set k 0 m) 0 = fold1 Z.add m 0 - vk: elt
m: t Z
v: Z
H: match get k m with | Some v => v | None => 0 end = vfold1 Z.add (set k 0 m) 0 = fold1 Z.add m 0 - vk: elt
m: t Z
v, z: Z
Case: get k m = Some z
H: z = vfold1 Z.add (set k 0 m) 0 = fold1 Z.add m 0 - vk: elt
m: t Z
v: Z
Case: get k m = None
H: 0 = vfold1 Z.add (set k 0 m) 0 = fold1 Z.add m 0 - vk: elt
m: t Z
v, z: Z
Case: get k m = Some z
H: z = vfold1 Z.add (set k 0 m) 0 = fold1 Z.add m 0 - vk: elt
m: t Z
v: Z
Case: get k m = Some vfold1 Z.add (set k 0 m) 0 = fold1 Z.add m 0 - vk: elt
m: t Z
v: Z
Case: get k m = Some v
H: forall x y a : Z, a + x + y = a + y + xfold1 Z.add (set k 0 m) 0 = fold1 Z.add m 0 - vk: elt
m: t Z
v: Z
Case: get k m = Some v
H: forall x y a : Z, a + x + y = a + y + x
e:= fold1_get Z.add H 0 Case: fold1 Z.add m 0 = fold1 Z.add (remove k m) (0 + v)fold1 Z.add (set k 0 m) 0 = fold1 Z.add m 0 - vk: elt
m: t Z
v: Z
Case: get k m = Some v
H: forall x y a : Z, a + x + y = a + y + x
e:= fold1_get Z.add H 0 Case: fold1 Z.add m 0 = fold1 Z.add (remove k m) (0 + v)fold1 Z.add (set k 0 m) 0 = fold1 Z.add (remove k m) (0 + v) - vk: elt
m: t Z
v: Z
Case: get k m = Some v
H: forall x y a : Z, a + x + y = a + y + x
e:= fold1_get Z.add H 0 Case: fold1 Z.add m 0 = fold1 Z.add (remove k m) (0 + v)fold1 Z.add (set k 0 m) 0 = fold1 Z.add (remove k m) v - v(* Set Printing All. *)k: elt
m: t Z
v: Z
Case: get k m = Some v
H: forall x y a : Z, a + x + y = a + y + x
e:= fold1_get Z.add H 0 Case: fold1 Z.add m 0 = fold1 Z.add (remove k m) (0 + v)fold1 Z.add (set k 0 m) 0 = fold1 Z.add (remove k m) 0 + v - vk: elt
m: t Z
v: Z
Case: get k m = Some v
H: forall x y a : Z, a + x + y = a + y + x
e:= fold1_get Z.add H 0 Case: fold1 Z.add m 0 = fold1 Z.add (remove k m) (0 + v)fold1 Z.add (remove k m) 0 + v - v = fold1 Z.add (remove k m) 0k: elt
m: t Z
v: Z
Case: get k m = Some v
H: forall x y a : Z, a + x + y = a + y + x
e:= fold1_get Z.add H 0 Case: fold1 Z.add m 0 = fold1 Z.add (remove k m) (0 + v)
H0: fold1 Z.add (remove k m) 0 + v - v = fold1 Z.add (remove k m) 0fold1 Z.add (set k 0 m) 0 = fold1 Z.add (remove k m) 0 + v - vk: elt
m: t Z
v: Z
Case: get k m = Some v
H: forall x y a : Z, a + x + y = a + y + x
e:= fold1_get Z.add H 0 Case: fold1 Z.add m 0 = fold1 Z.add (remove k m) (0 + v)
H0: fold1 Z.add (remove k m) 0 + v - v = fold1 Z.add (remove k m) 0fold1 Z.add (set k 0 m) 0 = fold1 Z.add (remove k m) 0 + v - vapply sum_set_0_remove.k: elt
m: t Z
v: Z
Case: get k m = Some v
H: forall x y a : Z, a + x + y = a + y + x
e:= fold1_get Z.add H 0 Case: fold1 Z.add m 0 = fold1 Z.add (remove k m) (0 + v)
H0: fold1 Z.add (remove k m) 0 + v - v = fold1 Z.add (remove k m) 0fold1 Z.add (set k 0 m) 0 = fold1 Z.add (remove k m) 0k: elt
m: t Z
v: Z
Case: get k m = None
H: 0 = vfold1 Z.add (set k 0 m) 0 = fold1 Z.add m 0 - vk: elt
m: t Z
v: Z
Case: get k m = None
H: 0 = vfold1 Z.add (set k 0 m) 0 = fold1 Z.add m 0 - vk: elt
m: t Z
Case: get k m = Nonefold1 Z.add (set k 0 m) 0 = fold1 Z.add m 0 - 0k: elt
m: t Z
Case: get k m = Nonefold1 Z.add (set k 0 m) 0 = fold1 Z.add m 0k: elt
m: t Z
Case: get k m = None
p:= set_permutation 0 Case: Permutation.Permutation (elements (set k 0 m)) ((k, 0) :: elements m)fold1 Z.add (set k 0 m) 0 = fold1 Z.add m 0k: elt
m: t Z
Case: get k m = None
p:= set_permutation 0 Case: Permutation.Permutation (elements (set k 0 m)) ((k, 0) :: elements m)fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements (set k 0 m)) 0 = fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements m) 0k: elt
m: t Z
Case: get k m = None
p:= set_permutation 0 Case: Permutation.Permutation (elements (set k 0 m)) ((k, 0) :: elements m)fold_left (fun (a : Z) (p : elt * Z) => a + snd p) ((k, 0) :: elements m) 0 = fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements m) 0reflexivity. Qed.k: elt
m: t Z
Case: get k m = None
p:= set_permutation 0 Case: Permutation.Permutation (elements (set k 0 m)) ((k, 0) :: elements m)fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements m) 0 = fold_left (fun (a : Z) (p : elt * Z) => a + snd p) (elements m) 0forall (m : t Z) (k : elt) (x : Z), sum m <= x -> sum (set k 0 m) <= x - get_default 0 k mm: t Z
k: elt
x: Z
H: sum m <= xsum (set k 0 m) <= x - get_default 0 k mlia. Qed. End GenericProofs. Module FunctionalCorrectness. (* The goal here is to, in a sense, quantify over an arbitrary snapshot of the Blockchain and then model all possible interactions after that point. In particular, modelling most precisely the smart contract. *) Section Blockchain_Model. Open Scope int256. Context (snapshot_timestamp : int256) (snapshot_number : int256) (snapshot_blockhash : int256 -> int256) (snapshot_balances : addr -> wei). Context (snapshot_balances_valid_prf : forall a, 0 <= (snapshot_balances a) < Int256.modulus). Context (contract_address : addr). Definition ContractState := global_abstract_data_type. Context (address_accepts_funds : option ContractState -> addr -> addr -> wei -> bool). (* The following is a helpful alternative to suppose instead of using `address_accepts_funds` alone. But it must be assumed explicitly. *) Definition address_accepts_funds_assumed_for_from_contract d sender recipient amount := if sender =? contract_address then true else address_accepts_funds d sender recipient amount. Close Scope int256. (* Definition address_accepts_funds_assumption := address_accepts_funds_assumed_for_from_contract. *) Definition address_accepts_funds_assumption (_ : option ContractState) (_ _ : addr) (_ : wei) := true. (* The current model also has the implicit assumption that the transfers to a smart contract during a function call via callvalue are always accepted by the contract. This could be changed by editing callvalue_prf in the definition of Action, similarly to how it is done for `externalBalanceTransfer` *) Definition constructor_call_context := {| origin := Int256.zero; caller := Int256.zero; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}. Definition constructor_blockchain_state := {| timestamp := snapshot_timestamp; block_number := snapshot_number; balance := snapshot_balances; blockhash := snapshot_blockhash; contract_state := init_global_abstract_data |}. Program Definition constructor_machine_env := make_machine_env contract_address constructor_blockchain_state constructor_call_context address_accepts_funds_assumption _ _ _.m: t Z
k: elt
x: Z
H: sum m <= xsum m - get_default 0 k m <= x - get_default 0 k msnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool0 <= 0 < Int256.moduluslia. Defined.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool0 <= 0 < Z.pos (shift_nat Int256.wordsize 1)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> boolnoOverflowOrUnderflowInTransfer Int256.zero contract_address 0 snapshot_balances = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool(0 <=? 0) && (0 <? Int256.modulus) && (snapshot_balances Int256.zero - 0 >=? 0) && (snapshot_balances contract_address + 0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool(0 <=? 0) && (0 <? Int256.modulus) && (snapshot_balances Int256.zero - 0 >=? 0) && (snapshot_balances contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool(0 <=? 0) && (0 <? Int256.modulus) && (snapshot_balances Int256.zero >=? 0) && (snapshot_balances contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool(0 <=? 0) && (0 <? Int256.modulus) && (snapshot_balances Int256.zero >=? 0) && (snapshot_balances contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool(0 <=? 0) && (0 <? Int256.modulus) && (snapshot_balances Int256.zero >=? 0) = true /\ (snapshot_balances contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool(0 <=? 0) && (0 <? Int256.modulus) && (snapshot_balances Int256.zero >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool(snapshot_balances contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
H: 0 <= snapshot_balances Int256.zero < Int256.modulus(0 <=? 0) && (0 <? Int256.modulus) && (snapshot_balances Int256.zero >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool(snapshot_balances contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool(snapshot_balances contract_address <? Int256.modulus) = truelia. Defined. Context {HmemOps: MemoryModelOps mem}. Context {memModelOps : MemoryModelOps mem}. Definition init_state := match runStateT (Crowdfunding_constructor_opt constructor_machine_env) init_global_abstract_data with | Some (_, d) => Some d | None => None end.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
H: 0 <= snapshot_balances contract_address < Int256.modulus(snapshot_balances contract_address <? Int256.modulus) = true(* The following lemma is true for the current setup right now, but would not be true in general, e.g. if the constructor allowed arbitrary setting of a storage variable. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps meminit_state = Some init_global_abstract_datasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps meminit_state = Some init_global_abstract_datasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memmatch runStateT (Crowdfunding_constructor_opt constructor_machine_env) init_global_abstract_data with | Some (_, d) => Some d | None => None end = Some init_global_abstract_datasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memSome {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := {| Int256.intval := 890025619261977197475349953386626580431692757011; Int256.intrange := Int256.Z_mod_modulus_range' 890025619261977197475349953386626580431692757011 |}; Crowdfunding_max_block := {| Int256.intval := 140; Int256.intrange := Int256.Z_mod_modulus_range' 140 |}; Crowdfunding_goal := 50; Crowdfunding_backers := exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) PTree.Leaf (fun (x : positive) (x0 : PTree.Leaf ! x <> None) => Maps.Int256Tree.empty_obligation_1 x x0); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := 0; Crowdfunding_successfullyDonated_msg := 1; Crowdfunding_alreadyDonated_msg := 2; Crowdfunding_funded_msg := 3; Crowdfunding_failed_msg := 4; Crowdfunding_too_early_to_claim_funds_msg := 5; Crowdfunding_too_early_to_reclaim_msg := 6; Crowdfunding_cannot_refund_msg := 7; Crowdfunding_here_is_your_money_msg := 8 |} = Some {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := {| Int256.intval := 890025619261977197475349953386626580431692757011; Int256.intrange := Int256.Z_mod_modulus_range' 890025619261977197475349953386626580431692757011 |}; Crowdfunding_max_block := {| Int256.intval := 140; Int256.intrange := Int256.Z_mod_modulus_range' 140 |}; Crowdfunding_goal := 50; Crowdfunding_backers := exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) PTree.Leaf (fun (x : positive) (x0 : PTree.Leaf ! x <> None) => Maps.Int256Tree.empty_obligation_1 x x0); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := 0; Crowdfunding_successfullyDonated_msg := 1; Crowdfunding_alreadyDonated_msg := 2; Crowdfunding_funded_msg := 3; Crowdfunding_failed_msg := 4; Crowdfunding_too_early_to_claim_funds_msg := 5; Crowdfunding_too_early_to_reclaim_msg := 6; Crowdfunding_cannot_refund_msg := 7; Crowdfunding_here_is_your_money_msg := 8 |}reflexivity. Qed. Definition initial_state := mkBlockchainState snapshot_timestamp snapshot_number snapshot_balances snapshot_blockhash init_global_abstract_data . Definition updateTimeAndBlock before block_count time_passing : BlockchainState := mkBlockchainState (time_passing + (timestamp before))%int256 (block_count + (block_number before))%int256 (balance before) (blockhash before) (contract_state before) . Definition validTimeChange block_count time_passing current_block_number current_timestamp : bool := ((Int256.intval block_count) + (Int256.intval current_block_number) <=? Int256.max_unsigned)%Z && ((Int256.intval time_passing) + (Int256.intval current_timestamp) <=? Int256.max_unsigned)%Z. Definition update_balances sender recipient amount balances : (addr -> wei) := (* Here the balances are updated without checking for overflows. Overflow checks must be done elsewhere. *) fun a => if (sender =? recipient)%int256 then balances a else if (a =? sender)%int256 then (balances sender) - amount else if (a =? recipient)%int256 then (balances recipient) + amount else balances a. Definition update_balance before latest_balances : BlockchainState := mkBlockchainState (timestamp before) (block_number before) latest_balances (blockhash before) (contract_state before) . Definition current_balances (successful_transfer : option (addr * Z)) (initial_balances : addr -> wei) : (addr -> wei) := match successful_transfer with | None => initial_balances | Some (recipient, amount) => update_balances contract_address recipient amount initial_balances end. Definition new_balance_after_contract_call (before : BlockchainState) (context : CallContext) (d : ContractState) : (addr -> wei) := (current_balances (Outgoing_transfer_recipient_and_amount d) (update_balances (caller context) contract_address (callvalue context) (balance before))). Definition resetTransfers (d : ContractState) : ContractState := {| Crowdfunding_owner := Crowdfunding_owner d; Crowdfunding_max_block := Crowdfunding_max_block d; Crowdfunding_goal := Crowdfunding_goal d; Crowdfunding_backers := Crowdfunding_backers d; Crowdfunding_funded := Crowdfunding_funded d; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg d; Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg d; Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg d; Crowdfunding_funded_msg := Crowdfunding_funded_msg d; Crowdfunding_failed_msg := Crowdfunding_failed_msg d; Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg d; Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg d; Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg d; Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg d; Outgoing_transfer_recipient_and_amount := None |}. Definition next_blockchain_state (before : BlockchainState) (context : CallContext) (d : ContractState) : BlockchainState := mkBlockchainState (timestamp before) (block_number before) (new_balance_after_contract_call before context d) (blockhash before) (resetTransfers d). Definition next_blockchain_state_keep_transfer (before : BlockchainState) (context : CallContext) (d : ContractState) : BlockchainState := mkBlockchainState (timestamp before) (block_number before) (new_balance_after_contract_call before context d) (blockhash before) d. (* This approach to defining Action requires all calls to a contract function to succeed, i.e. return (Some _ _), failure cases are amalgamated into the revert case. This means only needing to prove the (typically) trivial revert case once, without losing generality. *) Inductive Action (before : BlockchainState) := | call_Crowdfunding_donate (context : CallContext) (callvalue_bounded_prf : 0 <= callvalue context < Int256.modulus) (balances_bounded_prf : forall a, 0 <= (balance before) a < Int256.modulus) (callvalue_prf : noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance before) = true) r contract_state_after (case_donate_prf : runStateT (Crowdfunding_donate_opt (make_machine_env contract_address before context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state before) = Some (r, contract_state_after)) | call_Crowdfunding_getFunds (context : CallContext) (callvalue_bounded_prf : 0 <= callvalue context < Int256.modulus) (balances_bounded_prf : forall a, 0 <= (balance before) a < Int256.modulus) (callvalue_prf : noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance before) = true) r contract_state_after (case_getFunds_prf : runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address before context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state before) = Some (r, contract_state_after)) | call_Crowdfunding_claim (context : CallContext) (callvalue_bounded_prf : 0 <= callvalue context < Int256.modulus) (balances_bounded_prf : forall a, 0 <= (balance before) a < Int256.modulus) (callvalue_prf : noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance before) = true) r contract_state_after (case_claim_prf : runStateT (Crowdfunding_claim_opt (make_machine_env contract_address before context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state before) = Some (r, contract_state_after)) | externalBalanceTransfer (sender recipient : addr) (amount : wei) (prf : sender <> contract_address /\ amount >= 0 /\ ((noOverflowOrUnderflowInTransfer sender recipient amount (balance before)) && (address_accepts_funds_assumption None sender recipient amount) = true)) | timePassing (block_count time_passing : int256) (prf : validTimeChange block_count time_passing (block_number before) (timestamp before) = true) | revert.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memSome {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := {| Int256.intval := 890025619261977197475349953386626580431692757011; Int256.intrange := Int256.Z_mod_modulus_range' 890025619261977197475349953386626580431692757011 |}; Crowdfunding_max_block := {| Int256.intval := 140; Int256.intrange := Int256.Z_mod_modulus_range' 140 |}; Crowdfunding_goal := 50; Crowdfunding_backers := exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) PTree.Leaf (fun (x : positive) (x0 : PTree.Leaf ! x <> None) => Maps.Int256Tree.empty_obligation_1 x x0); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := 0; Crowdfunding_successfullyDonated_msg := 1; Crowdfunding_alreadyDonated_msg := 2; Crowdfunding_funded_msg := 3; Crowdfunding_failed_msg := 4; Crowdfunding_too_early_to_claim_funds_msg := 5; Crowdfunding_too_early_to_reclaim_msg := 6; Crowdfunding_cannot_refund_msg := 7; Crowdfunding_here_is_your_money_msg := 8 |} = Some {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := {| Int256.intval := 890025619261977197475349953386626580431692757011; Int256.intrange := Int256.Z_mod_modulus_range' 890025619261977197475349953386626580431692757011 |}; Crowdfunding_max_block := {| Int256.intval := 140; Int256.intrange := Int256.Z_mod_modulus_range' 140 |}; Crowdfunding_goal := 50; Crowdfunding_backers := exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) PTree.Leaf (fun (x : positive) (x0 : PTree.Leaf ! x <> None) => Maps.Int256Tree.empty_obligation_1 x x0); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := 0; Crowdfunding_successfullyDonated_msg := 1; Crowdfunding_alreadyDonated_msg := 2; Crowdfunding_funded_msg := 3; Crowdfunding_failed_msg := 4; Crowdfunding_too_early_to_claim_funds_msg := 5; Crowdfunding_too_early_to_reclaim_msg := 6; Crowdfunding_cannot_refund_msg := 7; Crowdfunding_here_is_your_money_msg := 8 |}Record Step := mkStep { Step_state : BlockchainState; Step_action : Action Step_state }. Record StepSpace := mkStepSpace { StepSpace_state : BlockchainState; StepSpace_actions : Type }. Class Next (b : BlockchainState) : Type := { next : Action b -> BlockchainState }. Instance : Next initial_state := { next := step initial_state }. Definition InSecond (st : BlockchainState) := exists (a : Action initial_state), st = step initial_state a. Definition InThird (st : BlockchainState) := exists (two : BlockchainState) (a : Action two) , InSecond two /\ st = step two a. Definition InFourth (st : BlockchainState) := exists (three : BlockchainState) (a : Action three) , InThird three /\ st = step three a. Open Scope nat. Inductive InPossible (st : BlockchainState) (n:nat) := | inzero (H : exists (a : Action initial_state), st = step initial_state a) (Hn : n = 0) : InPossible st n | inSn (current : BlockchainState) (Hs : InPossible current (n - 1)) ( H : exists (a : Action current), st = step current a ) : InPossible st n . Close Scope nat. Definition stepOnce prev := (step (Step_state prev) (Step_action prev)). Definition stepOnceAndWrap prev next_action := (mkStep (stepOnce prev) next_action).Inductive ReachableFromBy from : BlockchainState -> Step -> list Step -> Prop := | initial_case (Hno_leftover_outgoings : Outgoing_transfer_recipient_and_amount (contract_state from) = None) (next_action : Action from) : ReachableFromBy from from (mkStep from next_action) [mkStep from next_action] | step_case (prevSt : BlockchainState) (prev : Step) (prevList : list Step) (Hprev : ReachableFromBy from prevSt prev prevList) (next_action : Action (stepOnce prev)) : ReachableFromBy from (stepOnce prev) (stepOnceAndWrap prev next_action) (stepOnceAndWrap prev next_action :: prevList) . (* begin snippet ReachableFromByLinkStateToStep *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (st st' : BlockchainState) (s : Step) (l : list Step), ReachableFromBy st st' s l -> st' = Step_state ssnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (st st' : BlockchainState) (s : Step) (l : list Step), ReachableFromBy st st' s l -> st' = Step_state sdestruct H; reflexivity. Qed. (* end snippet ReachableFromByLinkStateToStep *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, st': BlockchainState
s: Step
l: list Step
H: ReachableFromBy st st' s lst' = Step_state ssnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (st st' : BlockchainState) (s : Step) (l : list Step), ReachableFromBy st st' s l -> exists tl : list Step, s :: tl = lsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (st st' : BlockchainState) (s : Step) (l : list Step), ReachableFromBy st st' s l -> exists tl : list Step, s :: tl = lsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, st': BlockchainState
s: Step
l: list Step
H: ReachableFromBy st st' s lexists tl : list Step, s :: tl = lsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st: BlockchainState
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state st) = None
next_action: Action stexists tl : list Step, {| Step_state := st; Step_action := next_action |} :: tl = [{| Step_state := st; Step_action := next_action |}]snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)exists tl : list Step, stepOnceAndWrap prev next_action :: tl = stepOnceAndWrap prev next_action :: prevListsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st: BlockchainState
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state st) = None
next_action: Action stexists tl : list Step, {| Step_state := st; Step_action := next_action |} :: tl = [{| Step_state := st; Step_action := next_action |}]reflexivity.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st: BlockchainState
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state st) = None
next_action: Action st[{| Step_state := st; Step_action := next_action |}] = [{| Step_state := st; Step_action := next_action |}]snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)exists tl : list Step, stepOnceAndWrap prev next_action :: tl = stepOnceAndWrap prev next_action :: prevListreflexivity. Qed. Ltac reachableFromByLinks := match goal with | H : ReachableFromBy _ _ _ _ |- _ => let StateToStepName := fresh "HReachableFromByLinkStateToStep" in let StepToListName := fresh "HReachableFromByLinkStepToList" in epose proof (ReachableFromByLinkStateToStep _ _ _ _ H) as StateToStepName; epose proof (ReachableFromByLinkStepToList _ _ _ _ H) as StepToListName end.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)stepOnceAndWrap prev next_action :: prevList = stepOnceAndWrap prev next_action :: prevListsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (st st' : BlockchainState) (s : Step) (l : list Step), ReachableFromBy st st' s l -> Outgoing_transfer_recipient_and_amount (contract_state st') = Nonesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (st st' : BlockchainState) (s : Step) (l : list Step), ReachableFromBy st st' s l -> Outgoing_transfer_recipient_and_amount (contract_state st') = Nonesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, st': BlockchainState
s: Step
l: list Step
H: ReachableFromBy st st' s lOutgoing_transfer_recipient_and_amount (contract_state st') = Nonesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st: BlockchainState
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state st) = None
next_action: Action stOutgoing_transfer_recipient_and_amount (contract_state st) = Nonesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Outgoing_transfer_recipient_and_amount (contract_state prevSt) = NoneOutgoing_transfer_recipient_and_amount (contract_state (stepOnce prev)) = Noneassumption.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st: BlockchainState
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state st) = None
next_action: Action stOutgoing_transfer_recipient_and_amount (contract_state st) = Nonesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Outgoing_transfer_recipient_and_amount (contract_state prevSt) = NoneOutgoing_transfer_recipient_and_amount (contract_state (stepOnce prev)) = Nonesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Outgoing_transfer_recipient_and_amount (contract_state prevSt) = NoneOutgoing_transfer_recipient_and_amount (contract_state (step (Step_state prev) (Step_action prev))) = Nonesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Outgoing_transfer_recipient_and_amount (contract_state prevSt) = NoneOutgoing_transfer_recipient_and_amount (contract_state ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) (Step_state prev) (Step_action prev))) = Noneall: reachableFromByLinks; subst; assumption. Qed. Definition since_as_long (P : BlockchainState -> Prop) (Q : BlockchainState -> Prop) (R : Step -> Prop) := forall schedule st st' step', ReachableFromBy st st' step' schedule -> P st -> (forall sa, List.In sa schedule -> R sa) -> Q st'. Notation "Q `since` P `as-long-as` R" := (since_as_long P Q R) (at level 1). Definition donation_recorded (a : addr) (amount : Z) (s : BlockchainState) := Int256Tree.get_default 0 a (Crowdfunding_backers (contract_state s)) = amount /\ amount > 0. Definition no_claims_from (a : addr) (s : Step) := match Step_action s with | (call_Crowdfunding_claim _ a _ _ _ _ _) => False | _ => True end. Ltac destruct_if_H := let caseName := fresh "IfCase" in match goal with | [ _ : context[if ?X then _ else _] |- _ ] => destruct X eqn:caseName end. Ltac destruct_beq256_H := let caseName := fresh "IfCaseBeq" in match goal with | [ _ : context[(?X =? ?Y)%int256] |- _ ] => destruct (X =? Y)%int256 eqn:caseName end. Ltac destruct_geq256_H := let caseName := fresh "IfCaseGeq" in match goal with | [ _ : context[(?X >=? ?Y)%int256] |- _ ] => destruct (X >=? Y)%int256 eqn:caseName end.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Outgoing_transfer_recipient_and_amount (contract_state prevSt) = None
sender, recipient: addr
amount: wei
prf: sender <> contract_address /\ amount >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount prfOutgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Outgoing_transfer_recipient_and_amount (contract_state prevSt) = None
block_count, time_passing: int256
prf: validTimeChange block_count time_passing (block_number (Step_state prev)) (timestamp (Step_state prev)) = true
Case: Step_action prev = timePassing (Step_state prev) block_count time_passing prfOutgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Outgoing_transfer_recipient_and_amount (contract_state prevSt) = None
Case: Step_action prev = revert (Step_state prev)Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = NoneLtac destruct_and := match goal with | [ H : (_ /\ _) |- _ ] => destruct H end. (* The expanded version more closely mirrors the proof as it was first proven, before being written concisely. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z(donation_recorded a amount) `since` donation_recorded a amount `as-long-as` (no_claims_from a)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z(donation_recorded a amount) `since` donation_recorded a amount `as-long-as` (no_claims_from a)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Zforall (schedule : list Step) (st st' : BlockchainState) (step' : Step), ReachableFromBy st st' step' schedule -> donation_recorded a amount st -> (forall sa : Step, In sa schedule -> no_claims_from a sa) -> donation_recorded a amount st'snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
schedule: list Step
st, st': BlockchainState
step': Step
H: ReachableFromBy st st' step' schedule
H0: donation_recorded a amount st
H1: forall sa : Step, In sa schedule -> no_claims_from a sadonation_recorded a amount st'snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H0: donation_recorded a amount st
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
IHReachableFromBy: (forall sa : Step, In sa prevList -> no_claims_from a sa) -> donation_recorded a amount prevStdonation_recorded a amount (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H0: donation_recorded a amount st
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
IHReachableFromBy: (forall sa : Step, In sa prevList -> no_claims_from a sa) -> donation_recorded a amount prevStdonation_recorded a amount prevStsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H0: donation_recorded a amount st
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
IHReachableFromBy: (forall sa : Step, In sa prevList -> no_claims_from a sa) -> donation_recorded a amount prevSt
H2: donation_recorded a amount prevStdonation_recorded a amount (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H0: donation_recorded a amount st
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
IHReachableFromBy: (forall sa : Step, In sa prevList -> no_claims_from a sa) -> donation_recorded a amount prevStforall sa : Step, In sa prevList -> no_claims_from a sasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H0: donation_recorded a amount st
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
IHReachableFromBy: (forall sa : Step, In sa prevList -> no_claims_from a sa) -> donation_recorded a amount prevSt
H2: donation_recorded a amount prevStdonation_recorded a amount (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H0: donation_recorded a amount st
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
IHReachableFromBy: (forall sa : Step, In sa prevList -> no_claims_from a sa) -> donation_recorded a amount prevSt
sa: Step
H2: In sa prevListno_claims_from a sasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H0: donation_recorded a amount st
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
IHReachableFromBy: (forall sa : Step, In sa prevList -> no_claims_from a sa) -> donation_recorded a amount prevSt
H2: donation_recorded a amount prevStdonation_recorded a amount (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H0: donation_recorded a amount st
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
IHReachableFromBy: (forall sa : Step, In sa prevList -> no_claims_from a sa) -> donation_recorded a amount prevSt
sa: Step
H2: In sa prevListIn sa (stepOnceAndWrap prev next_action :: prevList)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H0: donation_recorded a amount st
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
IHReachableFromBy: (forall sa : Step, In sa prevList -> no_claims_from a sa) -> donation_recorded a amount prevSt
H2: donation_recorded a amount prevStdonation_recorded a amount (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H0: donation_recorded a amount st
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
IHReachableFromBy: (forall sa : Step, In sa prevList -> no_claims_from a sa) -> donation_recorded a amount prevSt
H2: donation_recorded a amount prevStdonation_recorded a amount (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
IHReachableFromBy: (forall sa : Step, In sa prevList -> no_claims_from a sa) -> donation_recorded a amount prevSt
H2: donation_recorded a amount prevStdonation_recorded a amount (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H2: donation_recorded a amount prevStdonation_recorded a amount (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H2: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount /\ amount > 0get_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = amount /\ amount > 0snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0get_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = amount /\ amount > 0snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0get_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state prev
HReachableFromByLinkStepToList: exists tl : list Step, prev :: tl = prevListget_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state prev
HReachableFromByLinkStepToList: exists tl : list Step, prev :: tl = prevListno_claims_from a prevsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state prev
HReachableFromByLinkStepToList: exists tl : list Step, prev :: tl = prevList
H3: no_claims_from a prevget_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state prev
HReachableFromByLinkStepToList: exists tl : list Step, prev :: tl = prevListIn prev (stepOnceAndWrap prev next_action :: prevList)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state prev
HReachableFromByLinkStepToList: exists tl : list Step, prev :: tl = prevList
H3: no_claims_from a prevget_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state prev
x: list Step
H3: prev :: x = prevListIn prev (stepOnceAndWrap prev next_action :: prevList)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state prev
HReachableFromByLinkStepToList: exists tl : list Step, prev :: tl = prevList
H3: no_claims_from a prevget_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st: BlockchainState
prev: Step
x: list Step
H: ReachableFromBy st (Step_state prev) prev (prev :: x)
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prev :: x) -> no_claims_from a sa
H2: get_default 0 a (Crowdfunding_backers (contract_state (Step_state prev))) > 0In prev (stepOnceAndWrap prev next_action :: prev :: x)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state prev
HReachableFromByLinkStepToList: exists tl : list Step, prev :: tl = prevList
H3: no_claims_from a prevget_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st: BlockchainState
prev: Step
x: list Step
H: ReachableFromBy st (Step_state prev) prev (prev :: x)
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prev :: x) -> no_claims_from a sa
H2: get_default 0 a (Crowdfunding_backers (contract_state (Step_state prev))) > 0In prev (prev :: x)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state prev
HReachableFromByLinkStepToList: exists tl : list Step, prev :: tl = prevList
H3: no_claims_from a prevget_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st: BlockchainState
prev: Step
x: list Step
H: ReachableFromBy st (Step_state prev) prev (prev :: x)
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prev :: x) -> no_claims_from a sa
H2: get_default 0 a (Crowdfunding_backers (contract_state (Step_state prev))) > 0prev = prevsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state prev
HReachableFromByLinkStepToList: exists tl : list Step, prev :: tl = prevList
H3: no_claims_from a prevget_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state prev
HReachableFromByLinkStepToList: exists tl : list Step, prev :: tl = prevList
H3: no_claims_from a prevget_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
Step_action0: Action Step_state0
prevList: list Step
H: ReachableFromBy st prevSt {| Step_state := Step_state0; Step_action := Step_action0 |} prevList
next_action: Action (stepOnce {| Step_state := Step_state0; Step_action := Step_action0 |})
H1: forall sa : Step, {| Step_state := stepOnce {| Step_state := Step_state0; Step_action := Step_action0 |}; Step_action := next_action |} = sa \/ In sa prevList -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
HReachableFromByLinkStepToList: exists tl : list Step, {| Step_state := Step_state0; Step_action := Step_action0 |} :: tl = prevList
H3: no_claims_from a {| Step_state := Step_state0; Step_action := Step_action0 |}get_default 0 a (Crowdfunding_backers (contract_state (stepOnce {| Step_state := Step_state0; Step_action := Step_action0 |}))) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
Step_action0: Action Step_state0
prevList: list Step
H: ReachableFromBy st prevSt {| Step_state := Step_state0; Step_action := Step_action0 |} prevList
next_action: Action (stepOnce {| Step_state := Step_state0; Step_action := Step_action0 |})
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
HReachableFromByLinkStepToList: exists tl : list Step, {| Step_state := Step_state0; Step_action := Step_action0 |} :: tl = prevList
H3: no_claims_from a {| Step_state := Step_state0; Step_action := Step_action0 |}get_default 0 a (Crowdfunding_backers (contract_state (stepOnce {| Step_state := Step_state0; Step_action := Step_action0 |}))) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
Step_action0: Action Step_state0
prevList: list Step
H: ReachableFromBy st prevSt {| Step_state := Step_state0; Step_action := Step_action0 |} prevList
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
HReachableFromByLinkStepToList: exists tl : list Step, {| Step_state := Step_state0; Step_action := Step_action0 |} :: tl = prevList
H3: no_claims_from a {| Step_state := Step_state0; Step_action := Step_action0 |}get_default 0 a (Crowdfunding_backers (contract_state (stepOnce {| Step_state := Step_state0; Step_action := Step_action0 |}))) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
Step_action0: Action Step_state0
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
HReachableFromByLinkStepToList: exists tl : list Step, {| Step_state := Step_state0; Step_action := Step_action0 |} :: tl = prevList
H3: no_claims_from a {| Step_state := Step_state0; Step_action := Step_action0 |}get_default 0 a (Crowdfunding_backers (contract_state (stepOnce {| Step_state := Step_state0; Step_action := Step_action0 |}))) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
Step_action0: Action Step_state0
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: no_claims_from a {| Step_state := Step_state0; Step_action := Step_action0 |}get_default 0 a (Crowdfunding_backers (contract_state (stepOnce {| Step_state := Step_state0; Step_action := Step_action0 |}))) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
Step_action0: Action Step_state0
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: match Step_action {| Step_state := Step_state0; Step_action := Step_action0 |} with | @call_Crowdfunding_claim _ _ _ _ _ _ _ _ => False | _ => True endget_default 0 a (Crowdfunding_backers (contract_state (stepOnce {| Step_state := Step_state0; Step_action := Step_action0 |}))) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
Step_action0: Action Step_state0
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: match Step_action {| Step_state := Step_state0; Step_action := Step_action0 |} with | @call_Crowdfunding_claim _ _ _ _ _ _ _ _ => False | _ => True endget_default 0 a (Crowdfunding_backers (contract_state (step (Step_state {| Step_state := Step_state0; Step_action := Step_action0 |}) (Step_action {| Step_state := Step_state0; Step_action := Step_action0 |})))) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
Step_action0: Action Step_state0
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: match Step_action {| Step_state := Step_state0; Step_action := Step_action0 |} with | @call_Crowdfunding_claim _ _ _ _ _ _ _ _ => False | _ => True endget_default 0 a (Crowdfunding_backers (contract_state (step Step_state0 Step_action0))) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
Step_action0: Action Step_state0
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: match Step_action {| Step_state := Step_state0; Step_action := Step_action0 |} with | @call_Crowdfunding_claim _ _ _ _ _ _ _ _ => False | _ => True endget_default 0 a (Crowdfunding_backers (contract_state (step Step_state0 Step_action0))) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: Falseget_default 0 a (Crowdfunding_backers contract_state_after) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
sender, recipient: addr
amount0: wei
prf: sender <> contract_address /\ amount0 >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount0 (balance Step_state0) && address_accepts_funds_assumption None sender recipient amount0 = true
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers (contract_state Step_state0)) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
block_count, time_passing: int256
prf: validTimeChange block_count time_passing (block_number Step_state0) (timestamp Step_state0) = true
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers (contract_state Step_state0)) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers (contract_state Step_state0)) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_donate_prf: runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0);; guard v);; gets Crowdfunding_backers;; spec2 <- ret (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- gets Crowdfunding_max_block;; (if Int256.ltu spec3 spec2 then ret tt;; v <- ret false;; guard v else spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; (if spec4 =? 0 then MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s)) s) else ret tt;; v <- ret false;; guard v))) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
H20: false = trueget_default 0 a (Crowdfunding_backers (contract_state Step_state0)) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0) = trueget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0) = false
H22: false = trueget_default 0 a (Crowdfunding_backers (contract_state Step_state0)) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))match goal with H : false = true |- _ => inversion H end.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
H20: false = trueget_default 0 a (Crowdfunding_backers (contract_state Step_state0)) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0) = trueget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0) = true
Case: (a =? caller context)%int256 = trueget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0) = true
Case: (a =? caller context)%int256 = falseget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0) = true
Case: (a =? caller context)%int256 = trueget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0) = true
Case: a = caller contextget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0) = true
Case: a = caller contextget_default 0 a (set a (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0) = true
Case: a = caller contextcallvalue context = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0) = true
Case: a = caller contextFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 (caller context) (Crowdfunding_backers (contract_state Step_state0)) > 0
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 (caller context) (Crowdfunding_backers (contract_state Step_state0)) > 0
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state Step_state0)) =? 0) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 (caller context) (Crowdfunding_backers (contract_state Step_state0)) > 0
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state Step_state0)) = 0Falselia.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: 0 > 0
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state Step_state0)) = 0Falsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0) = true
Case: (a =? caller context)%int256 = falseget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))apply get_default_so; assumption.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0) = true
Case: a <> caller contextget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))match goal with H : false = true |- _ => inversion H end.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0) = false
H22: false = trueget_default 0 a (Crowdfunding_backers (contract_state Step_state0)) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = amountds_inv; subst; simpl; try reflexivity.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- gets Crowdfunding_owner;; (if (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? spec1)%int256 then spec2 <- ret (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- ret (me_balance (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets Crowdfunding_max_block;; (if Int256.ltu spec4 spec2 then spec5 <- gets Crowdfunding_goal;; (if spec5 <=? spec3 then MonadState.modify (update_Crowdfunding_funded true);; ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (...) spec1 spec3 d in if (...)%int256 then put d' else mzero) else ret tt) else ret tt) else ret tt)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = amountcontradiction.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: Falseget_default 0 a (Crowdfunding_backers contract_state_after) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
sender, recipient: addr
amount0: wei
prf: sender <> contract_address /\ amount0 >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount0 (balance Step_state0) && address_accepts_funds_assumption None sender recipient amount0 = true
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers (contract_state Step_state0)) = amountassumption.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
sender, recipient: addr
amount0: wei
prf: sender <> contract_address /\ amount0 >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount0 (balance Step_state0) && address_accepts_funds_assumption None sender recipient amount0 = true
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
block_count, time_passing: int256
prf: validTimeChange block_count time_passing (block_number Step_state0) (timestamp Step_state0) = true
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers (contract_state Step_state0)) = amountassumption.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
block_count, time_passing: int256
prf: validTimeChange block_count time_passing (block_number Step_state0) (timestamp Step_state0) = true
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amountsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers (contract_state Step_state0)) = amountassumption. Qed. Opaque Crowdfunding_donate_opt Crowdfunding_getFunds_opt Crowdfunding_claim_opt. Ltac Hlinks := match goal with | H : ReachableFromBy _ _ _ _ |- _ => let StateToStepName := fresh "HS" in let StepToListName := fresh "HL" in epose proof (ReachableFromByLinkStateToStep _ _ _ _ H) as StateToStepName; epose proof (ReachableFromByLinkStepToList _ _ _ _ H) as StepToListName end. Ltac inv_FT := try match goal with H : false = true |- _ => inversion H end.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
amount: Z
st, prevSt, Step_state0: BlockchainState
prevList: list Step
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amount
H2: amount > 0
HReachableFromByLinkStateToStep: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers (contract_state prevSt)) = amountDefinition donate_fun := Crowdfunding_donate_opt. Open Scope int256.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (a : addr) (d : Z), (donation_recorded a d) `since` donation_recorded a d `as-long-as` (no_claims_from a)(* Proof of a temporal property. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (a : addr) (d : Z), (donation_recorded a d) `since` donation_recorded a d `as-long-as` (no_claims_from a)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (a : addr) (d : Z) (schedule : list Step) (st st' : BlockchainState) (step' : Step), ReachableFromBy st st' step' schedule -> donation_recorded a d st -> (forall sa : Step, In sa schedule -> no_claims_from a sa) -> donation_recorded a d st'snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
schedule: list Step
st, st': BlockchainState
step': Step
H: ReachableFromBy st st' step' schedule
H0: donation_recorded a d st
H1: forall sa : Step, In sa schedule -> no_claims_from a sadonation_recorded a d st'snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H0: donation_recorded a d st
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
IHReachableFromBy: (forall sa : Step, In sa prevList -> no_claims_from a sa) -> donation_recorded a d prevStdonation_recorded a d (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H0: donation_recorded a d st
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
IHReachableFromBy: (forall sa : Step, In sa prevList -> no_claims_from a sa) -> donation_recorded a d prevSt
H2: donation_recorded a d prevStdonation_recorded a d (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H2: donation_recorded a d prevStdonation_recorded a d (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H2: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d /\ d > 0get_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = d /\ d > 0snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0get_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = d /\ d > 0snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0get_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state prev
HL: exists tl : list Step, prev :: tl = prevListget_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state prev
HL: exists tl : list Step, prev :: tl = prevList
H3: no_claims_from a prevget_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
Step_action0: Action Step_state0
prevList: list Step
H: ReachableFromBy st prevSt {| Step_state := Step_state0; Step_action := Step_action0 |} prevList
next_action: Action ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) Step_state0 Step_action0)
H1: forall sa : Step, {| Step_state := (fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) Step_state0 Step_action0; Step_action := next_action |} = sa \/ In sa prevList -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
HL: exists tl : list Step, {| Step_state := Step_state0; Step_action := Step_action0 |} :: tl = prevList
H3: no_claims_from a {| Step_state := Step_state0; Step_action := Step_action0 |}get_default 0 a (Crowdfunding_backers (contract_state ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) Step_state0 Step_action0))) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
Step_action0: Action Step_state0
prevList: list Step
next_action: Action ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) Step_state0 Step_action0)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: no_claims_from a {| Step_state := Step_state0; Step_action := Step_action0 |}get_default 0 a (Crowdfunding_backers (contract_state ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) Step_state0 Step_action0))) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
Step_action0: Action Step_state0
prevList: list Step
next_action: Action ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) Step_state0 Step_action0)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: match Step_action {| Step_state := Step_state0; Step_action := Step_action0 |} with | @call_Crowdfunding_claim _ _ _ _ _ _ _ _ => False | _ => True endget_default 0 a (Crowdfunding_backers (contract_state ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) Step_state0 Step_action0))) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
Step_action0: Action Step_state0
prevList: list Step
next_action: Action ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) Step_state0 Step_action0)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: match Step_action {| Step_state := Step_state0; Step_action := Step_action0 |} with | @call_Crowdfunding_claim _ _ _ _ _ _ _ _ => False | _ => True endget_default 0 a (Crowdfunding_backers (contract_state ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) Step_state0 Step_action0))) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Falseget_default 0 a (Crowdfunding_backers contract_state_after) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_donate_prf: runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0);; guard v);; gets Crowdfunding_backers;; spec2 <- ret (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- gets Crowdfunding_max_block;; (if Int256.ltu spec3 spec2 then ret tt;; v <- ret false;; guard v else spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; (if (spec4 =? 0)%Z then MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s)) s) else ret tt;; v <- ret false;; guard v))) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = trueget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = true
Case: (a =? caller context) = trueget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = true
Case: (a =? caller context) = falseget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = true
Case: (a =? caller context) = trueget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = true
Case: a = caller contextget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = true
Case: a = caller contextget_default 0 a (set a (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = true
Case: a = caller contextcallvalue context = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = true
Case: a = caller contextFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 (caller context) (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 (caller context) (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (caller context =? contract_address) = true
a2: unit
H8: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (block_number Step_state0) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 (caller context) (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (caller context =? contract_address) = true
a2: unit
H8: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (block_number Step_state0) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state Step_state0)) = 0Falselia.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: 0 > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (caller context =? contract_address) = true
a2: unit
H8: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (block_number Step_state0) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state Step_state0)) = 0Falsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = true
Case: (a =? caller context) = falseget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))apply get_default_so; assumption.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = true
Case: a <> caller contextget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = dds_inv; subst; reflexivity.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0)%Z;; guard v);; spec1 <- gets Crowdfunding_owner;; (if me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? spec1 then spec2 <- ret (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- ret (me_balance (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets Crowdfunding_max_block;; (if Int256.ltu spec4 spec2 then spec5 <- gets Crowdfunding_goal;; (if spec5 <=? spec3 then MonadState.modify (update_Crowdfunding_funded true);; ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (...) spec1 spec3 d in if success =? Int256.one then put d' else mzero) else ret tt) else ret tt) else ret tt)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = dcontradiction. Qed. Opaque Crowdfunding_donate_opt Crowdfunding_getFunds_opt Crowdfunding_claim_opt. Close Scope int256. (* Safety property predicate *) Definition Safe P := forall state s l, ReachableFromBy initial_state state s l -> P state. Definition balance_backed state := (Crowdfunding_funded (contract_state state)) = false -> sum (Crowdfunding_backers (contract_state state)) <= (balance state (contract_address)) /\ (forall key value, get key (Crowdfunding_backers (contract_state state)) = Some value -> ((value >= 0) /\ (value < Int256.modulus))).snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Falseget_default 0 a (Crowdfunding_backers contract_state_after) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (sender recipient : int256) (balances : addr -> wei) (a : addr), update_balances sender recipient 0 balances a = balances asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (sender recipient : int256) (balances : addr -> wei) (a : addr), update_balances sender recipient 0 balances a = balances asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> wei
a: addrupdate_balances sender recipient 0 balances a = balances asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> wei
a: addr(if (sender =? recipient)%int256 then balances a else if (a =? sender)%int256 then balances sender - 0 else if (a =? recipient)%int256 then balances recipient + 0 else balances a) = balances asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> wei
a: addrbalances a = balances asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> wei
a: addr(if (a =? sender)%int256 then balances sender - 0 else if (a =? recipient)%int256 then balances recipient + 0 else balances a) = balances areflexivity.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> wei
a: addrbalances a = balances asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> wei
a: addr(if (a =? sender)%int256 then balances sender - 0 else if (a =? recipient)%int256 then balances recipient + 0 else balances a) = balances asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> wei
a: addr
Case: (a =? sender)%int256 = truebalances sender - 0 = balances asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> wei
a: addr
Case: (a =? sender)%int256 = false(if (a =? recipient)%int256 then balances recipient + 0 else balances a) = balances asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> wei
a: addr
Case: (a =? sender)%int256 = truebalances sender - 0 = balances asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> wei
a: addr
Case: (a =? sender)%int256 = truebalances sender = balances asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> wei
a: addr
Case: a = senderbalances sender = balances areflexivity.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> weibalances sender = balances sendersnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> wei
a: addr
Case: (a =? sender)%int256 = false(if (a =? recipient)%int256 then balances recipient + 0 else balances a) = balances asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> wei
a: addr
Case: (a =? sender)%int256 = false
SCase: (a =? recipient)%int256 = truebalances recipient + 0 = balances asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> wei
a: addr
Case: (a =? sender)%int256 = false
SCase: (a =? recipient)%int256 = falsebalances a = balances asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> wei
a: addr
Case: (a =? sender)%int256 = false
SCase: (a =? recipient)%int256 = truebalances recipient + 0 = balances asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> wei
a: addr
Case: (a =? sender)%int256 = false
SCase: (a =? recipient)%int256 = truebalances recipient = balances asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> wei
a: addr
Case: (a =? sender)%int256 = false
SCase: a = recipientbalances recipient = balances areflexivity.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> wei
Case: (recipient =? sender)%int256 = falsebalances recipient = balances recipientreflexivity. Qed.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
sender, recipient: int256
balances: addr -> wei
a: addr
Case: (a =? sender)%int256 = false
SCase: (a =? recipient)%int256 = falsebalances a = balances a(* balance_backed (next_blockchain_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := balance (Step_state prev); blockhash := blockhash (Step_state prev); contract_state := (resetTransfers (contract_state (Step_state prev))) |} context (resetTransfers (contract_state (Step_state prev))) ). *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (prev : Step) (context : CallContext), balance_backed (Step_state prev) -> Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = None -> (callvalue context =? 0) = true -> balance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (prev : Step) (context : CallContext), balance_backed (Step_state prev) -> Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = None -> (callvalue context =? 0) = true -> balance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prev: Step
context: CallContext
H: balance_backed (Step_state prev)
H0: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = None
H1: (callvalue context =? 0) = truebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prev: Step
context: CallContext
H: balance_backed (Step_state prev)
H0: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = None
H1: (callvalue context =? 0) = trueCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prev: Step
context: CallContext
H: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H0: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = None
H1: (callvalue context =? 0) = trueCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prev: Step
context: CallContext
H: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H0: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = None
H1: callvalue context = 0Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prev: Step
context: CallContext
H: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H0: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = None
H1: callvalue context = 0Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= current_balances (Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev))) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prev: Step
context: CallContext
H: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H0: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = None
H1: callvalue context = 0Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= match Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) with | Some (recipient, amount) => update_balances contract_address recipient amount (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) | None => update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) end contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prev: Step
context: CallContext
H: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H0: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = None
H1: callvalue context = 0Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= match Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) with | Some (recipient, amount) => update_balances contract_address recipient amount (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) | None => update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) end contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prev: Step
context: CallContext
H: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H0: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = None
H1: callvalue context = 0Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= match Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) with | Some (recipient, amount) => update_balances contract_address recipient amount (update_balances (caller context) contract_address 0 (balance (Step_state prev))) | None => update_balances (caller context) contract_address 0 (balance (Step_state prev)) end contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)(* subst. *) (* unfold resetTransfers. simpl. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prev: Step
context: CallContext
H: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H0: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = None
H1: callvalue context = 0Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address 0 (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prev: Step
context: CallContext
H: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H0: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = None
H1: callvalue context = 0Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prev: Step
context: CallContext
H: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H0: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = None
H1: callvalue context = 0
H2: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)split; apply H in H2; destruct H2; assumption. Qed. (* One of three properties describing a correct crowdfunding contract *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prev: Step
context: CallContext
H: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H0: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = None
H1: callvalue context = 0
H2: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memSafe balance_backedsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memSafe balance_backedsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed statesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
H: ReachableFromBy initial_state state s lbalance_backed statesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_statebalance_backed initial_statesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state prevSt prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed prevStbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_statebalance_backed initial_statesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_stateCrowdfunding_funded (contract_state {| timestamp := snapshot_timestamp; block_number := snapshot_number; balance := snapshot_balances; blockhash := snapshot_blockhash; contract_state := init_global_abstract_data |}) = false -> sum (Crowdfunding_backers (contract_state {| timestamp := snapshot_timestamp; block_number := snapshot_number; balance := snapshot_balances; blockhash := snapshot_blockhash; contract_state := init_global_abstract_data |})) <= balance {| timestamp := snapshot_timestamp; block_number := snapshot_number; balance := snapshot_balances; blockhash := snapshot_blockhash; contract_state := init_global_abstract_data |} contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state {| timestamp := snapshot_timestamp; block_number := snapshot_number; balance := snapshot_balances; blockhash := snapshot_blockhash; contract_state := init_global_abstract_data |})) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_statefalse = false -> sum (empty Z32) <= snapshot_balances contract_address /\ (forall (key : elt) (value : Z32), get key (empty Z32) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = falsesum (empty Z32) <= snapshot_balances contract_address /\ (forall (key : elt) (value : Z32), get key (empty Z32) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = falsefold1 Z.add (empty Z32) 0 <= snapshot_balances contract_address /\ (forall (key : elt) (value : Z32), get key (empty Z32) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = falsefold1 Z.add (exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) (PTree.empty Z32) (fun (x : positive) (H : (PTree.empty Z32) ! x <> None) => Maps.Int256Tree.empty_obligation_1 x H)) 0 <= snapshot_balances contract_address /\ (forall (key : elt) (value : Z32), get key (exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) (PTree.empty Z32) (fun (x : positive) (H : (PTree.empty Z32) ! x <> None) => Maps.Int256Tree.empty_obligation_1 x H)) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = falsePTree.fold1 Z.add (proj1_sig (exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) (PTree.empty Z32) (fun (x : positive) (H : (PTree.empty Z32) ! x <> None) => Maps.Int256Tree.empty_obligation_1 x H))) 0 <= snapshot_balances contract_address /\ (forall (key : elt) (value : Z32), get key (exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) (PTree.empty Z32) (fun (x : positive) (H : (PTree.empty Z32) ! x <> None) => Maps.Int256Tree.empty_obligation_1 x H)) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = false0 <= snapshot_balances contract_address /\ (forall (key : elt) (value : Z32), get key (exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) (PTree.empty Z32) (fun (x : positive) (H : (PTree.empty Z32) ! x <> None) => Maps.Int256Tree.empty_obligation_1 x H)) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = false0 <= snapshot_balances contract_addresssnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = falseforall (key : elt) (value : Z32), get key (exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) (PTree.empty Z32) (fun (x : positive) (H : (PTree.empty Z32) ! x <> None) => Maps.Int256Tree.empty_obligation_1 x H)) = Some value -> value >= 0 /\ value < Int256.modulusapply snapshot_balances_valid_prf.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = false0 <= snapshot_balances contract_addresssnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = falseforall (key : elt) (value : Z32), get key (exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) (PTree.empty Z32) (fun (x : positive) (H : (PTree.empty Z32) ! x <> None) => Maps.Int256Tree.empty_obligation_1 x H)) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = falseforall (key : elt) (value : Z32), (proj1_sig (exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) (PTree.empty Z32) (fun (x : positive) (H : (PTree.empty Z32) ! x <> None) => Maps.Int256Tree.empty_obligation_1 x H))) ! (Int256Indexed.index key) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = falseforall (key : elt) (value : Z32), (PTree.empty Z32) ! (Int256Indexed.index key) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = falseforall (key : elt) (value : Z32), PTree.Leaf ! (let (intval, _) := key in match intval with | 0%Z => 1 | Z.pos p => p~0 | Z.neg p => p~1 end) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = false
key: elt
value: Z32
H0: PTree.Leaf ! (let (intval, _) := key in match intval with | 0%Z => 1 | Z.pos p => p~0 | Z.neg p => p~1 end) = Some valuevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = false
intval: Z
intrange: -1 < intval < Int256.modulus
value: Z32
H0: PTree.Leaf ! match intval with | 0%Z => 1 | Z.pos p => p~0 | Z.neg p => p~1 end = Some valuevalue >= 0 /\ value < Int256.modulusdestruct intval; intros; discriminate.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = false
intval: Z
intrange: -1 < intval < Int256.modulus
value: Z32
H0: PTree.Leaf ! match intval with | 0%Z => 1 | Z.pos p => p~0 | Z.neg p => p~1 end = Some valuevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state prevSt prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed prevStbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state prevSt prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed prevSt
HReachableFromByLinkStateToStep: prevSt = Step_state prev
HReachableFromByLinkStepToList: exists tl : list Step, prev :: tl = prevListbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
HReachableFromByLinkStateToStep: prevSt = Step_state prev
HReachableFromByLinkStepToList: exists tl : list Step, prev :: tl = prevListbalance_backed (stepOnce prev)(* unfold stepOnce in next_action. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)balance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_donate_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_getFunds (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_getFunds_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_claim (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_claim_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
prf: sender <> contract_address /\ amount >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
block_count, time_passing: int256
prf: validTimeChange block_count time_passing (block_number (Step_state prev)) (timestamp (Step_state prev)) = true
Case: Step_action prev = timePassing (Step_state prev) block_count time_passing prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
Case: Step_action prev = revert (Step_state prev)balance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_donate_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_donate_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_donate_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_donate_prfbalance_backed (stepOnce prev)(* destruct next_action. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_donate_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_donate_prf: runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0);; guard v);; gets Crowdfunding_backers;; spec2 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- gets Crowdfunding_max_block;; (if Int256.ltu spec3 spec2 then ret tt;; v <- ret false;; guard v else spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; (if spec4 =? 0 then MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s)) s) else ret tt;; v <- ret false;; guard v))) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_donate_prfbalance_backed (stepOnce prev)(* A way around the error: case_donate_prf is used in hypothesis Case. If using eqn:Case in the destruct *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_donate_prf: runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0);; guard v);; gets Crowdfunding_backers;; spec2 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- gets Crowdfunding_max_block;; (if Int256.ltu spec3 spec2 then ret tt;; v <- ret false;; guard v else spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; (if spec4 =? 0 then MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s)) s) else ret tt;; v <- ret false;; guard v))) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_donate_prf
case_donate_prf': runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0);; guard v);; gets Crowdfunding_backers;; spec2 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- gets Crowdfunding_max_block;; (if Int256.ltu spec3 spec2 then ret tt;; v <- ret false;; guard v else spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; (if spec4 =? 0 then MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s)) s) else ret tt;; v <- ret false;; guard v))) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0);; guard v);; gets Crowdfunding_backers;; spec2 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- gets Crowdfunding_max_block;; (if Int256.ltu spec3 spec2 then ret tt;; v <- ret false;; guard v else spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; (if spec4 =? 0 then MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s)) s) else ret tt;; v <- ret false;; guard v))) (contract_state (Step_state prev)) = Some (tt, update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0);; guard v);; gets Crowdfunding_backers;; spec2 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- gets Crowdfunding_max_block;; (if Int256.ltu spec3 spec2 then ret tt;; v <- ret false;; guard v else spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; (if spec4 =? 0 then MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s)) s) else ret tt;; v <- ret false;; guard v))) (contract_state (Step_state prev)) = Some (tt, update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0);; guard v);; gets Crowdfunding_backers;; spec2 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- gets Crowdfunding_max_block;; (if Int256.ltu spec3 spec2 then ret tt;; v <- ret false;; guard v else spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; (if spec4 =? 0 then MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s)) s) else ret tt;; v <- ret false;; guard v))) (contract_state (Step_state prev)) = Some (tt, update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed (step (Step_state prev) (Step_action prev))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0);; guard v);; gets Crowdfunding_backers;; spec2 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- gets Crowdfunding_max_block;; (if Int256.ltu spec3 spec2 then ret tt;; v <- ret false;; guard v else spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; (if spec4 =? 0 then MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s)) s) else ret tt;; v <- ret false;; guard v))) (contract_state (Step_state prev)) = Some (tt, update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) (Step_state prev) (Step_action prev))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0);; guard v);; gets Crowdfunding_backers;; spec2 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- gets Crowdfunding_max_block;; (if Int256.ltu spec3 spec2 then ret tt;; v <- ret false;; guard v else spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; (if spec4 =? 0 then MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s)) s) else ret tt;; v <- ret false;; guard v))) (contract_state (Step_state prev)) = Some (tt, update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed (next_blockchain_state (Step_state prev) context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed (next_blockchain_state (Step_state prev) context (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := current_balances (Outgoing_transfer_recipient_and_amount (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := match Outgoing_transfer_recipient_and_amount (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) with | Some (recipient, amount) => update_balances contract_address recipient amount (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) | None => update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) end; blockhash := blockhash (Step_state prev); contract_state := resetTransfers (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := match Outgoing_transfer_recipient_and_amount (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) with | Some (recipient, amount) => fun a : addr => if (contract_address =? recipient)%int256 then if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a else if (a =? contract_address)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) - amount else if (a =? recipient)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) recipient else if (recipient =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (recipient =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) recipient) + amount else if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a | None => fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a end; blockhash := blockhash (Step_state prev); contract_state := resetTransfers (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := match Outgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)); Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} with | Some (recipient, amount) => fun a : addr => if (contract_address =? recipient)%int256 then if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a else if (a =? contract_address)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) - amount else if (a =? recipient)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) recipient else if (recipient =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (recipient =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) recipient) + amount else if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a | None => fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a end; blockhash := blockhash (Step_state prev); contract_state := resetTransfers {| Outgoing_transfer_recipient_and_amount := Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)); Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := match Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) with | Some (recipient, amount) => fun a : addr => if (contract_address =? recipient)%int256 then if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a else if (a =? contract_address)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) - amount else if (a =? recipient)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) recipient else if (recipient =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (recipient =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) recipient) + amount else if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a | None => fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a end; blockhash := blockhash (Step_state prev); contract_state := resetTransfers {| Outgoing_transfer_recipient_and_amount := Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)); Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a; blockhash := blockhash (Step_state prev); contract_state := resetTransfers {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a; blockhash := blockhash (Step_state prev); contract_state := {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_max_block := Crowdfunding_max_block {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_goal := Crowdfunding_goal {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_backers := Crowdfunding_backers {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_funded := Crowdfunding_funded {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_funded_msg := Crowdfunding_funded_msg {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_failed_msg := Crowdfunding_failed_msg {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} |} |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a; blockhash := blockhash (Step_state prev); contract_state := {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = trueCrowdfunding_funded (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a; blockhash := blockhash (Step_state prev); contract_state := {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} |}) = false -> sum (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a; blockhash := blockhash (Step_state prev); contract_state := {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} |})) <= balance {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a; blockhash := blockhash (Step_state prev); contract_state := {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} |} contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a; blockhash := blockhash (Step_state prev); contract_state := {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} |})) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = trueCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus(* Search "=?" true. Search int256 false. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus(* Search ( _ =? _)%int256. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else balance (Step_state prev) contract_address + callvalue context)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) (caller context) - callvalue context else balance (Step_state prev) contract_address + callvalue context)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus(* apply Int256eq_false in H2. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= balance (Step_state prev) contract_address + callvalue contextsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus(* Search Int256.unsigned. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) + callvalue context <= balance (Step_state prev) contract_address + callvalue contextsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: (0 <=? callvalue context) && (callvalue context <? Int256.modulus) && (balance (Step_state prev) (caller context) - callvalue context >=? 0) && (balance (Step_state prev) contract_address + callvalue context <? Int256.modulus) = true
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) + callvalue context <= balance (Step_state prev) contract_address + callvalue contextsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: (0 <=? callvalue context) && (callvalue context <? Int256.modulus) && (balance (Step_state prev) (caller context) - callvalue context >=? 0) && (balance (Step_state prev) contract_address + callvalue context <? Int256.modulus) = true
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulussum (Crowdfunding_backers (contract_state (Step_state prev))) + callvalue context <= balance (Step_state prev) contract_address + callvalue contextsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: (0 <=? callvalue context) && (callvalue context <? Int256.modulus) && (balance (Step_state prev) (caller context) - callvalue context >=? 0) && (balance (Step_state prev) contract_address + callvalue context <? Int256.modulus) = true
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulussum (Crowdfunding_backers (contract_state (Step_state prev))) + callvalue context <= balance (Step_state prev) contract_address + callvalue contextsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulusforall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some valuevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = truevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = falsevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: key = caller contextvalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = falsevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get (caller context) (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: key = caller contextvalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = falsevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: Some (callvalue context) = Some value
SSCase: key = caller contextvalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = falsevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: Some (callvalue context) = Some value
SSCase: key = caller context
H5: callvalue context = valuecallvalue context >= 0 /\ callvalue context < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = falsevalue >= 0 /\ value < Int256.moduluscontext: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.moduluscallvalue context >= 0 /\ callvalue context < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = falsevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = falsevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: key <> caller contextvalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value
SSCase: key <> caller contextvalue >= 0 /\ value < Int256.modulusassumption.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: value >= 0 /\ value < Int256.modulus
SSCase: key <> caller contextvalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_getFunds (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_getFunds_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_getFunds (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_getFunds_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_getFunds (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_getFunds_prf
case_getFunds_prf': runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_getFunds (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_getFunds_prf
case_getFunds_prf': runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- gets Crowdfunding_owner;; (if (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? spec1)%int256 then spec2 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets Crowdfunding_max_block;; (if Int256.ltu spec4 spec2 then spec5 <- gets Crowdfunding_goal;; (if spec5 <=? spec3 then MonadState.modify (update_Crowdfunding_funded true);; ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (...) spec1 spec3 d in if (...)%int256 then put d' else mzero) else ret tt) else ret tt) else ret tt)) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_getFunds (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_getFunds_prf
case_getFunds_prf': runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- gets Crowdfunding_owner;; (if (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? spec1)%int256 then spec2 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets Crowdfunding_max_block;; (if Int256.ltu spec4 spec2 then spec5 <- gets Crowdfunding_goal;; (if spec5 <=? spec3 then MonadState.modify (update_Crowdfunding_funded true);; ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (...) spec1 spec3 d in if (...)%int256 then put d' else mzero) else ret tt) else ret tt) else ret tt)) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (step (Step_state prev) (Step_action prev))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_getFunds (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_getFunds_prf
case_getFunds_prf': runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- gets Crowdfunding_owner;; (if (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? spec1)%int256 then spec2 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets Crowdfunding_max_block;; (if Int256.ltu spec4 spec2 then spec5 <- gets Crowdfunding_goal;; (if spec5 <=? spec3 then MonadState.modify (update_Crowdfunding_funded true);; ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (...) spec1 spec3 d in if (...)%int256 then put d' else mzero) else ret tt) else ret tt) else ret tt)) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) (Step_state prev) (Step_action prev))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_getFunds (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_getFunds_prf
case_getFunds_prf': runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- gets Crowdfunding_owner;; (if (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? spec1)%int256 then spec2 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets Crowdfunding_max_block;; (if Int256.ltu spec4 spec2 then spec5 <- gets Crowdfunding_goal;; (if spec5 <=? spec3 then MonadState.modify (update_Crowdfunding_funded true);; ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (...) spec1 spec3 d in if (...)%int256 then put d' else mzero) else ret tt) else ret tt) else ret tt)) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_getFunds (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_getFunds_prf
case_getFunds_prf': runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- gets Crowdfunding_owner;; (if (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? spec1)%int256 then spec2 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets Crowdfunding_max_block;; (if Int256.ltu spec4 spec2 then spec5 <- gets Crowdfunding_goal;; (if spec5 <=? spec3 then MonadState.modify (update_Crowdfunding_funded true);; ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (...) spec1 spec3 d in if (...)%int256 then put d' else mzero) else ret tt) else ret tt) else ret tt)) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
case_getFunds_prf': runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- gets Crowdfunding_owner;; (if (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? spec1)%int256 then spec2 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets Crowdfunding_max_block;; (if Int256.ltu spec4 spec2 then spec5 <- gets Crowdfunding_goal;; (if spec5 <=? spec3 then MonadState.modify (update_Crowdfunding_funded true);; ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (...) spec1 spec3 d in if (...)%int256 then put d' else mzero) else ret tt) else ret tt) else ret tt)) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
case_getFunds_prf': runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- gets Crowdfunding_owner;; (if (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? spec1)%int256 then spec2 <- ret (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- ret (me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets Crowdfunding_max_block;; (if Int256.ltu spec4 spec2 then spec5 <- gets Crowdfunding_goal;; (if spec5 <=? spec3 then MonadState.modify (update_Crowdfunding_funded true);; ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (...) spec1 spec3 d in if (...)%int256 then put d' else mzero) else ret tt) else ret tt) else ret tt)) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = true
case_getFunds_prf'2: runStateT (let (success, d') := me_transfer (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (Crowdfunding_owner (contract_state (Step_state prev))) (me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) (update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then put d' else mzero) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = ret (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = true
case_getFunds_prf'2: runStateT (let (success, d') := (let (_, _, _, me_callvalue, _, _, _, _, me_balance, _, me_transfer, _, _, _) := make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf in me_transfer) (Crowdfunding_owner (contract_state (Step_state prev))) (me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) (update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then put d' else mzero) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = ret (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = true
case_getFunds_prf'2: runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address (Crowdfunding_owner (contract_state (Step_state prev))) (me_balance {| me_address := contract_address; me_origin := origin context; me_caller := caller context; me_callvalue := callvalue context; me_coinbase := coinbase context; me_timestamp := timestamp (Step_state prev); me_number := block_number (Step_state prev); me_chainid := chainid context; me_balance := ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)); me_blockhash := blockhash (Step_state prev); me_transfer := fun (recipient : int256) (amount : Z) (d : global_abstract_data_type) => if noOverflowOrUnderflowInTransfer contract_address recipient amount (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (recipient, amount)) d) else (Int256.zero, d); me_callmethod := fun (_ : HighValues.val) (_ : int) (_ : HighValues.val) (_ : list HighValues.val) (_ : global_abstract_data_type) (_ : ExtEnv.ext_env) (_ : global_abstract_data_type) (_ : ExtEnv.ext_env) (_ : int256) (_ : list HighValues.val) => False; me_log := fun (_ _ : list HighValues.val) (d : global_abstract_data_type) => d; me_valid := ContractModel.ContractModel.make_machine_env_obligation_1 contract_address (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf |} (me_address {| me_address := contract_address; me_origin := origin context; me_caller := caller context; me_callvalue := callvalue context; me_coinbase := coinbase context; me_timestamp := timestamp (Step_state prev); me_number := block_number (Step_state prev); me_chainid := chainid context; me_balance := ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)); me_blockhash := blockhash (Step_state prev); me_transfer := fun (recipient : int256) (amount : Z) (d : global_abstract_data_type) => if noOverflowOrUnderflowInTransfer contract_address recipient amount (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (recipient, amount)) d) else (Int256.zero, d); me_callmethod := fun (_ : HighValues.val) (_ : int) (_ : HighValues.val) (_ : list HighValues.val) (_ : global_abstract_data_type) (_ : ExtEnv.ext_env) (_ : global_abstract_data_type) (_ : ExtEnv.ext_env) (_ : int256) (_ : list HighValues.val) => False; me_log := fun (_ _ : list HighValues.val) (d : global_abstract_data_type) => d; me_valid := ContractModel.ContractModel.make_machine_env_obligation_1 contract_address (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf |})) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), me_balance {| me_address := contract_address; me_origin := origin context; me_caller := caller context; me_callvalue := callvalue context; me_coinbase := coinbase context; me_timestamp := timestamp (Step_state prev); me_number := block_number (Step_state prev); me_chainid := chainid context; me_balance := ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)); me_blockhash := blockhash (Step_state prev); me_transfer := fun (recipient : int256) (amount : Z) (d : global_abstract_data_type) => if noOverflowOrUnderflowInTransfer contract_address recipient amount (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (recipient, amount)) d) else (Int256.zero, d); me_callmethod := fun (_ : HighValues.val) (_ : int) (_ : HighValues.val) (_ : list HighValues.val) (_ : global_abstract_data_type) (_ : ExtEnv.ext_env) (_ : global_abstract_data_type) (_ : ExtEnv.ext_env) (_ : int256) (_ : list HighValues.val) => False; me_log := fun (_ _ : list HighValues.val) (d : global_abstract_data_type) => d; me_valid := ContractModel.ContractModel.make_machine_env_obligation_1 contract_address (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf |} (me_address {| me_address := contract_address; me_origin := origin context; me_caller := caller context; me_callvalue := callvalue context; me_coinbase := coinbase context; me_timestamp := timestamp (Step_state prev); me_number := block_number (Step_state prev); me_chainid := chainid context; me_balance := ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)); me_blockhash := blockhash (Step_state prev); me_transfer := fun (recipient : int256) (amount : Z) (d : global_abstract_data_type) => if noOverflowOrUnderflowInTransfer contract_address recipient amount (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance ...)) && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (recipient, amount)) d) else (Int256.zero, d); me_callmethod := fun (_ : HighValues.val) (_ : int) (_ : HighValues.val) (_ : list HighValues.val) (_ : global_abstract_data_type) (_ : ExtEnv.ext_env) (_ : global_abstract_data_type) (_ : ExtEnv.ext_env) (_ : int256) (_ : list HighValues.val) => False; me_log := fun (_ _ : list HighValues.val) (d : global_abstract_data_type) => d; me_valid := ContractModel.ContractModel.make_machine_env_obligation_1 contract_address (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf |}))) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then put d' else mzero) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = ret (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address (Crowdfunding_owner (contract_state (Step_state prev))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: runStateT (let (success, d') := if true && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: runStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: runStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = contract_state_afterbalance_backed (next_blockchain_state (Step_state prev) context (update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: runStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = contract_state_afterbalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: runStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = contract_state_aftertrue = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: runStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: runStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: runStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Some (r, contract_state_after)Crowdfunding_funded contract_state_after = false -> sum (Crowdfunding_backers contract_state_after) <= new_balance_after_contract_call (Step_state prev) context contract_state_after contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers contract_state_after) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falseCrowdfunding_funded (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |}) = false -> sum (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |})) <= balance {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |} contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |})) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falseCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = false
H0: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) <= current_balances (Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev))) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= current_balances (Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev))) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= current_balances None (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))(* intros. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: callvalue context = 0
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))(* rewrite H0. *) (* subst. *) (* unfold resetTransfers. simpl. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: callvalue context = 0
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address 0 (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: callvalue context = 0
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))(* ---- *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falseCrowdfunding_funded (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |}) = false -> sum (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |})) <= balance {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |} contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |})) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falseCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
H0: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) <= current_balances (Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev))) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= current_balances (Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev))) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= current_balances None (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))(* intros. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: callvalue context = 0
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))(* rewrite H0. *) (* subst. *) (* unfold resetTransfers. simpl. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: callvalue context = 0
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address 0 (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: callvalue context = 0
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))(* ---- *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falseCrowdfunding_funded (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |}) = false -> sum (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |})) <= balance {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |} contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |})) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falseCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) <= current_balances (Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev))) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= current_balances (Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev))) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= current_balances None (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)(* intros. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: callvalue context = 0
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)(* rewrite H0. *) (* subst. *) (* unfold resetTransfers. simpl. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: callvalue context = 0
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address 0 (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)assumption.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: callvalue context = 0
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_claim (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_claim_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_claim (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_claim_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_claim (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_claim_prf
case_claim_prf': runStateT (Crowdfunding_claim_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_claim (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_claim_prf
case_claim_prf': runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec2 <- gets Crowdfunding_max_block;; (if negb (Int256.ltu spec2 spec1) then ret tt else spec3 <- ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; spec5 <- gets Crowdfunding_funded;; spec6 <- gets Crowdfunding_goal;; (if (spec4 =? 0) || (spec5 || (spec6 <=? spec3)) then ret tt else MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (...)) 0 (Crowdfunding_backers s)) s);; ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (make_machine_env contract_address (...) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_caller (...)) spec4 d in if (success =? Int256.one)%int256 then put d' else mzero)))) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_claim (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_claim_prf
case_claim_prf': runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec2 <- gets Crowdfunding_max_block;; (if negb (Int256.ltu spec2 spec1) then ret tt else spec3 <- ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; spec5 <- gets Crowdfunding_funded;; spec6 <- gets Crowdfunding_goal;; (if (spec4 =? 0) || (spec5 || (spec6 <=? spec3)) then ret tt else MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (...)) 0 (Crowdfunding_backers s)) s);; ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (make_machine_env contract_address (...) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_caller (...)) spec4 d in if (success =? Int256.one)%int256 then put d' else mzero)))) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (step (Step_state prev) (Step_action prev))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_claim (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_claim_prf
case_claim_prf': runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec2 <- gets Crowdfunding_max_block;; (if negb (Int256.ltu spec2 spec1) then ret tt else spec3 <- ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; spec5 <- gets Crowdfunding_funded;; spec6 <- gets Crowdfunding_goal;; (if (spec4 =? 0) || (spec5 || (spec6 <=? spec3)) then ret tt else MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (...)) 0 (Crowdfunding_backers s)) s);; ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (make_machine_env contract_address (...) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_caller (...)) spec4 d in if (success =? Int256.one)%int256 then put d' else mzero)))) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) (Step_state prev) (Step_action prev))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_claim (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_claim_prf
case_claim_prf': runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec2 <- gets Crowdfunding_max_block;; (if negb (Int256.ltu spec2 spec1) then ret tt else spec3 <- ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; spec5 <- gets Crowdfunding_funded;; spec6 <- gets Crowdfunding_goal;; (if (spec4 =? 0) || (spec5 || (spec6 <=? spec3)) then ret tt else MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (...)) 0 (Crowdfunding_backers s)) s);; ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (make_machine_env contract_address (...) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_caller (...)) spec4 d in if (success =? Int256.one)%int256 then put d' else mzero)))) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_claim (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_claim_prf
case_claim_prf': runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec2 <- gets Crowdfunding_max_block;; (if negb (Int256.ltu spec2 spec1) then ret tt else spec3 <- ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; spec5 <- gets Crowdfunding_funded;; spec6 <- gets Crowdfunding_goal;; (if (spec4 =? 0) || (spec5 || (spec6 <=? spec3)) then ret tt else MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (...)) 0 (Crowdfunding_backers s)) s);; ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (make_machine_env contract_address (...) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_caller (...)) spec4 d in if (success =? Int256.one)%int256 then put d' else mzero)))) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
case_claim_prf': runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec2 <- gets Crowdfunding_max_block;; (if negb (Int256.ltu spec2 spec1) then ret tt else spec3 <- ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; spec5 <- gets Crowdfunding_funded;; spec6 <- gets Crowdfunding_goal;; (if (spec4 =? 0) || (spec5 || (spec6 <=? spec3)) then ret tt else MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (...)) 0 (Crowdfunding_backers s)) s);; ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (make_machine_env contract_address (...) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_caller (...)) spec4 d in if (success =? Int256.one)%int256 then put d' else mzero)))) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
case_claim_prf': runStateT ((v <- ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- ret (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec2 <- gets Crowdfunding_max_block;; (if negb (Int256.ltu spec2 spec1) then ret tt else spec3 <- ret (me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; spec5 <- gets Crowdfunding_funded;; spec6 <- gets Crowdfunding_goal;; (if (spec4 =? 0) || (spec5 || (spec6 <=? spec3)) then ret tt else MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (...)) 0 (Crowdfunding_backers s)) s);; ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (make_machine_env contract_address (...) context (...) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_caller (...)) spec4 d in if (success =? Int256.one)%int256 then put d' else mzero)))) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = truebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)))) = truebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)))) = false
case_claim_prf'1: runStateT (let (success, d') := me_transfer (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then put d' else mzero) (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = ret (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)))) = false
case_claim_prf'1: runStateT (let (success, d') := me_transfer (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then put d' else mzero) (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = ret (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
case_claim_prf'1: runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: runStateT (let (success, d') := if true && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = false
case_claim_prf'1: runStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: runStateT (let (success, d') := if true && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_afterbalance_backed (next_blockchain_state (Step_state prev) context (update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_afterCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= new_balance_after_contract_call (Step_state prev) context (update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) contract_address /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= new_balance_after_contract_call (Step_state prev) context (update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) contract_address /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= new_balance_after_contract_call (Step_state prev) context (update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) contract_address /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= current_balances (Outgoing_transfer_recipient_and_amount (update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))))) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= current_balances (Outgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))); Crowdfunding_owner := Crowdfunding_owner (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_max_block := Crowdfunding_max_block (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_goal := Crowdfunding_goal (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_backers := Crowdfunding_backers (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_funded_msg := Crowdfunding_funded_msg (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_failed_msg := Crowdfunding_failed_msg (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) |}) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= update_balances contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (contract_address =? caller context)%int256 then if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address else if (contract_address =? contract_address)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) else if (contract_address =? caller context)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) (caller context) else if (caller context =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) (caller context)) + get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) else if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)(* Open Scope int256. Search "=?" false. *) (* Search negb false true. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (contract_address =? caller context)%int256 then if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address else if (contract_address =? contract_address)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) else if (contract_address =? caller context)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) (caller context) else if (caller context =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) (caller context)) + get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) else if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)(* apply Int256eq_false in H2. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (contract_address =? caller context)%int256 then if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address else if (contract_address =? contract_address)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) else if (contract_address =? caller context)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) (caller context) else if (caller context =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) (caller context)) + get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) else if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (contract_address =? caller context)%int256 then if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address else if (contract_address =? contract_address)%int256 then (if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) else if (contract_address =? caller context)%int256 then (if (caller context =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else balance (Step_state prev) (caller context)) + get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (contract_address =? caller context)%int256 then if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else balance (Step_state prev) contract_address + callvalue context else (if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else balance (Step_state prev) contract_address + callvalue context) - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (contract_address =? caller context)%int256 then if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else balance (Step_state prev) contract_address + callvalue context else (if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else balance (Step_state prev) contract_address + callvalue context) - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= balance (Step_state prev) contract_address + callvalue context - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= balance (Step_state prev) contract_address + callvalue context - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= balance (Step_state prev) contract_address + callvalue context - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: callvalue context = 0
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= balance (Step_state prev) contract_address + callvalue context - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: callvalue context = 0
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= balance (Step_state prev) contract_address + 0 - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: callvalue context = 0
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= balance (Step_state prev) contract_address - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: callvalue context = 0
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulussum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= balance (Step_state prev) contract_address - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))assumption.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: callvalue context = 0
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulussum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_addresssnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulusforall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some valuevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = truevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = falsevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = truevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: key = caller contextvalue >= 0 /\ value < Int256.modulus(* rewrite Int256Tree.gss in H5. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: get (caller context) (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: key = caller contextvalue >= 0 /\ value < Int256.moduluslia.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: Some 0 = Some value
SSCase: key = caller context
H8: 0 = value0 >= 0 /\ 0 < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = falsevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: key <> caller contextvalue >= 0 /\ value < Int256.modulus(* apply H4 in H5. *) match goal with H1 : (forall k v, get k _ = Some v -> v >= 0 /\ v < Int256.modulus), H2 : (get key _ = _) |- _ => apply H1 in H2; assumption end.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value
SSCase: key <> caller contextvalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = false
case_claim_prf'1: runStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)discriminate.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = false
case_claim_prf'1: None = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
prf: sender <> contract_address /\ amount >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
prf: sender <> contract_address /\ amount >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount prfbalance_backed ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) (Step_state prev) (Step_action prev))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
prf: sender <> contract_address /\ amount >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount prfbalance_backed (update_balance (Step_state prev) (update_balances sender recipient amount (balance (Step_state prev))))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
prf: sender <> contract_address /\ amount >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount prfCrowdfunding_funded (contract_state (update_balance (Step_state prev) (update_balances sender recipient amount (balance (Step_state prev))))) = false -> sum (Crowdfunding_backers (contract_state (update_balance (Step_state prev) (update_balances sender recipient amount (balance (Step_state prev)))))) <= balance (update_balance (Step_state prev) (update_balances sender recipient amount (balance (Step_state prev)))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (update_balance (Step_state prev) (update_balances sender recipient amount (balance (Step_state prev)))))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
prf: sender <> contract_address /\ amount >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount prfCrowdfunding_funded (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := update_balances sender recipient amount (balance (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := contract_state (Step_state prev) |}) = false -> sum (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := update_balances sender recipient amount (balance (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := contract_state (Step_state prev) |})) <= balance {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := update_balances sender recipient amount (balance (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := contract_state (Step_state prev) |} contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := update_balances sender recipient amount (balance (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := contract_state (Step_state prev) |})) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
prf: sender <> contract_address /\ amount >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount prfCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances sender recipient amount (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
a: amount >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n a)Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances sender recipient amount (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances sender recipient amount (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances sender recipient amount (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances sender recipient amount (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) <= (if (sender =? recipient)%int256 then balance (Step_state prev) contract_address else if (contract_address =? sender)%int256 then balance (Step_state prev) sender - amount else if (contract_address =? recipient)%int256 then balance (Step_state prev) recipient + amount else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) <= (if (contract_address =? sender)%int256 then balance (Step_state prev) sender - amount else if (contract_address =? recipient)%int256 then balance (Step_state prev) recipient + amount else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = truesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) sender - amount /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = falsesum (Crowdfunding_backers (contract_state (Step_state prev))) <= (if (contract_address =? recipient)%int256 then balance (Step_state prev) recipient + amount else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = truesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) sender - amount /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: contract_address = sendersum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) sender - amount /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)contradiction.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: sender = contract_addresssum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) sender - amount /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = falsesum (Crowdfunding_backers (contract_state (Step_state prev))) <= (if (contract_address =? recipient)%int256 then balance (Step_state prev) recipient + amount else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = false
SSCase: (contract_address =? recipient)%int256 = truesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) recipient + amount /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = false
SSCase: (contract_address =? recipient)%int256 = falsesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = false
SSCase: (contract_address =? recipient)%int256 = truesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) recipient + amount /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = false
SSCase: contract_address = recipientsum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) recipient + amount /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = false
SSCase: contract_address = recipientsum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address + amount /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)lia.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = false
SSCase: contract_address = recipientsum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address + amountsplit; apply H0.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = false
SSCase: (contract_address =? recipient)%int256 = falsesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
block_count, time_passing: int256
prf: validTimeChange block_count time_passing (block_number (Step_state prev)) (timestamp (Step_state prev)) = true
Case: Step_action prev = timePassing (Step_state prev) block_count time_passing prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
block_count, time_passing: int256
prf: validTimeChange block_count time_passing (block_number (Step_state prev)) (timestamp (Step_state prev)) = true
Case: Step_action prev = timePassing (Step_state prev) block_count time_passing prfbalance_backed ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) (Step_state prev) (Step_action prev))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
block_count, time_passing: int256
prf: validTimeChange block_count time_passing (block_number (Step_state prev)) (timestamp (Step_state prev)) = true
Case: Step_action prev = timePassing (Step_state prev) block_count time_passing prfbalance_backed (updateTimeAndBlock (Step_state prev) block_count time_passing)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
block_count, time_passing: int256
prf: validTimeChange block_count time_passing (block_number (Step_state prev)) (timestamp (Step_state prev)) = true
Case: Step_action prev = timePassing (Step_state prev) block_count time_passing prfCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
block_count, time_passing: int256
prf: validTimeChange block_count time_passing (block_number (Step_state prev)) (timestamp (Step_state prev)) = true
Case: Step_action prev = timePassing (Step_state prev) block_count time_passing prfCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)assumption.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
block_count, time_passing: int256
prf: validTimeChange block_count time_passing (block_number (Step_state prev)) (timestamp (Step_state prev)) = true
Case: Step_action prev = timePassing (Step_state prev) block_count time_passing prfCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
Case: Step_action prev = revert (Step_state prev)balance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
Case: Step_action prev = revert (Step_state prev)balance_backed ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) (Step_state prev) (Step_action prev))assumption. Qed. Opaque Crowdfunding_donate_opt Crowdfunding_getFunds_opt Crowdfunding_claim_opt.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
Case: Step_action prev = revert (Step_state prev)balance_backed (Step_state prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (state : BlockchainState) (s : Step) (l : list Step) (backer_addr : elt) (backed_amount : Z), ReachableFromBy initial_state state s l -> backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) -> contract_address <> backer_addr -> backed_amount > 0 -> (balance state backer_addr + backed_amount <? Int256.modulus) = true -> Crowdfunding_funded (contract_state state) = false -> balance state contract_address < Crowdfunding_goal (contract_state state) -> (forall a : addr, 0 <= balance state a < Int256.modulus) -> Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true -> exists action : Action state, Outgoing_transfer_recipient_and_amount (contract_state (step_keep_transfer state action)) = Some (backer_addr, backed_amount) /\ match action with | @call_Crowdfunding_donate _ context _ _ _ _ _ _ | @call_Crowdfunding_getFunds _ context _ _ _ _ _ _ | @call_Crowdfunding_claim _ context _ _ _ _ _ _ => callvalue context = 0 /\ caller context = backer_addr | _ => False endsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (state : BlockchainState) (s : Step) (l : list Step) (backer_addr : elt) (backed_amount : Z), ReachableFromBy initial_state state s l -> backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) -> contract_address <> backer_addr -> backed_amount > 0 -> (balance state backer_addr + backed_amount <? Int256.modulus) = true -> Crowdfunding_funded (contract_state state) = false -> balance state contract_address < Crowdfunding_goal (contract_state state) -> (forall a : addr, 0 <= balance state a < Int256.modulus) -> Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true -> exists action : Action state, Outgoing_transfer_recipient_and_amount (contract_state (step_keep_transfer state action)) = Some (backer_addr, backed_amount) /\ match action with | @call_Crowdfunding_donate _ context _ _ _ _ _ _ | @call_Crowdfunding_getFunds _ context _ _ _ _ _ _ | @call_Crowdfunding_claim _ context _ _ _ _ _ _ => callvalue context = 0 /\ caller context = backer_addr | _ => False endsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueexists action : Action state, Outgoing_transfer_recipient_and_amount (contract_state (step_keep_transfer state action)) = Some (backer_addr, backed_amount) /\ match action with | @call_Crowdfunding_donate _ context _ _ _ _ _ _ | @call_Crowdfunding_getFunds _ context _ _ _ _ _ _ | @call_Crowdfunding_claim _ context _ _ _ _ _ _ => callvalue context = 0 /\ caller context = backer_addr | _ => False endsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount (contract_state (step_keep_transfer state (call_Crowdfunding_claim state ?context ?callvalue_bounded_prf ?balances_bounded_prf ?callvalue_prf ?r ?contract_state_after ?case_claim_prf))) = Some (backer_addr, backed_amount) /\ callvalue ?context = 0 /\ caller ?context = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount (contract_state {| timestamp := timestamp state; block_number := block_number state; balance := new_balance_after_contract_call state ?context ?contract_state_after; blockhash := blockhash state; contract_state := ?contract_state_after |}) = Some (backer_addr, backed_amount) /\ callvalue ?context = 0 /\ caller ?context = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount (contract_state {| timestamp := timestamp state; block_number := block_number state; balance := new_balance_after_contract_call state ?context ?contract_state_after; blockhash := blockhash state; contract_state := ?contract_state_after |}) = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue ?context = 0 /\ caller ?context = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue ?context = 0 /\ caller ?context = backer_addrshelve.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue ?context = 0 /\ caller ?context = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueCallContextsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= callvalue ?context < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller ?context) contract_address (callvalue ?context) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state ?context address_accepts_funds_assumption ?callvalue_bounded_prf ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue ?context = 0 /\ caller ?context = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueaddrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueaddrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueweisnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueint256snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueint256snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= callvalue {| origin := ?Goal1; caller := ?Goal2; callvalue := ?Goal3; coinbase := ?Goal4; chainid := ?Goal5 |} < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := ?Goal1; caller := ?Goal2; callvalue := ?Goal3; coinbase := ?Goal4; chainid := ?Goal5 |}) contract_address (callvalue {| origin := ?Goal1; caller := ?Goal2; callvalue := ?Goal3; coinbase := ?Goal4; chainid := ?Goal5 |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := ?Goal1; caller := ?Goal2; callvalue := ?Goal3; coinbase := ?Goal4; chainid := ?Goal5 |} address_accepts_funds_assumption ?callvalue_bounded_prf ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := ?Goal1; caller := ?Goal2; callvalue := ?Goal3; coinbase := ?Goal4; chainid := ?Goal5 |} = 0 /\ caller {| origin := ?Goal1; caller := ?Goal2; callvalue := ?Goal3; coinbase := ?Goal4; chainid := ?Goal5 |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueaddrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueweisnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueint256snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueint256snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= callvalue {| origin := backer_addr; caller := ?Goal1; callvalue := ?Goal2; coinbase := ?Goal3; chainid := ?Goal4 |} < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := backer_addr; caller := ?Goal1; callvalue := ?Goal2; coinbase := ?Goal3; chainid := ?Goal4 |}) contract_address (callvalue {| origin := backer_addr; caller := ?Goal1; callvalue := ?Goal2; coinbase := ?Goal3; chainid := ?Goal4 |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := ?Goal1; callvalue := ?Goal2; coinbase := ?Goal3; chainid := ?Goal4 |} address_accepts_funds_assumption ?callvalue_bounded_prf ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := ?Goal1; callvalue := ?Goal2; coinbase := ?Goal3; chainid := ?Goal4 |} = 0 /\ caller {| origin := backer_addr; caller := ?Goal1; callvalue := ?Goal2; coinbase := ?Goal3; chainid := ?Goal4 |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueweisnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueint256snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueint256snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= callvalue {| origin := backer_addr; caller := backer_addr; callvalue := ?Goal1; coinbase := ?Goal2; chainid := ?Goal3 |} < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := backer_addr; caller := backer_addr; callvalue := ?Goal1; coinbase := ?Goal2; chainid := ?Goal3 |}) contract_address (callvalue {| origin := backer_addr; caller := backer_addr; callvalue := ?Goal1; coinbase := ?Goal2; chainid := ?Goal3 |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := ?Goal1; coinbase := ?Goal2; chainid := ?Goal3 |} address_accepts_funds_assumption ?callvalue_bounded_prf ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := ?Goal1; coinbase := ?Goal2; chainid := ?Goal3 |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := ?Goal1; coinbase := ?Goal2; chainid := ?Goal3 |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueint256snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueint256snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := ?Goal1; chainid := ?Goal2 |} < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := ?Goal1; chainid := ?Goal2 |}) contract_address (callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := ?Goal1; chainid := ?Goal2 |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := ?Goal1; chainid := ?Goal2 |} address_accepts_funds_assumption ?callvalue_bounded_prf ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := ?Goal1; chainid := ?Goal2 |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := ?Goal1; chainid := ?Goal2 |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueint256snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := ?Goal1 |} < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := ?Goal1 |}) contract_address (callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := ?Goal1 |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := ?Goal1 |} address_accepts_funds_assumption ?callvalue_bounded_prf ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := ?Goal1 |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := ?Goal1 |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) contract_address (callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption ?callvalue_bounded_prf ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= 0 < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) contract_address (callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption ?Goal1 ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= 0 < Z.pos (shift_nat Int256.wordsize 1)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) contract_address (callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption ?Goal1 ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) contract_address (callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) contract_address (callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer backer_addr contract_address 0 (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 ?Goal1)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr - 0 >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 ?Goal1)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) ?Goal1 (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) ?Goal1 (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) ?Goal1 (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) = true /\ (balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro ?Goal1) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj ?Goal1 ?Goal2)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) && (0 <? Int256.modulus) = true /\ (balance state backer_addr >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro ?Goal2) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) && (0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state backer_addr >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj ?Goal2 ?Goal3)) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) = true /\ (0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state backer_addr >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro ?Goal3) ?Goal2)) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state backer_addr >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj ?Goal3 ?Goal4)) ?Goal2)) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state backer_addr >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) ?Goal3)) ?Goal2)) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <? Z.pos (shift_nat Int256.wordsize 1)) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state backer_addr >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) ?Goal3)) ?Goal2)) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <? 115792089237316195423570985008687907853269984665640564039457584007913129639936) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state backer_addr >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) ?Goal3)) ?Goal2)) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state backer_addr >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ?Goal2)) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= balance state backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ((fun lemma : (...) = true <-> 0 <= balance state backer_addr => Morphisms.iff_flip_impl_subrelation ((... >=? 0) = true) (0 <= balance state backer_addr) lemma) (Z.geb_le (balance state backer_addr) 0) ?Goal2))) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H8: 0 <= balance state backer_addr < Int256.modulus0 <= balance state backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ((fun lemma : (...) = true <-> 0 <= balance state backer_addr => Morphisms.iff_flip_impl_subrelation ((... >=? 0) = true) (0 <= balance state backer_addr) lemma) (Z.geb_le (balance state backer_addr) 0) (let H8 : 0 <= balance state backer_addr < Int256.modulus := H6 backer_addr in ?Goal2)))) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ((fun lemma : (...) = true <-> 0 <= balance state backer_addr => Morphisms.iff_flip_impl_subrelation ((... >=? 0) = true) (0 <= balance state backer_addr) lemma) (Z.geb_le (balance state backer_addr) 0) (let H8 : 0 <= balance state backer_addr < Int256.modulus := H6 backer_addr in let __arith : forall (__p1 : Prop) (__x1 : Z), ... /\ __p1 -> 0 <= __x1 := fun (__p1 : Prop) (__x1 : Z) => let __wit := [] in ... ... in __arith (balance state backer_addr < Int256.modulus) (balance state backer_addr) H8)))) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truebalance state contract_address < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ((fun lemma : (...) = true <-> 0 <= balance state backer_addr => Morphisms.iff_flip_impl_subrelation ((... >=? 0) = true) (0 <= balance state backer_addr) lemma) (Z.geb_le (balance state backer_addr) 0) (let H8 : 0 <= balance state backer_addr < Int256.modulus := H6 backer_addr in let __arith : forall (__p1 : Prop) (__x1 : Z), ... /\ __p1 -> 0 <= __x1 := fun (__p1 : Prop) (__x1 : Z) => let __wit := [] in ... ... in __arith (balance state backer_addr < Int256.modulus) (balance state backer_addr) H8)))) ((fun lemma : (balance state contract_address <? Int256.modulus) = true <-> balance state contract_address < Int256.modulus => Morphisms.iff_flip_impl_subrelation ((balance state contract_address <? Int256.modulus) = true) (balance state contract_address < Int256.modulus) lemma) (Z.ltb_lt (balance state contract_address) Int256.modulus) ?Goal1))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H8: 0 <= balance state contract_address < Int256.modulusbalance state contract_address < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ((fun lemma : (...) = true <-> 0 <= balance state backer_addr => Morphisms.iff_flip_impl_subrelation ((... >=? 0) = true) (0 <= balance state backer_addr) lemma) (Z.geb_le (balance state backer_addr) 0) (let H8 : 0 <= balance state backer_addr < Int256.modulus := H6 backer_addr in let __arith : forall (__p1 : Prop) (__x1 : Z), ... /\ __p1 -> 0 <= __x1 := fun (__p1 : Prop) (__x1 : Z) => let __wit := [] in ... ... in __arith (balance state backer_addr < Int256.modulus) (balance state backer_addr) H8)))) ((fun lemma : (balance state contract_address <? Int256.modulus) = true <-> balance state contract_address < Int256.modulus => Morphisms.iff_flip_impl_subrelation ((balance state contract_address <? Int256.modulus) = true) (balance state contract_address < Int256.modulus) lemma) (Z.ltb_lt (balance state contract_address) Int256.modulus) (let H8 : 0 <= balance state contract_address < Int256.modulus := H6 contract_address in ?Goal1)))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ((fun lemma : (...) = true <-> 0 <= balance state backer_addr => Morphisms.iff_flip_impl_subrelation ((... >=? 0) = true) (0 <= balance state backer_addr) lemma) (Z.geb_le (balance state backer_addr) 0) (let H8 : 0 <= balance state backer_addr < Int256.modulus := H6 backer_addr in let __arith : forall (__p1 : Prop) (__x1 : Z), ... /\ __p1 -> 0 <= __x1 := fun (__p1 : Prop) (__x1 : Z) => let __wit := [] in ... ... in __arith (balance state backer_addr < Int256.modulus) (balance state backer_addr) H8)))) ((fun lemma : (balance state contract_address <? Int256.modulus) = true <-> balance state contract_address < Int256.modulus => Morphisms.iff_flip_impl_subrelation ((balance state contract_address <? Int256.modulus) = true) (balance state contract_address < Int256.modulus) lemma) (Z.ltb_lt (balance state contract_address) Int256.modulus) (let H8 : 0 <= balance state contract_address < Int256.modulus := H6 contract_address in let __arith : forall (__p1 : Prop) (__x2 __x1 : Z), __p1 /\ __x1 < __x2 -> __x1 < __x2 := fun (__p1 : Prop) (__x2 __x1 : Z) => let __wit := [] in let __varmap := VarMap.Branch (VarMap.Elt __x2) __x1 VarMap.Empty in let __ff := Tauto.IMPL (...) None (...) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ...) (VarMap.find 0 __varmap) in __arith (0 <= balance state contract_address) Int256.modulus (balance state contract_address) H8)))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ((fun lemma : (...) = true <-> 0 <= balance state backer_addr => Morphisms.iff_flip_impl_subrelation ((... >=? 0) = true) (0 <= balance state backer_addr) lemma) (Z.geb_le (balance state backer_addr) 0) (let H8 : 0 <= balance state backer_addr < Int256.modulus := H6 backer_addr in let __arith : forall (__p1 : Prop) (__x1 : Z), ... /\ __p1 -> 0 <= __x1 := fun (__p1 : Prop) (__x1 : Z) => let __wit := [] in ... ... in __arith (balance state backer_addr < Int256.modulus) (balance state backer_addr) H8)))) ((fun lemma : (balance state contract_address <? Int256.modulus) = true <-> balance state contract_address < Int256.modulus => Morphisms.iff_flip_impl_subrelation ((balance state contract_address <? Int256.modulus) = true) (balance state contract_address < Int256.modulus) lemma) (Z.ltb_lt (balance state contract_address) Int256.modulus) (let H8 : 0 <= balance state contract_address < Int256.modulus := H6 contract_address in let __arith : forall (__p1 : Prop) (__x2 __x1 : Z), __p1 /\ __x1 < __x2 -> __x1 < __x2 := fun (__p1 : Prop) (__x2 __x1 : Z) => let __wit := [] in let __varmap := VarMap.Branch (VarMap.Elt __x2) __x1 VarMap.Empty in let __ff := Tauto.IMPL (...) None (...) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ...) (VarMap.find 0 __varmap) in __arith (0 <= balance state contract_address) Int256.modulus (balance state contract_address) H8)))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (tt, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ((fun lemma : (...) = true <-> 0 <= balance state backer_addr => Morphisms.iff_flip_impl_subrelation ((... >=? 0) = true) (0 <= balance state backer_addr) lemma) (Z.geb_le (balance state backer_addr) 0) (let H8 : 0 <= balance state backer_addr < Int256.modulus := H6 backer_addr in let __arith : forall (__p1 : Prop) (__x1 : Z), ... /\ __p1 -> 0 <= __x1 := fun (__p1 : Prop) (__x1 : Z) => let __wit := [] in ... ... in __arith (balance state backer_addr < Int256.modulus) (balance state backer_addr) H8)))) ((fun lemma : (balance state contract_address <? Int256.modulus) = true <-> balance state contract_address < Int256.modulus => Morphisms.iff_flip_impl_subrelation ((balance state contract_address <? Int256.modulus) = true) (balance state contract_address < Int256.modulus) lemma) (Z.ltb_lt (balance state contract_address) Int256.modulus) (let H8 : 0 <= balance state contract_address < Int256.modulus := H6 contract_address in let __arith : forall (__p1 : Prop) (__x2 __x1 : Z), __p1 /\ __x1 < __x2 -> __x1 < __x2 := fun (__p1 : Prop) (__x2 __x1 : Z) => let __wit := [] in let __varmap := VarMap.Branch (VarMap.Elt __x2) __x1 VarMap.Empty in let __ff := Tauto.IMPL (...) None (...) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ...) (VarMap.find 0 __varmap) in __arith (0 <= balance state contract_address) Int256.modulus (balance state contract_address) H8)))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ((fun lemma : (...) = true <-> 0 <= balance state backer_addr => Morphisms.iff_flip_impl_subrelation ((... >=? 0) = true) (0 <= balance state backer_addr) lemma) (Z.geb_le (balance state backer_addr) 0) (let H8 : 0 <= balance state backer_addr < Int256.modulus := H6 backer_addr in let __arith : forall (__p1 : Prop) (__x1 : Z), ... /\ __p1 -> 0 <= __x1 := fun (__p1 : Prop) (__x1 : Z) => let __wit := [] in ... ... in __arith (balance state backer_addr < Int256.modulus) (balance state backer_addr) H8)))) ((fun lemma : (balance state contract_address <? Int256.modulus) = true <-> balance state contract_address < Int256.modulus => Morphisms.iff_flip_impl_subrelation ((balance state contract_address <? Int256.modulus) = true) (balance state contract_address < Int256.modulus) lemma) (Z.ltb_lt (balance state contract_address) Int256.modulus) (let H8 : 0 <= balance state contract_address < Int256.modulus := H6 contract_address in let __arith : forall (__p1 : Prop) (__x2 __x1 : Z), __p1 /\ __x1 < __x2 -> __x1 < __x2 := fun (__p1 : Prop) (__x2 __x1 : Z) => let __wit := [] in let __varmap := VarMap.Branch (VarMap.Elt __x2) __x1 VarMap.Empty in let __ff := Tauto.IMPL (...) None (...) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ...) (VarMap.find 0 __varmap) in __arith (0 <= balance state contract_address) Int256.modulus (balance state contract_address) H8)))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT ((v <- ret (negb (me_caller (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (ZMicromega.ZTautoChecker_sound (Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt))) [] eq_refl (VarMap.find 0 (VarMap.Elt (Z.pos (shift_nat Int256.wordsize 1)))) (Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1))) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (...) (...))) (Morphisms.iff_flip_impl_subrelation ((...) = true) (balance state contract_address < Int256.modulus) (Z.ltb_lt (...) Int256.modulus) (ZMicromega.ZTautoChecker_sound (...) [] eq_refl (...) (...))))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr)))) =? me_address (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (ZMicromega.ZTautoChecker_sound (Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt))) [] eq_refl (VarMap.find 0 (VarMap.Elt (Z.pos (shift_nat Int256.wordsize 1)))) (Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1))) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (...) (...))) (Morphisms.iff_flip_impl_subrelation ((...) = true) (balance state contract_address < Int256.modulus) (Z.ltb_lt (...) Int256.modulus) (ZMicromega.ZTautoChecker_sound (...) [] eq_refl (...) (...))))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr)))))%int256);; guard v);; (v <- ret (me_callvalue (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (ZMicromega.ZTautoChecker_sound (Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt))) [] eq_refl (VarMap.find 0 (VarMap.Elt (Z.pos (shift_nat Int256.wordsize 1)))) (Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1))) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro ...) (Morphisms.iff_flip_impl_subrelation ... ... ... ...))) (Morphisms.iff_flip_impl_subrelation ((... <? Int256.modulus) = true) (balance state contract_address < Int256.modulus) (Z.ltb_lt (balance state contract_address) Int256.modulus) (ZMicromega.ZTautoChecker_sound (Tauto.IMPL ... None ...) [] eq_refl (VarMap.find 0 ...) (H6 contract_address))))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr)))) =? 0);; guard v);; spec1 <- ret (me_number (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (ZMicromega.ZTautoChecker_sound (Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt))) [] eq_refl (VarMap.find 0 (VarMap.Elt (Z.pos (shift_nat Int256.wordsize 1)))) (Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1))) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj ... ...)) (Morphisms.iff_flip_impl_subrelation (... = true) (0 <= ...) (Z.geb_le ... 0) (ZMicromega.ZTautoChecker_sound ... [] eq_refl ... ...)))) (Morphisms.iff_flip_impl_subrelation ((balance state contract_address <? Int256.modulus) = true) (balance state contract_address < Int256.modulus) (Z.ltb_lt (balance state contract_address) Int256.modulus) (ZMicromega.ZTautoChecker_sound (Tauto.IMPL (Tauto.AND ... ...) None (Tauto.A Tauto.isProp ... tt)) [] eq_refl (VarMap.find 0 (VarMap.Branch ... ... VarMap.Empty)) (H6 contract_address))))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr)))));; spec2 <- gets Crowdfunding_max_block;; (if negb (Int256.ltu spec2 spec1) then ret tt else spec3 <- ret (me_balance (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (ZMicromega.ZTautoChecker_sound (Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := ...; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := ... |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := ...; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := ... |} tt))) [] eq_refl (VarMap.find 0 (VarMap.Elt (Z.pos (shift_nat Int256.wordsize 1)))) (Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1))) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (...) && (...) && (... >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (...)) (Morphisms.iff_flip_impl_subrelation (...) (...) (...) (...)))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr)))) (me_address (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (ZMicromega.ZTautoChecker_sound (Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := ...; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := ... |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| ... |} tt) (Tauto.A Tauto.isProp {| ... |} tt))) [] eq_refl (VarMap.find 0 (VarMap.Elt (Z.pos (...)))) (Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1))) H6 (eq_ind_r (fun z : Z => (...) && (...) && (z >=? 0) && (... + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => ... && ... && (...) = true) (andb_true_intro (conj (...) (...))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))));; spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (ZMicromega.ZTautoChecker_sound (Tauto.IMPL (Tauto.A Tauto.isProp {| ... |} tt) None (Tauto.AND (...) (...))) [] eq_refl (VarMap.find 0 (VarMap.Elt (...))) (Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1))) H6 (eq_ind_r (fun z : Z => ... && ... && (...) = true) (eq_ind_r (fun ... => ... = true) (andb_true_intro (...)) (Z.add_0_r (...))) (Z.sub_0_r (balance state backer_addr))))) (Crowdfunding_backers s));; spec5 <- gets Crowdfunding_funded;; spec6 <- gets Crowdfunding_goal;; (if (spec4 =? 0) || (spec5 || (spec6 <=? spec3)) then ret tt else MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (...)) 0 (Crowdfunding_backers s)) s);; ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (make_machine_env contract_address state {| ... |} address_accepts_funds_assumption (...) H6 (...)) (me_caller (...)) spec4 d in if (success =? Int256.one)%int256 then put d' else mzero)))) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truematch runStateT (guard (negb (backer_addr =? contract_address)%int256)) (contract_state state) with | Some (_, s) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s) (block_number state)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s0) =? 0) || (Crowdfunding_funded s0 || (Crowdfunding_goal s0 <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr ... ... && address_accepts_funds_assumption ... contract_address backer_addr ... then (Int256.one, update_Outgoing_transfer_recipient_and_amount ... ...) else (Int256.zero, update_Crowdfunding_backers ... s1) in if (success =? Int256.one)%int256 then {| runStateT := ... |} else {| runStateT := ... |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s1)) s1) |}) s0 |}) s | None => None end = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
Case: (backer_addr =? contract_address)%int256 = truematch runStateT (guard (negb true)) (contract_state state) with | Some (_, s) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s) (block_number state)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s0) =? 0) || (Crowdfunding_funded s0 || (Crowdfunding_goal s0 <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr ... ... && address_accepts_funds_assumption ... contract_address backer_addr ... then (Int256.one, update_Outgoing_transfer_recipient_and_amount ... ...) else (Int256.zero, update_Crowdfunding_backers ... s1) in if (success =? Int256.one)%int256 then {| runStateT := ... |} else {| runStateT := ... |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s1)) s1) |}) s0 |}) s | None => None end = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
Case: (backer_addr =? contract_address)%int256 = falsematch runStateT (guard (negb false)) (contract_state state) with | Some (_, s) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s) (block_number state)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s0) =? 0) || (Crowdfunding_funded s0 || (Crowdfunding_goal s0 <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr ... ... && address_accepts_funds_assumption ... contract_address backer_addr ... then (Int256.one, update_Outgoing_transfer_recipient_and_amount ... ...) else (Int256.zero, update_Crowdfunding_backers ... s1) in if (success =? Int256.one)%int256 then {| runStateT := ... |} else {| runStateT := ... |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s1)) s1) |}) s0 |}) s | None => None end = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
Case: backer_addr = contract_addressmatch runStateT (guard (negb true)) (contract_state state) with | Some (_, s) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s) (block_number state)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s0) =? 0) || (Crowdfunding_funded s0 || (Crowdfunding_goal s0 <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr ... ... && address_accepts_funds_assumption ... contract_address backer_addr ... then (Int256.one, update_Outgoing_transfer_recipient_and_amount ... ...) else (Int256.zero, update_Crowdfunding_backers ... s1) in if (success =? Int256.one)%int256 then {| runStateT := ... |} else {| runStateT := ... |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s1)) s1) |}) s0 |}) s | None => None end = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
Case: (backer_addr =? contract_address)%int256 = falsematch runStateT (guard (negb false)) (contract_state state) with | Some (_, s) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s) (block_number state)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s0) =? 0) || (Crowdfunding_funded s0 || (Crowdfunding_goal s0 <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr ... ... && address_accepts_funds_assumption ... contract_address backer_addr ... then (Int256.one, update_Outgoing_transfer_recipient_and_amount ... ...) else (Int256.zero, update_Crowdfunding_backers ... s1) in if (success =? Int256.one)%int256 then {| runStateT := ... |} else {| runStateT := ... |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s1)) s1) |}) s0 |}) s | None => None end = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
Case: contract_address = backer_addrmatch runStateT (guard (negb true)) (contract_state state) with | Some (_, s) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s) (block_number state)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s0) =? 0) || (Crowdfunding_funded s0 || (Crowdfunding_goal s0 <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr ... ... && address_accepts_funds_assumption ... contract_address backer_addr ... then (Int256.one, update_Outgoing_transfer_recipient_and_amount ... ...) else (Int256.zero, update_Crowdfunding_backers ... s1) in if (success =? Int256.one)%int256 then {| runStateT := ... |} else {| runStateT := ... |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s1)) s1) |}) s0 |}) s | None => None end = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
Case: (backer_addr =? contract_address)%int256 = falsematch runStateT (guard (negb false)) (contract_state state) with | Some (_, s) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s) (block_number state)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s0) =? 0) || (Crowdfunding_funded s0 || (Crowdfunding_goal s0 <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr ... ... && address_accepts_funds_assumption ... contract_address backer_addr ... then (Int256.one, update_Outgoing_transfer_recipient_and_amount ... ...) else (Int256.zero, update_Crowdfunding_backers ... s1) in if (success =? Int256.one)%int256 then {| runStateT := ... |} else {| runStateT := ... |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s1)) s1) |}) s0 |}) s | None => None end = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
Case: (backer_addr =? contract_address)%int256 = falsematch runStateT (guard (negb false)) (contract_state state) with | Some (_, s) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s) (block_number state)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s0) =? 0) || (Crowdfunding_funded s0 || (Crowdfunding_goal s0 <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr ... ... && address_accepts_funds_assumption ... contract_address backer_addr ... then (Int256.one, update_Outgoing_transfer_recipient_and_amount ... ...) else (Int256.zero, update_Crowdfunding_backers ... s1) in if (success =? Int256.one)%int256 then {| runStateT := ... |} else {| runStateT := ... |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s1)) s1) |}) s0 |}) s | None => None end = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
Case: (backer_addr =? contract_address)%int256 = falserunStateT (if negb (Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state)) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s) =? 0) || (Crowdfunding_funded s || (Crowdfunding_goal s <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr ...) (ContractModel.update_balances backer_addr contract_address 0 ...) && address_accepts_funds_assumption (Some ...) contract_address backer_addr (get_default 0 backer_addr ...) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some ...) (update_Crowdfunding_backers ... s0)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 ...) s0) in if (success =? Int256.one)%int256 then {| runStateT := fun ... => Some ... |} else {| runStateT := fun ... => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s0)) s0) |}) s |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = falserunStateT (if negb true then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s) =? 0) || (Crowdfunding_funded s || (Crowdfunding_goal s <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr ...) (ContractModel.update_balances backer_addr contract_address 0 ...) && address_accepts_funds_assumption (Some ...) contract_address backer_addr (get_default 0 backer_addr ...) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some ...) (update_Crowdfunding_backers ... s0)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 ...) s0) in if (success =? Int256.one)%int256 then {| runStateT := fun ... => Some ... |} else {| runStateT := fun ... => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s0)) s0) |}) s |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = falserunStateT (if (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) || (Crowdfunding_funded (contract_state state) || (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = truerunStateT (if true || (Crowdfunding_funded (contract_state state) || (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = falserunStateT (if false || (Crowdfunding_funded (contract_state state) || (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) = 0runStateT (if true || (Crowdfunding_funded (contract_state state) || (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = falserunStateT (if false || (Crowdfunding_funded (contract_state state) || (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = falserunStateT (if false || (Crowdfunding_funded (contract_state state) || (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = falserunStateT (if false || (false || (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = truerunStateT (if false || (false || true) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = falserunStateT (if false || (false || false) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: Crowdfunding_goal (contract_state state) <= ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_addressrunStateT (if false || (false || true) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = falserunStateT (if false || (false || false) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: Crowdfunding_goal (contract_state state) <= balance state contract_addressrunStateT (if false || (false || true) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = falserunStateT (if false || (false || false) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = falserunStateT (if false || (false || false) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = falserunStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = falserunStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = truerunStateT (let (success, d') := if true && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = falserunStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = trueSome (tt, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = falserunStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = trueSome (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state))); Crowdfunding_owner := Crowdfunding_owner (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_max_block := Crowdfunding_max_block (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_goal := Crowdfunding_goal (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_backers := Crowdfunding_backers (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) |}) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = falserunStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = trueSome (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state))); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |}) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = falserunStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = trueSome (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |}) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = falserunStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = trueSome (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |}) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = falserunStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addr(* The above is the successful claim case, I think.*)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = falserunStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = falseNone = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseNone = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false \/ (ContractModel.update_balances backer_addr contract_address 0 (balance state) backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseNone = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = falseNone = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (ContractModel.update_balances backer_addr contract_address 0 (balance state) backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseNone = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = falseFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (ContractModel.update_balances backer_addr contract_address 0 (balance state) backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseNone = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = falseFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false(forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false(forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = truecontract_address: addr
state: BlockchainState
backer_addr: elt(forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = truecontract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address(balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = truecontract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address0 <= balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state))contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_addressget_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <= sum (Crowdfunding_backers (contract_state state))contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
H1: get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <= sum (Crowdfunding_backers (contract_state state))0 <= balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state))contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_addressforall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
H1: get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <= sum (Crowdfunding_backers (contract_state state))0 <= balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state))contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
k: elt
v: Z
H1: get k (Crowdfunding_backers (contract_state state)) = Some vv >= 0contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
H1: get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <= sum (Crowdfunding_backers (contract_state state))0 <= balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state))contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
k: elt
v: Z
H1: v >= 0 /\ v < Int256.modulusv >= 0contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
H1: get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <= sum (Crowdfunding_backers (contract_state state))0 <= balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state))contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
k: elt
v: Z
H1: v >= 0
H2: v < Int256.modulusv >= 0contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
H1: get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <= sum (Crowdfunding_backers (contract_state state))0 <= balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state))lia.contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
H1: get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <= sum (Crowdfunding_backers (contract_state state))0 <= balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && ((if (backer_addr =? contract_address)%int256 then balance state contract_address else if (contract_address =? backer_addr)%int256 then balance state backer_addr - 0 else if (contract_address =? contract_address)%int256 then balance state contract_address + 0 else balance state contract_address) - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && ((if (backer_addr =? contract_address)%int256 then balance state contract_address else if (contract_address =? backer_addr)%int256 then balance state backer_addr - 0 else balance state contract_address + 0) - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && ((if (contract_address =? backer_addr)%int256 then balance state backer_addr - 0 else balance state contract_address + 0) - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address + 0 - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = trueFalse(* Here, we make use of a previous proof, sufficient_funds_safe *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: Safe balance_backedFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed stateFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: balance_backed state
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed stateFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: Crowdfunding_funded (contract_state state) = false -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus)
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed stateFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed stateCrowdfunding_funded (contract_state state) = falsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulusFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulusFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulusFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? match get backer_addr (Crowdfunding_backers (contract_state state)) with | Some v => v | None => 0 end) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? match get backer_addr (Crowdfunding_backers (contract_state state)) with | Some v => v | None => 0 end) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: forall value : Z, get backer_addr (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? match get backer_addr (Crowdfunding_backers (contract_state state)) with | Some v => v | None => 0 end) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
z: Z
H11: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? z) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
z: Z
H11: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H12: Some z = Some z -> z >= 0 /\ z < Int256.modulus(0 <=? z) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
z: Z
H11: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H12: Some z = Some z -> z >= 0 /\ z < Int256.modulus
H13: Some z = Some z(0 <=? z) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
z: Z
H11: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H12: Some z = Some z -> z >= 0 /\ z < Int256.modulus
H13: z >= 0 /\ z < Int256.modulus(0 <=? z) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
z: Z
H11: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H12: Some z = Some z -> z >= 0 /\ z < Int256.modulus
H13: z >= 0
H14: z < Int256.modulus(0 <=? z) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
z: Z
H11: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H12: Some z = Some z -> z >= 0 /\ z < Int256.modulus
H13: z >= 0
H14: z < Int256.modulus0 <= zsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus0 <= 0snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true(get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true(match get backer_addr (Crowdfunding_backers (contract_state state)) with | Some v => v | None => 0 end <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true(match get backer_addr (Crowdfunding_backers (contract_state state)) with | Some v => v | None => 0 end <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, get backer_addr (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus(match get backer_addr (Crowdfunding_backers (contract_state state)) with | Some v => v | None => 0 end <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
z: Z
H12: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus(z <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
z: Z
H12: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H13: Some z = Some z -> z >= 0 /\ z < Int256.modulus(z <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
z: Z
H12: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H13: Some z = Some z -> z >= 0 /\ z < Int256.modulus
H14: Some z = Some z(z <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
z: Z
H12: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H13: Some z = Some z -> z >= 0 /\ z < Int256.modulus
H14: z >= 0 /\ z < Int256.modulus(z <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
z: Z
H12: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H13: Some z = Some z -> z >= 0 /\ z < Int256.modulus
H14: z >= 0
H15: z < Int256.modulus(z <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
z: Z
H12: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H13: Some z = Some z -> z >= 0 /\ z < Int256.modulus
H14: z >= 0
H15: z < Int256.modulusz < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus0 < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus0 < Z.pos (shift_nat Int256.wordsize 1)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && true && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && true && true = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsediscriminate.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (ContractModel.update_balances backer_addr contract_address 0 (balance state) backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseNone = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (ContractModel.update_balances backer_addr contract_address 0 (balance state) backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (ContractModel.update_balances backer_addr contract_address 0 (balance state) backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: ((if (backer_addr =? contract_address)%int256 then balance state backer_addr else if (backer_addr =? backer_addr)%int256 then balance state backer_addr - 0 else if (backer_addr =? contract_address)%int256 then balance state contract_address + 0 else balance state backer_addr) + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: ((if (backer_addr =? contract_address)%int256 then balance state backer_addr else balance state backer_addr - 0) + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addr(* rewrite Int256.eq_false in H8 by auto. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (balance state backer_addr - 0 + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (balance state backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrstate: BlockchainState
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H3: (balance state backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = true
H8: (balance state backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueSome (backer_addr, backed_amount) = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrauto. (* These are the conditions to ensure that the action is reasonably callable by the backer. *) Qed. Opaque Crowdfunding_donate_opt Crowdfunding_getFunds_opt Crowdfunding_claim_opt.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 = 0 /\ backer_addr = backer_addrSection Monad. Class Monad (M : Type -> Type) := { ret : forall {T : Type}, T -> M T; bind : forall {T U : Type}, M T -> (T -> M U) -> M U; left_identity_prf : forall {T U : Type} a f, @bind T U (ret a) f = f a; right_identity_prf : forall {T : Type} (m : M T), @bind T T m ret = m; associativity_prf : forall {T U V : Type} (m : M T) (g : T -> M U) (h : U -> M V), @bind U V (@bind T U m g) h = @bind T V m (fun x => @bind U V (g x) h) }. Notation "a >>=' b" := (bind a b) (at level 50, left associativity). Notation "f >=>' g" := (fun x => (f x >>=' g)) (at level 50, left associativity).snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (A B C D : Type) (m : Type -> Type) (H : Monad m) (f : A -> m B) (g : B -> m C) (h : C -> m D), f >=>' g >=>' h = f >=>' (g >=>' h)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (A B C D : Type) (m : Type -> Type) (H : Monad m) (f : A -> m B) (g : B -> m C) (h : C -> m D), f >=>' g >=>' h = f >=>' (g >=>' h)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
A, B, C, D: Type
m: Type -> Type
H: Monad m
f: A -> m B
g: B -> m C
h: C -> m Df >=>' g >=>' h = f >=>' (g >=>' h)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
A, B, C, D: Type
m: Type -> Type
H: Monad m
f: A -> m B
g: B -> m C
h: C -> m Dforall x : A, f x >>=' g >>=' h = f x >>=' (g >=>' h)apply Monad.associativity_prf. Qed.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
A, B, C, D: Type
m: Type -> Type
H: Monad m
f: A -> m B
g: B -> m C
h: C -> m D
x: Af x >>=' g >>=' h = f x >>=' (g >=>' h)Inductive Maybe (T : Type) : Type := | None' : Maybe T | Some' : T -> Maybe T . Arguments None' {T}. Arguments Some' {T} t.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (T U : Type) (a : T) (f : T -> Maybe U), f a = f asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (T : Type) (m : Maybe T), match m with | None' => None' | Some' a => Some' a end = msnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (T U V : Type) (m : Maybe T) (g : T -> Maybe U) (h : U -> Maybe V), match match m with | None' => None' | Some' a => g a end with | None' => None' | Some' a => h a end = match m with | None' => None' | Some' a => match g a with | None' => None' | Some' a0 => h a0 end endsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (T U : Type) (a : T) (f : T -> Maybe U), f a = f asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (T : Type) (m : Maybe T), match m with | None' => None' | Some' a => Some' a end = msnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (T U V : Type) (m : Maybe T) (g : T -> Maybe U) (h : U -> Maybe V), match match m with | None' => None' | Some' a => g a end with | None' => None' | Some' a => h a end = match m with | None' => None' | Some' a => match g a with | None' => None' | Some' a0 => h a0 end endsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (T U : Type) (a : T) (f : T -> Maybe U), f a = f areflexivity.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
T, U: Type
a: T
f: T -> Maybe Uf a = f asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (T : Type) (m : Maybe T), match m with | None' => None' | Some' a => Some' a end = msnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
T: Type
m: Maybe Tmatch m with | None' => None' | Some' a => Some' a end = msnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
T: TypeNone' = None'snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
T: Type
t0: TSome' t0 = Some' t0reflexivity.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
T: TypeNone' = None'reflexivity.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
T: Type
t0: TSome' t0 = Some' t0snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (T U V : Type) (m : Maybe T) (g : T -> Maybe U) (h : U -> Maybe V), match match m with | None' => None' | Some' a => g a end with | None' => None' | Some' a => h a end = match m with | None' => None' | Some' a => match g a with | None' => None' | Some' a0 => h a0 end endsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
T, U, V: Type
m: Maybe T
g: T -> Maybe U
h: U -> Maybe Vmatch match m with | None' => None' | Some' a => g a end with | None' => None' | Some' a => h a end = match m with | None' => None' | Some' a => match g a with | None' => None' | Some' a0 => h a0 end endsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
T, U, V: Type
g: T -> Maybe U
h: U -> Maybe VNone' = None'snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
T, U, V: Type
t0: T
g: T -> Maybe U
h: U -> Maybe Vmatch g t0 with | None' => None' | Some' a => h a end = match g t0 with | None' => None' | Some' a => h a endreflexivity.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
T, U, V: Type
g: T -> Maybe U
h: U -> Maybe VNone' = None'reflexivity. Defined.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
T, U, V: Type
t0: T
g: T -> Maybe U
h: U -> Maybe Vmatch g t0 with | None' => None' | Some' a => h a end = match g t0 with | None' => None' | Some' a => h a endImport ListNotations. Definition State (St Result : Type) : Type := St -> (Result * St).snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, U, V: Type
aU: State St U
f: U -> State St VState St Vsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, U, V: Type
aU: State St U
f: U -> State St VState St Vsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, U, V: Type
aU: St -> U * St
f: U -> St -> V * StSt -> V * Stsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, U, V: Type
aU: St -> U * St
f: U -> St -> V * St
st0: St(V * St)%typesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, U, V: Type
aU: St -> U * St
f: U -> St -> V * St
st0: St
u: U
st1: St(V * St)%typesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, U, V: Type
aU: St -> U * St
f: U -> St -> V * St
st0: St
u: U
st1: St
aV: St -> V * St(V * St)%typeexact (v, st2). Defined.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, U, V: Type
aU: St -> U * St
f: U -> St -> V * St
st0: St
u: U
st1: St
aV: St -> V * St
v: V
st2: St(V * St)%typesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St: Typeforall (T U : Type) (a : T) (f : T -> State St U), (fun st0 : St => let aV := f a in aV st0) = f asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St: Typeforall (T : Type) (m : State St T), (fun st0 : St => let (u, st1) := m st0 in let aV := fun s : St => (u, s) in aV st1) = msnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St: Typeforall (T U V : Type) (m : State St T) (g : T -> State St U) (h : U -> State St V), (fun st0 : St => let (u, st1) := let (u, st1) := m st0 in let aV := g u in aV st1 in let aV := h u in aV st1) = (fun st0 : St => let (u, st1) := m st0 in let aV := fun st2 : St => let (u0, st3) := g u st2 in let aV := h u0 in aV st3 in aV st1)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St: Typeforall (T U : Type) (a : T) (f : T -> State St U), (fun st0 : St => let aV := f a in aV st0) = f asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St: Typeforall (T : Type) (m : State St T), (fun st0 : St => let (u, st1) := m st0 in let aV := fun s : St => (u, s) in aV st1) = msnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St: Typeforall (T U V : Type) (m : State St T) (g : T -> State St U) (h : U -> State St V), (fun st0 : St => let (u, st1) := let (u, st1) := m st0 in let aV := g u in aV st1 in let aV := h u in aV st1) = (fun st0 : St => let (u, st1) := m st0 in let aV := fun st2 : St => let (u0, st3) := g u st2 in let aV := h u0 in aV st3 in aV st1)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St: Typeforall (T U : Type) (a : T) (f : T -> State St U), (fun st0 : St => let aV := f a in aV st0) = f asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T, U: Type
a: T
f: T -> State St U(fun st0 : St => let aV := f a in aV st0) = f asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T, U: Type
a: T
f: T -> State St U(fun st0 : St => f a st0) = f asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T, U: Type
a: T
f: T -> State St U(fun st0 : St => f a st0) = f asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T, U: Type
a: T
f: T -> State St Uforall x : St, f a x = f a xsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T, U: Type
a: T
f: T -> State St U
x: Stf a x = f a xreflexivity.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T, U: Type
a: T
f: T -> State St U
x: St
u: U
s: St(u, s) = (u, s)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St: Typeforall (T : Type) (m : State St T), (fun st0 : St => let (u, st1) := m st0 in let aV := fun s : St => (u, s) in aV st1) = msnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T: Type
m: State St T(fun st0 : St => let (u, st1) := m st0 in let aV := fun s : St => (u, s) in aV st1) = msnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T: Type
m: State St T(fun st0 : St => let (u, st1) := m st0 in (u, st1)) = msnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T: Type
m: St -> T * St(fun st0 : St => let (u, st1) := m st0 in (u, st1)) = msnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T: Type
m: St -> T * Stforall x : St, (let (u, st1) := m x in (u, st1)) = m xsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T: Type
m: St -> T * St
x: St(let (u, st1) := m x in (u, st1)) = m xreflexivity.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T: Type
m: St -> T * St
x: St
t0: T
s: St(t0, s) = (t0, s)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St: Typeforall (T U V : Type) (m : State St T) (g : T -> State St U) (h : U -> State St V), (fun st0 : St => let (u, st1) := let (u, st1) := m st0 in let aV := g u in aV st1 in let aV := h u in aV st1) = (fun st0 : St => let (u, st1) := m st0 in let aV := fun st2 : St => let (u0, st3) := g u st2 in let aV := h u0 in aV st3 in aV st1)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T, U, V: Typeforall (m : State St T) (g : T -> State St U) (h : U -> State St V), (fun st0 : St => let (u, st1) := let (u, st1) := m st0 in let aV := g u in aV st1 in let aV := h u in aV st1) = (fun st0 : St => let (u, st1) := m st0 in let aV := fun st2 : St => let (u0, st3) := g u st2 in let aV := h u0 in aV st3 in aV st1)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T, U, V: Type
aT: State St T
g: T -> State St U
h: U -> State St V(fun st0 : St => let (u, st1) := let (u, st1) := aT st0 in let aV := g u in aV st1 in let aV := h u in aV st1) = (fun st0 : St => let (u, st1) := aT st0 in let aV := fun st2 : St => let (u0, st3) := g u st2 in let aV := h u0 in aV st3 in aV st1)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T, U, V: Type
aT: State St T
g: T -> State St U
h: U -> State St V(fun st0 : St => let (u, st1) := let (u, st1) := aT st0 in g u st1 in h u st1) = (fun st0 : St => let (u, st1) := aT st0 in let (u0, st2) := g u st1 in h u0 st2)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T, U, V: Type
aT: State St T
g: T -> State St U
h: U -> State St Vforall x : St, (let (u, st1) := let (u, st1) := aT x in g u st1 in h u st1) = (let (u, st1) := aT x in let (u0, st2) := g u st1 in h u0 st2)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T, U, V: Type
aT: State St T
g: T -> State St U
h: U -> State St V
s: St(let (u, st1) := let (u, st1) := aT s in g u st1 in h u st1) = (let (u, st1) := aT s in let (u0, st2) := g u st1 in h u0 st2)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T, U, V: Type
aT: State St T
g: T -> State St U
h: U -> State St V
s: St
t: T
st0: St(let (u, st1) := g t st0 in h u st1) = (let (u, st1) := g t st0 in h u st1)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T, U, V: Type
aT: State St T
g: T -> State St U
h: U -> State St V
s: St
t: T
st0: St
u: U
st1: Sth u st1 = h u st1reflexivity. Defined. Notation "a >>='' b" := (bind' a b) (at level 58, left associativity).snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, T, U, V: Type
aT: State St T
g: T -> State St U
h: U -> State St V
s: St
t: T
st0: St
u: U
st1: St
v: V
st2: St(v, st2) = (v, st2)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (St U V : Type) (aU : State St U) (f : U -> State St V), aU >>='' f = aU >>=' fsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (St U V : Type) (aU : State St U) (f : U -> State St V), aU >>='' f = aU >>=' fsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, U, V: Type
aU: State St U
f: U -> State St VaU >>='' f = aU >>=' fsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, U, V: Type
aU: State St U
f: U -> State St V(fun st0 : St => let (a, b) := aU st0 in let (a0, b0) := f a b in (a0, b0)) = aU >>=' fsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, U, V: Type
aU: State St U
f: U -> State St V(fun st0 : St => let (a, b) := aU st0 in let (a0, b0) := f a b in (a0, b0)) = (fun st0 : St => let (u, st1) := aU st0 in f u st1)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, U, V: Type
aU: State St U
f: U -> State St Vforall x : St, (let (a, b) := aU x in let (a0, b0) := f a b in (a0, b0)) = (let (u, st1) := aU x in f u st1)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, U, V: Type
aU: State St U
f: U -> State St V
x: St(let (a, b) := aU x in let (a0, b0) := f a b in (a0, b0)) = (let (u, st1) := aU x in f u st1)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, U, V: Type
aU: State St U
f: U -> State St V
x: St
u: U
s: St(let (a, b) := f u s in (a, b)) = f u sreflexivity. Qed. Notation "a1 ;;; a2" := (a1 >>=' (fun _ => a2)) (at level 61, right associativity). Notation "x <- a1 ;;; a2" := (a1 >>=' (fun x => a2)) (at level 61, a1 at next level, right associativity). Notation "' pat <- a1 ;;; a2" := (a1 >>=' (fun x => match x with pat => a2 end)) (at level 61, pat pattern, a1 at next level, right associativity). Definition minusOne (x : nat) : Maybe nat := match x with | O => None' | S x' => Some' x' end. Open Scope nat. Definition add3 (t : nat * nat * nat) : Maybe nat := match t with (a, b, c) => Some' (a + b + c) end. Definition triple (x y z: nat) : Maybe (nat * nat * nat) := Some' (x, y, z).snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
St, U, V: Type
aU: State St U
f: U -> State St V
x: St
u: U
s: St
v: V
s0: St(v, s0) = (v, s0)Definition Stack := list nat. Definition pop : Stack -> (nat * Stack) := fun (s : Stack) => match s with [] => (0, []) | (x :: xs) => (x, xs) end. Definition popTypeExample : State Stack nat := pop. Definition push (n : nat) : State Stack unit := fun (s : Stack) => (tt, n :: s). Definition pushTypeExample : nat -> Stack -> (unit * Stack) := push. Definition stackManipulation1 : State Stack unit := pop >>=' push. Definition stackManipulation1' : State Stack unit := x <- pop ;;; push x.Definition stackManipulation2 : State Stack nat := push 4;;; stackManipulation1;;; push 5;;; pop.Class MonadState (T : Type) (m : Type -> Type) : Type := { get' : m T; put : T -> m unit }. Instance MonadState_State (St : Type) : MonadState St (State St) := { get' := (fun s => (s, s)); put (newState : St) := (fun _ => (tt, newState)) }. Section StateTransformerMonad. Variable m : Type -> Type. Variable M : Monad m. Definition StateT `{Monad m} (St : Type) (A : Type) := St -> m (A * St).Generalizable All Variables.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
A, B: Type
RB: relation B
sb: subrelation RB eqsubrelation (pointwise_relation A RB) eqsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
A, B: Type
RB: relation B
sb: subrelation RB eqsubrelation (pointwise_relation A RB) eqsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
A, B: Type
RB: relation B
sb: subrelation RB eq
f, g: A -> B
Hfg: pointwise_relation A RB f gf = gintro x; apply sb, (Hfg x). Qed.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
A, B: Type
RB: relation B
sb: subrelation RB eq
f, g: A -> B
Hfg: pointwise_relation A RB f gforall x : A, f x = g xsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St: Typeforall (T U : Type) (a : T) (f : T -> StateT St U), (fun s : St => x <- ret (a, s);;; (let (u, s') := x in f u s')) = f asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St: Typeforall (T : Type) (m0 : StateT St T), m0 >=>' (fun x : T * St => let (u, s') := x in ret (u, s')) = m0snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St: Typeforall (T U V : Type) (m0 : StateT St T) (g : T -> StateT St U) (h : U -> StateT St V), (fun s : St => x <- (x <- m0 s;;; (let (u, s') := x in g u s'));;; (let (u, s') := x in h u s')) = m0 >=>' (fun x : T * St => let (u, s') := x in x0 <- g u s';;; (let (u0, s'0) := x0 in h u0 s'0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St: Typeforall (T U : Type) (a : T) (f : T -> StateT St U), (fun s : St => x <- ret (a, s);;; (let (u, s') := x in f u s')) = f asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St: Typeforall (T : Type) (m0 : StateT St T), m0 >=>' (fun x : T * St => let (u, s') := x in ret (u, s')) = m0snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St: Typeforall (T U V : Type) (m0 : StateT St T) (g : T -> StateT St U) (h : U -> StateT St V), (fun s : St => x <- (x <- m0 s;;; (let (u, s') := x in g u s'));;; (let (u, s') := x in h u s')) = m0 >=>' (fun x : T * St => let (u, s') := x in x0 <- g u s';;; (let (u0, s'0) := x0 in h u0 s'0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St: Typeforall (T U : Type) (a : T) (f : T -> StateT St U), (fun s : St => x <- ret (a, s);;; (let (u, s') := x in f u s')) = f asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T, U: Type
a: T
f: T -> StateT St U(fun s : St => x <- ret (a, s);;; (let (u, s') := x in f u s')) = f asnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T, U: Type
a: T
f: T -> StateT St Uforall x : St, x0 <- ret (a, x);;; (let (u, s') := x0 in f u s') = f a xsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T, U: Type
a: T
f: T -> StateT St U
x: Stx <- ret (a, x);;; (let (u, s') := x in f u s') = f a xreflexivity.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T, U: Type
a: T
f: T -> StateT St U
x: Stf a x = f a xsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St: Typeforall (T : Type) (m0 : StateT St T), m0 >=>' (fun x : T * St => let (u, s') := x in ret (u, s')) = m0snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T: Type
aT: StateT St TaT >=>' (fun x : T * St => let (u, s') := x in ret (u, s')) = aTsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T: Type
aT: StateT St Tforall x : St, x0 <- aT x;;; (let (u, s') := x0 in ret (u, s')) = aT xsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T: Type
aT: StateT St T
x: Stx <- aT x;;; (let (u, s') := x in ret (u, s')) = aT xsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T: Type
aT: StateT St T
x: Stforall x0 : T * St, (let (a, s') := x0 in ret (a, s')) = ret x0snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T: Type
aT: StateT St T
x: St
H: forall x0 : T * St, (let (a, s') := x0 in ret (a, s')) = ret x0x <- aT x;;; (let (u, s') := x in ret (u, s')) = aT xsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T: Type
aT: StateT St T
x: Stforall x0 : T * St, (let (a, s') := x0 in ret (a, s')) = ret x0snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T: Type
aT: StateT St T
x: St
x0: (T * St)%type(let (a, s') := x0 in ret (a, s')) = ret x0reflexivity.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T: Type
aT: StateT St T
x: St
t: T
s: Stret (t, s) = ret (t, s)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T: Type
aT: StateT St T
x: St
H: forall x0 : T * St, (let (a, s') := x0 in ret (a, s')) = ret x0x <- aT x;;; (let (u, s') := x in ret (u, s')) = aT xapply right_identity_prf.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T: Type
aT: StateT St T
x: St
H: forall x0 : T * St, (let (a, s') := x0 in ret (a, s')) = ret x0x <- aT x;;; ret x = aT xsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St: Typeforall (T U V : Type) (m0 : StateT St T) (g : T -> StateT St U) (h : U -> StateT St V), (fun s : St => x <- (x <- m0 s;;; (let (u, s') := x in g u s'));;; (let (u, s') := x in h u s')) = m0 >=>' (fun x : T * St => let (u, s') := x in x0 <- g u s';;; (let (u0, s'0) := x0 in h u0 s'0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T, U, V: Type
m0: StateT St T
g: T -> StateT St U
h: U -> StateT St V(fun s : St => x <- (x <- m0 s;;; (let (u, s') := x in g u s'));;; (let (u, s') := x in h u s')) = m0 >=>' (fun x : T * St => let (u, s') := x in x0 <- g u s';;; (let (u0, s'0) := x0 in h u0 s'0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T, U, V: Type
m0: StateT St T
g: T -> StateT St U
h: U -> StateT St Vforall x : St, x0 <- (x0 <- m0 x;;; (let (u, s') := x0 in g u s'));;; (let (u, s') := x0 in h u s') = x0 <- m0 x;;; (let (u, s') := x0 in x1 <- g u s';;; (let (u0, s'0) := x1 in h u0 s'0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T, U, V: Type
m0: StateT St T
g: T -> StateT St U
h: U -> StateT St V
x: Stx <- (x <- m0 x;;; (let (u, s') := x in g u s'));;; (let (u, s') := x in h u s') = x <- m0 x;;; (let (u, s') := x in x0 <- g u s';;; (let (u0, s'0) := x0 in h u0 s'0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T, U, V: Type
m0: StateT St T
g: T -> StateT St U
h: U -> StateT St V
x: Stx <- m0 x;;; x0 <- (let (u, s') := x in g u s');;; (let (u, s') := x0 in h u s') = x <- m0 x;;; (let (u, s') := x in x0 <- g u s';;; (let (u0, s'0) := x0 in h u0 s'0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T, U, V: Type
m0: StateT St T
g: T -> StateT St U
h: U -> StateT St V
x: Stforall x0 : T * St, x1 <- (let (a, s') := x0 in g a s');;; (let (a, s') := x1 in h a s') = (let (a, s') := x0 in x1 <- g a s';;; (let (a0, s'0) := x1 in h a0 s'0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T, U, V: Type
m0: StateT St T
g: T -> StateT St U
h: U -> StateT St V
x: St
H: forall x0 : T * St, x1 <- (let (a, s') := x0 in g a s');;; (let (a, s') := x1 : U * St in h a s') = (let (a, s') := x0 in x1 <- g a s';;; (let (a0, s'0) := x1 : U * St in h a0 s'0))x <- m0 x;;; x0 <- (let (u, s') := x in g u s');;; (let (u, s') := x0 in h u s') = x <- m0 x;;; (let (u, s') := x in x0 <- g u s';;; (let (u0, s'0) := x0 in h u0 s'0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T, U, V: Type
m0: StateT St T
g: T -> StateT St U
h: U -> StateT St V
x: Stforall x0 : T * St, x1 <- (let (a, s') := x0 in g a s');;; (let (a, s') := x1 in h a s') = (let (a, s') := x0 in x1 <- g a s';;; (let (a0, s'0) := x1 in h a0 s'0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T, U, V: Type
m0: StateT St T
g: T -> StateT St U
h: U -> StateT St V
x: St
x0: (T * St)%typex1 <- (let (a, s') := x0 in g a s');;; (let (a, s') := x1 in h a s') = (let (a, s') := x0 in x1 <- g a s';;; (let (a0, s'0) := x1 in h a0 s'0))reflexivity.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T, U, V: Type
m0: StateT St T
g: T -> StateT St U
h: U -> StateT St V
x: St
t: T
s: Stx1 <- g t s;;; (let (a, s') := x1 in h a s') = x1 <- g t s;;; (let (a0, s'0) := x1 in h a0 s'0)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T, U, V: Type
m0: StateT St T
g: T -> StateT St U
h: U -> StateT St V
x: St
H: forall x0 : T * St, x1 <- (let (a, s') := x0 in g a s');;; (let (a, s') := x1 : U * St in h a s') = (let (a, s') := x0 in x1 <- g a s';;; (let (a0, s'0) := x1 : U * St in h a0 s'0))x <- m0 x;;; x0 <- (let (u, s') := x in g u s');;; (let (u, s') := x0 in h u s') = x <- m0 x;;; (let (u, s') := x in x0 <- g u s';;; (let (u0, s'0) := x0 in h u0 s'0))reflexivity. Defined. Instance MonadState_StateT (St : Type) : MonadState St (StateT St) := { get' := (fun s => ret (s, s)); put (newState : St) := (fun _ => ret (tt, newState)) }. End StateTransformerMonad. Definition maybeStateT (St : Type) := StateT Maybe St. Instance Monad_MaybeStateT (St : Type) : Monad (maybeStateT St) := Monad_StateT Maybe _ St. Instance MonadState_MaybeStateT (St : Type) : MonadState St (maybeStateT St) := MonadState_StateT Maybe _ St. Definition pop' : Stack -> Maybe (nat * Stack) := fun (s : Stack) => match s with [] => None' | (x :: xs) => Some' (x, xs) end. Definition pop'TypeExample : StateT Maybe Stack nat := pop'. Definition push' (n : nat) : StateT Maybe Stack unit := fun (s : Stack) => Some' (tt, n :: s). Definition push'TypeExample : nat -> Stack -> Maybe (unit * Stack) := push'. Definition plusStack : maybeStateT Stack nat := a <- pop' ;;; b <- pop' ;;; ret (a + b).snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
m: Type -> Type
M: Monad m
St, T, U, V: Type
m0: StateT St T
g: T -> StateT St U
h: U -> StateT St V
x: St
H: forall x0 : T * St, x1 <- (let (a, s') := x0 in g a s');;; (let (a, s') := x1 : U * St in h a s') = (let (a, s') := x0 in x1 <- g a s';;; (let (a0, s'0) := x1 : U * St in h a0 s'0))x <- m0 x;;; (let (a, s') := x in x1 <- g a s';;; (let (a0, s'0) := x1 in h a0 s'0)) = x <- m0 x;;; (let (u, s') := x in x0 <- g u s';;; (let (u0, s'0) := x0 in h u0 s'0))Definition plus3Stack : maybeStateT Stack nat := a <- pop' ;;; b <- pop' ;;; c <- pop' ;;; ret (a + b + c). Definition plus3Stack' : maybeStateT Stack nat := r <- plusStack ;;; push' r ;;; r2 <- plusStack ;;; ret r2.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memplus3Stack = plus3Stack'snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memplus3Stack = plus3Stack'snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall x : Stack, plus3Stack x = plus3Stack' xsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
x: Stackplus3Stack x = plus3Stack' xsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
x: Stack(a <- pop';;; b <- pop';;; c <- pop';;; ret (a + b + c)) x = (r <- (a <- pop';;; b <- pop';;; ret (a + b));;; _ <- push' r;;; r2 <- (a <- pop';;; b <- pop';;; ret (a + b));;; ret r2) xsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem(a <- pop';;; b <- pop';;; c <- pop';;; ret (a + b + c)) [] = (r <- (a <- pop';;; b <- pop';;; ret (a + b));;; _ <- push' r;;; r2 <- (a <- pop';;; b <- pop';;; ret (a + b));;; ret r2) []snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
n: nat
x: list nat(a <- pop';;; b <- pop';;; c <- pop';;; ret (a + b + c)) (n :: x) = (r <- (a <- pop';;; b <- pop';;; ret (a + b));;; _ <- push' r;;; r2 <- (a <- pop';;; b <- pop';;; ret (a + b));;; ret r2) (n :: x)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem(a <- pop';;; b <- pop';;; c <- pop';;; ret (a + b + c)) [] = (r <- (a <- pop';;; b <- pop';;; ret (a + b));;; _ <- push' r;;; r2 <- (a <- pop';;; b <- pop';;; ret (a + b));;; ret r2) []reflexivity.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memNone' = None'snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
n: nat
x: list nat(a <- pop';;; b <- pop';;; c <- pop';;; ret (a + b + c)) (n :: x) = (r <- (a <- pop';;; b <- pop';;; ret (a + b));;; _ <- push' r;;; r2 <- (a <- pop';;; b <- pop';;; ret (a + b));;; ret r2) (n :: x)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
n: nat(a <- pop';;; b <- pop';;; c <- pop';;; ret (a + b + c)) [n] = (r <- (a <- pop';;; b <- pop';;; ret (a + b));;; _ <- push' r;;; r2 <- (a <- pop';;; b <- pop';;; ret (a + b));;; ret r2) [n]snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
n, n0: nat
x: list nat(a <- pop';;; b <- pop';;; c <- pop';;; ret (a + b + c)) (n :: n0 :: x) = (r <- (a <- pop';;; b <- pop';;; ret (a + b));;; _ <- push' r;;; r2 <- (a <- pop';;; b <- pop';;; ret (a + b));;; ret r2) (n :: n0 :: x)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
n: nat(a <- pop';;; b <- pop';;; c <- pop';;; ret (a + b + c)) [n] = (r <- (a <- pop';;; b <- pop';;; ret (a + b));;; _ <- push' r;;; r2 <- (a <- pop';;; b <- pop';;; ret (a + b));;; ret r2) [n]reflexivity.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
n: natNone' = None'snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
n, n0: nat
x: list nat(a <- pop';;; b <- pop';;; c <- pop';;; ret (a + b + c)) (n :: n0 :: x) = (r <- (a <- pop';;; b <- pop';;; ret (a + b));;; _ <- push' r;;; r2 <- (a <- pop';;; b <- pop';;; ret (a + b));;; ret r2) (n :: n0 :: x)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
n, n0: nat(a <- pop';;; b <- pop';;; c <- pop';;; ret (a + b + c)) [n; n0] = (r <- (a <- pop';;; b <- pop';;; ret (a + b));;; _ <- push' r;;; r2 <- (a <- pop';;; b <- pop';;; ret (a + b));;; ret r2) [n; n0]snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
n, n0, n1: nat
x: list nat(a <- pop';;; b <- pop';;; c <- pop';;; ret (a + b + c)) (n :: n0 :: n1 :: x) = (r <- (a <- pop';;; b <- pop';;; ret (a + b));;; _ <- push' r;;; r2 <- (a <- pop';;; b <- pop';;; ret (a + b));;; ret r2) (n :: n0 :: n1 :: x)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
n, n0: nat(a <- pop';;; b <- pop';;; c <- pop';;; ret (a + b + c)) [n; n0] = (r <- (a <- pop';;; b <- pop';;; ret (a + b));;; _ <- push' r;;; r2 <- (a <- pop';;; b <- pop';;; ret (a + b));;; ret r2) [n; n0]reflexivity.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
n, n0: natNone' = None'snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
n, n0, n1: nat
x: list nat(a <- pop';;; b <- pop';;; c <- pop';;; ret (a + b + c)) (n :: n0 :: n1 :: x) = (r <- (a <- pop';;; b <- pop';;; ret (a + b));;; _ <- push' r;;; r2 <- (a <- pop';;; b <- pop';;; ret (a + b));;; ret r2) (n :: n0 :: n1 :: x)reflexivity. Qed. Record rental_property_storage_type := { landlord : nat; tenant : nat }. Definition update_tenant tenant r := {| landlord := landlord r; tenant := tenant |}. Definition update_landlord landlord r := {| landlord := landlord; tenant := tenant r |}. Record mini_machine_environment := { caller' : nat; callvalue' : nat }. Open Scope nat.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
n, n0, n1: nat
x: list natSome' (n + n0 + n1, x) = Some' (n + n0 + n1, x)Definition DS := StateT Maybe rental_property_storage_type. Definition gets' {A : Type} f : DS A := a <- get' ;;; ret (f a). Definition puts f : DS unit := a <- get' ;;; put (f a). Definition fail {A : Type} : DS A := fun (s : rental_property_storage_type) => None'.

It's great to be here...
The talks are about 45 minutes long, including question time.
Also: a unique opportunity to collectively interact with a networked piece of software that we can verify, thanks to immutability.

DeepSEA, Edsger, OCaml, Coq, Verified compilation, Trusted code base.
Record rental_property_storage_type := { landlord : nat; tenant : nat }. Definition DS := StateT Maybe rental_property_storage_type. Definition StateT `{Monad m} (St : Type) (A : Type) := St -> m (A * St).
Definition setTenant (tenant : nat) (callInfo : mini_machine_environment) : DS unit := landlord <- gets' landlord;;; if (landlord =? (caller' callInfo)) then puts (update_tenant tenant) else ret tt (* return unit *). Definition getTenant (callInfo : mini_machine_environment) : DS nat := tenant <- gets' tenant;;; ret tenant. Definition changeLandlord (new_landlord : nat) (callInfo : mini_machine_environment) : DS unit := landlord <- gets' landlord;;; if (landlord =? (caller' callInfo)) then puts (update_landlord new_landlord) else fail.
snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (newTenant : nat) (callInfo : mini_machine_environment) (stOld : rental_property_storage_type) (result : unit) (stNew : rental_property_storage_type), setTenant newTenant callInfo stOld = Some' (result, stNew) /\ tenant stNew <> tenant stOld -> caller' callInfo = landlord stOldsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, (0 <= snapshot_balances a < Int256.modulus)%Z
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (newTenant : nat) (callInfo : mini_machine_environment) (stOld : rental_property_storage_type) (result : unit) (stNew : rental_property_storage_type), setTenant newTenant callInfo stOld = Some' (result, stNew) /\ tenant stNew <> tenant stOld -> caller' callInfo = landlord stOldnewTenant: nat
callInfo: mini_machine_environment
stOld: rental_property_storage_type
result: unit
stNew: rental_property_storage_type
H: setTenant newTenant callInfo stOld = Some' (result, stNew) /\ tenant stNew <> tenant stOldcaller' callInfo = landlord stOldnewTenant: nat
callInfo: mini_machine_environment
stOld: rental_property_storage_type
result: unit
stNew: rental_property_storage_type
H: setTenant newTenant callInfo stOld = Some' (result, stNew)
H0: tenant stNew <> tenant stOldcaller' callInfo = landlord stOldnewTenant: nat
callInfo: mini_machine_environment
stOld: rental_property_storage_type
result: unit
stNew: rental_property_storage_type
H: (landlord <- gets' landlord;;; (if landlord =? caller' callInfo then puts (update_tenant newTenant) else ret tt)) stOld = Some' (result, stNew)
H0: tenant stNew <> tenant stOldcaller' callInfo = landlord stOldnewTenant: nat
callInfo: mini_machine_environment
stOld: rental_property_storage_type
result: unit
stNew: rental_property_storage_type
H: (if landlord stOld =? caller' callInfo then puts (update_tenant newTenant) else fun s : rental_property_storage_type => Some' (tt, s)) stOld = Some' (result, stNew)
H0: tenant stNew <> tenant stOldcaller' callInfo = landlord stOldnewTenant: nat
callInfo: mini_machine_environment
stOld: rental_property_storage_type
result: unit
stNew: rental_property_storage_type
Case: (landlord stOld =? caller' callInfo) = true
H: puts (update_tenant newTenant) stOld = Some' (result, stNew)
H0: tenant stNew <> tenant stOldcaller' callInfo = landlord stOldnewTenant: nat
callInfo: mini_machine_environment
stOld: rental_property_storage_type
result: unit
stNew: rental_property_storage_type
Case: (landlord stOld =? caller' callInfo) = false
H: Some' (tt, stOld) = Some' (result, stNew)
H0: tenant stNew <> tenant stOldcaller' callInfo = landlord stOldnewTenant: nat
callInfo: mini_machine_environment
stOld: rental_property_storage_type
result: unit
stNew: rental_property_storage_type
Case: (landlord stOld =? caller' callInfo) = true
H: puts (update_tenant newTenant) stOld = Some' (result, stNew)
H0: tenant stNew <> tenant stOldcaller' callInfo = landlord stOldnewTenant: nat
callInfo: mini_machine_environment
stOld: rental_property_storage_type
result: unit
stNew: rental_property_storage_type
Case: landlord stOld = caller' callInfo
H: puts (update_tenant newTenant) stOld = Some' (result, stNew)
H0: tenant stNew <> tenant stOldcaller' callInfo = landlord stOldauto.callInfo: mini_machine_environment
stOld: rental_property_storage_type
Case: landlord stOld = caller' callInfocaller' callInfo = landlord stOldnewTenant: nat
callInfo: mini_machine_environment
stOld: rental_property_storage_type
result: unit
stNew: rental_property_storage_type
Case: (landlord stOld =? caller' callInfo) = false
H: Some' (tt, stOld) = Some' (result, stNew)
H0: tenant stNew <> tenant stOldcaller' callInfo = landlord stOldnewTenant: nat
callInfo: mini_machine_environment
stOld: rental_property_storage_type
result: unit
stNew: rental_property_storage_type
Case: (landlord stOld =? caller' callInfo) = false
H: Some' (tt, stOld) = Some' (result, stNew)
H0: tenant stNew <> tenant stOld
H2: tt = result
H3: stOld = stNewcaller' callInfo = landlord stNewcontradiction. Qed.newTenant: nat
callInfo: mini_machine_environment
stNew: rental_property_storage_type
H0: tenant stNew <> tenant stNew
H: Some' (tt, stNew) = Some' (tt, stNew)
Case: (landlord stNew =? caller' callInfo) = falsecaller' callInfo = landlord stNew

type addr := uint type message := int const _deadlinePassed_msg = 0 const _successfullyDonated_msg = 1 const _alreadyDonated_msg = 2 const _funded_msg = 3 const _failed_msg = 4 const _too_early_to_claim_funds_msg = 5 const _too_early_to_reclaim_msg = 6 const _cannot_refund_msg = 7 const _here_is_your_money_msg = 8 const _only_owner_can_get_funds_msg = 9 event | Message (msg : message) object signature CrowdfundingSig = { donate : unit -> unit; getFunds : unit -> unit; claim: unit -> unit } object Crowdfunding () : CrowdfundingSig { let owner : address := address(0x9Be6210aD2EB7D510C7dBC7eA0C91e4591a9f813) let max_block : uint := 0u140 (* The last block number when donations are accepted. *) let goal : int := 50 let backers : mapping[address] int := mapping_init let funded : bool := false let deadlinePassed_msg : message := 0 let successfullyDonated_msg : message := 1 let alreadyDonated_msg : message := 2 let funded_msg : message := 3 let failed_msg : message := 4 let too_early_to_claim_funds_msg : message := 5 let too_early_to_reclaim_msg : message := 6 let cannot_refund_msg : message := 7 let here_is_your_money_msg : message := 8 let donate () = assert(msg_sender <> this_address); assert(msg_value >= 0); let bs = backers in let blk = block_number in let _max_block = max_block in if (blk > _max_block) then begin (* Do not accept funds *) emit Message(_deadlinePassed_msg); assert(false) end else begin let backed_amount = backers[msg_sender] in if (backed_amount = 0) then backers[msg_sender] := msg_value else begin (* Do not accept funds *) emit Message(_alreadyDonated_msg); assert(false) end end let getFunds () = assert(msg_sender <> this_address); assert(msg_value = 0); let _owner = owner in if (msg_sender = _owner) then begin let blk = block_number in let bal = balance(this_address) in let _max_block = max_block in if (blk > _max_block) then let _goal = goal in if (_goal <= bal) then begin funded := true; (* Send all funds to owner *) emit Message(_funded_msg); transferEth(_owner, bal) end else (* Funding campaign failed, do not send funds to owner *) emit Message(_failed_msg) else (* Too early to claim funds, do not send funds to owner. *) emit Message(_too_early_to_claim_funds_msg) end else emit Message(_only_owner_can_get_funds_msg) let claim() = assert(msg_sender <> this_address); assert(msg_value = 0); let blk = block_number in let _max_block = max_block in if (blk <= _max_block) then (* Too early to reclaim, do not send funds back. *) emit Message(_too_early_to_reclaim_msg) else let bal = balance(this_address) in let backed_amount = backers[msg_sender] in let _funded = funded in let _goal = goal in if (backed_amount = 0 \/ _funded \/ _goal <= bal) then (* Didn't back or campaign was successful so can't refund. *) emit Message(_cannot_refund_msg) else begin (* Can refund, send funds back *) backers[msg_sender] := 0; emit Message(_here_is_your_money_msg); transferEth(msg_sender, backed_amount) end } layer CONTRACT : [ { } ] {crowdfunding : CrowdfundingSig} = { crowdfunding = Crowdfunding }
$ dsc Crowdfunding.ds bytecode 5b60005b60206109205101610920525b61022660006020610920510301525b60006020 5b60005b60206109205101610920525b61023260006020610920510301525b60006020 610920510301516101005260206101002060006020610920510301525b739be6210ad2 eb7d510c7dbc7ea0c91e4591a9f8136000602061092051030151555b61023160006020 610920510301525b600060206109205103015161010052602061010020600060206109 20510301525b608c6000602061092051030151555b6102306000602061092051030152 5b60006020610920510301516101005260206101002060006020610920510301525b60 326000602061092051030151555b61022f60006020610920510301525b600060206109 20510301516101005260206101002060006020610920510301525b6000600060206109 2051030151555b61022e60006020610920510301525b60006020610920510301516101 005260206101002060006020610920510301525b60006000602061092051030151555b 61022d60006020610920510301525b6000602061092051030151610100526020610100 2060006020610920510301525b60016000602061092051030151555b61022c60006020 610920510301525b600060206109205103015161010052602061010020600060206109 20510301525b60026000602061092051030151555b61022b6000602061092051030152 5b60006020610920510301516101005260206101002060006020610920510301525b60 036000602061092051030151555b61022a60006020610920510301525b600060206109 20510301516101005260206101002060006020610920510301525b6004600060206109 2051030151555b61022960006020610920510301525b60006020610920510301516101 005260206101002060006020610920510301525b60056000602061092051030151555b 61022860006020610920510301525b6000602061092051030151610100526020610100 2060006020610920510301525b60066000602061092051030151555b61022760006020 610920510301525b600060206109205103015161010052602061010020600060206109 20510301525b60076000602061092051030151555b6102266000602061092051030152 5b60006020610920510301516101005260206101002060006020610920510301525b60 086000602061092051030151555b60206109205103610920525b60005b905038630000 037a600039386000f35b60006000fd5b610940610920527c0100000000000000000000 000000000000000000000000000000000000600035048063ed88c68e14630000005657 80634d9b37351463000002ff5780634e71d92d14630000056f5760006000fd5b600060 0060005b60606109205101610920525b3033141592505b82630000007e57630000017e 565b600034101592505b82630000009457630000017e565b6102336040606061092051 0301525b60406060610920510301516101005260206101002060406060610920510301 525b60406060610920510301515490505b4391505b6102316040606061092051030152 5b60406060610920510301516101005260206101002060406060610920510301525b60 406060610920510301515492505b8282116300000126576300000184565b7fdb5c17b1 7041a00e40c40ddc3406875c8676803e3a2a50a47f7c56109b88465360006000526020 6000a15b600092505b82630000016557630000017e565b60606109205103610920525b 60005b9250505060006000f35b60006000fd5b61023360406060610920510301525b60 406060610920510301516101005260206101002060406060610920510301525b604060 606109205103015160206060610920510301525b3360006060610920510301525b6020 6060610920510301516101005260006060610920510301516101205260406101002060 206060610920510301525b60206060610920510301515492505b600083146300000228 5763000002c0565b61023360406060610920510301525b604060606109205103015161 01005260206101002060406060610920510301525b6040606061092051030151602060 60610920510301525b3360006060610920510301525b60206060610920510301516101 005260006060610920510301516101205260406101002060206060610920510301525b 346020606061092051030151556300000165565b7fdb5c17b17041a00e40c40ddc3406 875c8676803e3a2a50a47f7c56109b884653600260005260206000a15b600092505b82 630000016557630000017e565b60006000600060005b60206109205101610920525b30 33141592505b826300000329576300000569565b6000341492505b82630000033e5763 00000569565b61023260006020610920510301525b6000602061092051030151610100 5260206101002060006020610920510301525b60006020610920510301515490505b80 3314630000038d576300000537565b4391505b303192505b6102316000602061092051 0301525b60006020610920510301516101005260206101002060006020610920510301 525b60006020610920510301515493505b83821163000003e5576300000505565b6102 3060006020610920510301525b60006020610920510301516101005260206101002060 006020610920510301525b60006020610920510301515493505b828411156300000435 5763000004d3565b61022f60006020610920510301525b600060206109205103015161 01005260206101002060006020610920510301525b6001600060206109205103015155 5b7fdb5c17b17041a00e40c40ddc3406875c8676803e3a2a50a47f7c56109b88465360 0360005260206000a15b6000606052600060606004606086855af1156300000569575b 60206109205103610920525b60005b935050505060006000f35b7fdb5c17b17041a00e 40c40ddc3406875c8676803e3a2a50a47f7c56109b884653600460005260206000a163 000004b9565b7fdb5c17b17041a00e40c40ddc3406875c8676803e3a2a50a47f7c5610 9b884653600560005260206000a163000004b9565b7fdb5c17b17041a00e40c40ddc34 06875c8676803e3a2a50a47f7c56109b884653600960005260206000a163000004b956 5b60006000fd5b60006000600060005b60606109205101610920525b3033141590505b 806300000599576300000886565b6000341490505b8063000005ae576300000886565b 4390505b61023160406060610920510301525b60406060610920510301516101005260 206101002060406060610920510301525b60406060610920510301515492505b828111 156300000602576300000648565b7fdb5c17b17041a00e40c40ddc3406875c8676803e 3a2a50a47f7c56109b884653600660005260206000a15b60606109205103610920525b 60005b935050505060006000f35b303190505b61023360406060610920510301525b60 406060610920510301516101005260206101002060406060610920510301525b604060 606109205103015160206060610920510301525b3360006060610920510301525b6020 6060610920510301516101005260006060610920510301516101205260406101002060 206060610920510301525b60206060610920510301515491505b61022f604060606109 20510301525b6040606061092051030151610100526020610100206040606061092051 0301525b60406060610920510301515492505b61023060406060610920510301525b60 406060610920510301516101005260206101002060406060610920510301525b604060 60610920510301515493505b808411158317600083141763000007765763000007a856 5b7fdb5c17b17041a00e40c40ddc3406875c8676803e3a2a50a47f7c56109b88465360 0760005260206000a1630000062e565b61023360406060610920510301525b60406060 610920510301516101005260206101002060406060610920510301525b604060606109 205103015160206060610920510301525b3360006060610920510301525b6020606061 0920510301516101005260006060610920510301516101205260406101002060206060 610920510301525b60006020606061092051030151555b7fdb5c17b17041a00e40c40d dc3406875c8676803e3a2a50a47f7c56109b884653600860005260206000a15b600060 6052600060606004606085335af115630000088657630000062e565b60006000fd
$ dsc Crowdfunding.ds abi
[ {"type":"constructor", "name":"constructor", "inputs":[], "outputs":[], "payable":false, "constant":false, "stateMutability":"nonpayable"}, {"type":"function", "name":"donate", "inputs":[], "outputs":[], "payable":true, "constant":false, "stateMutability":"payable"}, {"type":"function", "name":"getFunds", "inputs":[], "outputs":[], "payable":true, "constant":false, "stateMutability":"payable"}, {"type":"function", "name":"claim", "inputs":[], "outputs":[], "payable":true, "constant":false, "stateMutability":"payable"}, {"type":"event", "name":"Message", "inputs":[{"name":"msg", "type":"uint256", "internalType": "uint256", "indexed": false}]}]
Lemma donation_preserved : forall (backer_address : addr) (amount : Z) (start final : BlockchainState) helper (trace : list Step), (* Step is a pair: state and a valid action *) ReachableFromBy start final helper trace -> donation_recorded backer_address amount start -> (forall intermediate, List.In intermediate trace -> no_claims_from backer_address intermediate) -> donation_recorded backer_address amount final.
Alternatively:
Notation "Q `since` P `as-long-as` R" := (since_as_long P Q R) (at level 1). Definition since_as_long (P : BlockchainState -> Prop) (Q : BlockchainState -> Prop) (R : Step -> Prop) := forall start final helper trace, ReachableFromBy start final helper trace -> P start -> (forall intermediate, List.In intermediate trace -> R intermediate) -> Q final.
Definition balance_backed state := (Crowdfunding_funded (contract_state state)) = false -> sum (Crowdfunding_backers (contract_state state)) <= (balance state contract_address) /\ ... . (* Safety property predicate *) Definition Safe P := forall state helper trace, ReachableFromBy initial_state state helper trace -> P state.
Lemma can_claim_back : forall state helper trace backer_addr backed_amount, ReachableFromBy initial_state state helper trace -> backed_amount = Int256Tree.get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) -> (* Backer is not the contract itself *) contract_address <> backer_addr -> (* Backed nonzero *) backed_amount > 0 -> (* Backer is not so rich that receiving their refund would cause their balance to overflow. *) (balance state backer_addr + backed_amount <? Int256.modulus) = true -> (* Not funded *) Crowdfunding_funded (contract_state state) = false -> (* Balance is small: not reached the goal *) balance state contract_address < (Crowdfunding_goal (contract_state state)) -> (* Balances start in a legitimate range*) (forall a : addr, 0 <= balance state a < Int256.modulus) -> (* Block number exceeds the set number *) Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true -> (* Can emit message from b *) exists (action : Action state), Outgoing_transfer_recipient_and_amount (contract_state (step_keep_transfer state action)) = Some (backer_addr, backed_amount) /\ (* The following represents the idea that the action must not merely be some action by anyone, but it must be one do-able by the caller. And that the caller can get their funds back without giving away more funds, hence the callvalue must be zero. *) match action with | call_Crowdfunding_donate context _ _ _ _ _ _ => callvalue context = 0 /\ caller context = backer_addr | call_Crowdfunding_getFunds context _ _ _ _ _ _ => callvalue context = 0 /\ caller context = backer_addr | call_Crowdfunding_claim context _ _ _ _ _ _ => callvalue context = 0 /\ caller context = backer_addr | _ => False end.
snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (a : addr) (d : Z), (donation_recorded a d) `since` donation_recorded a d `as-long-as` (no_claims_from a)(* Proof of a temporal property. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (a : addr) (d : Z), (donation_recorded a d) `since` donation_recorded a d `as-long-as` (no_claims_from a)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (a : addr) (d : Z) (schedule : list Step) (st st' : BlockchainState) (step' : Step), ReachableFromBy st st' step' schedule -> donation_recorded a d st -> (forall sa : Step, In sa schedule -> no_claims_from a sa) -> donation_recorded a d st'snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
schedule: list Step
st, st': BlockchainState
step': Step
H: ReachableFromBy st st' step' schedule
H0: donation_recorded a d st
H1: forall sa : Step, In sa schedule -> no_claims_from a sadonation_recorded a d st'snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H0: donation_recorded a d st
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
IHReachableFromBy: (forall sa : Step, In sa prevList -> no_claims_from a sa) -> donation_recorded a d prevStdonation_recorded a d (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H0: donation_recorded a d st
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
IHReachableFromBy: (forall sa : Step, In sa prevList -> no_claims_from a sa) -> donation_recorded a d prevSt
H2: donation_recorded a d prevStdonation_recorded a d (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H2: donation_recorded a d prevStdonation_recorded a d (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H2: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d /\ d > 0get_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = d /\ d > 0snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0get_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = d /\ d > 0snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0get_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state prev
HL: exists tl : list Step, prev :: tl = prevListget_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy st prevSt prev prevList
next_action: Action (stepOnce prev)
H1: forall sa : Step, In sa (stepOnceAndWrap prev next_action :: prevList) -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state prev
HL: exists tl : list Step, prev :: tl = prevList
H3: no_claims_from a prevget_default 0 a (Crowdfunding_backers (contract_state (stepOnce prev))) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
Step_action0: Action Step_state0
prevList: list Step
H: ReachableFromBy st prevSt {| Step_state := Step_state0; Step_action := Step_action0 |} prevList
next_action: Action ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) Step_state0 Step_action0)
H1: forall sa : Step, {| Step_state := (fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) Step_state0 Step_action0; Step_action := next_action |} = sa \/ In sa prevList -> no_claims_from a sa
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
HL: exists tl : list Step, {| Step_state := Step_state0; Step_action := Step_action0 |} :: tl = prevList
H3: no_claims_from a {| Step_state := Step_state0; Step_action := Step_action0 |}get_default 0 a (Crowdfunding_backers (contract_state ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) Step_state0 Step_action0))) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
Step_action0: Action Step_state0
prevList: list Step
next_action: Action ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) Step_state0 Step_action0)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: no_claims_from a {| Step_state := Step_state0; Step_action := Step_action0 |}get_default 0 a (Crowdfunding_backers (contract_state ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) Step_state0 Step_action0))) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
Step_action0: Action Step_state0
prevList: list Step
next_action: Action ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) Step_state0 Step_action0)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: match Step_action {| Step_state := Step_state0; Step_action := Step_action0 |} with | @call_Crowdfunding_claim _ _ _ _ _ _ _ _ => False | _ => True endget_default 0 a (Crowdfunding_backers (contract_state ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) Step_state0 Step_action0))) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
Step_action0: Action Step_state0
prevList: list Step
next_action: Action ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) Step_state0 Step_action0)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: match Step_action {| Step_state := Step_state0; Step_action := Step_action0 |} with | @call_Crowdfunding_claim _ _ _ _ _ _ _ _ => False | _ => True endget_default 0 a (Crowdfunding_backers (contract_state ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) Step_state0 Step_action0))) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Falseget_default 0 a (Crowdfunding_backers contract_state_after) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_donate_prf: runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0);; guard v);; gets Crowdfunding_backers;; spec2 <- Monad.ret (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- gets Crowdfunding_max_block;; (if Int256.ltu spec3 spec2 then Monad.ret tt;; v <- Monad.ret false;; guard v else spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; (if (spec4 =? 0)%Z then MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s)) s) else Monad.ret tt;; v <- Monad.ret false;; guard v))) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = trueget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = true
Case: (a =? caller context) = trueget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = true
Case: (a =? caller context) = falseget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = true
Case: (a =? caller context) = trueget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = true
Case: a = caller contextget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = true
Case: a = caller contextget_default 0 a (set a (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = true
Case: a = caller contextcallvalue context = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = true
Case: a = caller contextFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 (caller context) (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 (caller context) (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (caller context =? contract_address) = true
a2: unit
H8: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (block_number Step_state0) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 (caller context) (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (caller context =? contract_address) = true
a2: unit
H8: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (block_number Step_state0) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state Step_state0)) = 0Falselia.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: 0 > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (caller context =? contract_address) = true
a2: unit
H8: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (block_number Step_state0) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state Step_state0)) = 0Falsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = true
Case: (a =? caller context) = falseget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))apply get_default_so; assumption.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
st, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
prevList: list Step
H2: get_default 0 a (Crowdfunding_backers (contract_state Step_state0)) > 0
next_action: Action (next_blockchain_state Step_state0 context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0))) (contract_state Step_state0)))
H3: True
a0: unit
H4: negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
a2: unit
H8: (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state Step_state0)) (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state Step_state0)) =? 0)%Z = true
Case: a <> caller contextget_default 0 a (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state Step_state0))) = get_default 0 a (Crowdfunding_backers (contract_state Step_state0))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = dsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = dds_inv; subst; reflexivity.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0)%Z;; guard v);; spec1 <- gets Crowdfunding_owner;; (if me_caller (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? spec1 then spec2 <- Monad.ret (me_number (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- Monad.ret (me_balance (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets Crowdfunding_max_block;; (if Int256.ltu spec4 spec2 then spec5 <- gets Crowdfunding_goal;; (if spec5 <=? spec3 then MonadState.modify (update_Crowdfunding_funded true);; Monad.ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (...) spec1 spec3 d in if success =? Int256.one then MonadState.put d' else mzero) else Monad.ret tt) else Monad.ret tt) else Monad.ret tt)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Trueget_default 0 a (Crowdfunding_backers contract_state_after) = dcontradiction. Qed.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
a: addr
d: Z
st, prevSt, Step_state0: BlockchainState
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance Step_state0 a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance Step_state0) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address Step_state0 context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state Step_state0) = Some (r, contract_state_after)
prevList: list Step
next_action: Action (next_blockchain_state prevSt context contract_state_after)
H0: get_default 0 a (Crowdfunding_backers (contract_state prevSt)) = d
H2: d > 0
HS: prevSt = Step_state0
H3: Falseget_default 0 a (Crowdfunding_backers contract_state_after) = d
snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memSafe balance_backedsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memSafe balance_backedsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed statesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
H: ReachableFromBy initial_state state s lbalance_backed statesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_statebalance_backed initial_statesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state prevSt prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed prevStbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_statebalance_backed initial_statesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_stateCrowdfunding_funded (contract_state {| timestamp := snapshot_timestamp; block_number := snapshot_number; balance := snapshot_balances; blockhash := snapshot_blockhash; contract_state := init_global_abstract_data |}) = false -> sum (Crowdfunding_backers (contract_state {| timestamp := snapshot_timestamp; block_number := snapshot_number; balance := snapshot_balances; blockhash := snapshot_blockhash; contract_state := init_global_abstract_data |})) <= balance {| timestamp := snapshot_timestamp; block_number := snapshot_number; balance := snapshot_balances; blockhash := snapshot_blockhash; contract_state := init_global_abstract_data |} contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state {| timestamp := snapshot_timestamp; block_number := snapshot_number; balance := snapshot_balances; blockhash := snapshot_blockhash; contract_state := init_global_abstract_data |})) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_statefalse = false -> sum (empty Z32) <= snapshot_balances contract_address /\ (forall (key : elt) (value : Z32), get key (empty Z32) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = falsesum (empty Z32) <= snapshot_balances contract_address /\ (forall (key : elt) (value : Z32), get key (empty Z32) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = falsefold1 Z.add (empty Z32) 0 <= snapshot_balances contract_address /\ (forall (key : elt) (value : Z32), get key (empty Z32) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = falsefold1 Z.add (exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) (PTree.empty Z32) (fun (x : positive) (H : (PTree.empty Z32) ! x <> None) => Maps.Int256Tree.empty_obligation_1 x H)) 0 <= snapshot_balances contract_address /\ (forall (key : elt) (value : Z32), get key (exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) (PTree.empty Z32) (fun (x : positive) (H : (PTree.empty Z32) ! x <> None) => Maps.Int256Tree.empty_obligation_1 x H)) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = falsePTree.fold1 Z.add (proj1_sig (exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) (PTree.empty Z32) (fun (x : positive) (H : (PTree.empty Z32) ! x <> None) => Maps.Int256Tree.empty_obligation_1 x H))) 0 <= snapshot_balances contract_address /\ (forall (key : elt) (value : Z32), get key (exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) (PTree.empty Z32) (fun (x : positive) (H : (PTree.empty Z32) ! x <> None) => Maps.Int256Tree.empty_obligation_1 x H)) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = false0 <= snapshot_balances contract_address /\ (forall (key : elt) (value : Z32), get key (exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) (PTree.empty Z32) (fun (x : positive) (H : (PTree.empty Z32) ! x <> None) => Maps.Int256Tree.empty_obligation_1 x H)) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = false0 <= snapshot_balances contract_addresssnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = falseforall (key : elt) (value : Z32), get key (exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) (PTree.empty Z32) (fun (x : positive) (H : (PTree.empty Z32) ! x <> None) => Maps.Int256Tree.empty_obligation_1 x H)) = Some value -> value >= 0 /\ value < Int256.modulusapply snapshot_balances_valid_prf.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = false0 <= snapshot_balances contract_addresssnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = falseforall (key : elt) (value : Z32), get key (exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) (PTree.empty Z32) (fun (x : positive) (H : (PTree.empty Z32) ! x <> None) => Maps.Int256Tree.empty_obligation_1 x H)) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = falseforall (key : elt) (value : Z32), (proj1_sig (exist (fun tr : PTree.t Z32 => forall x : positive, tr ! x <> None -> Int256Indexed.index (Int256Indexed.index_inv x) = x) (PTree.empty Z32) (fun (x : positive) (H : (PTree.empty Z32) ! x <> None) => Maps.Int256Tree.empty_obligation_1 x H))) ! (Int256Indexed.index key) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = falseforall (key : elt) (value : Z32), (PTree.empty Z32) ! (Int256Indexed.index key) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = falseforall (key : elt) (value : Z32), PTree.Leaf ! (let (intval, _) := key in match intval with | 0%Z => 1 | Z.pos p => p~0 | Z.neg p => p~1 end) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = false
key: elt
value: Z32
H0: PTree.Leaf ! (let (intval, _) := key in match intval with | 0%Z => 1 | Z.pos p => p~0 | Z.neg p => p~1 end) = Some valuevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = false
intval: Z
intrange: -1 < intval < Int256.modulus
value: Z32
H0: PTree.Leaf ! match intval with | 0%Z => 1 | Z.pos p => p~0 | Z.neg p => p~1 end = Some valuevalue >= 0 /\ value < Int256.modulusdestruct intval; intros; discriminate.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
Hno_leftover_outgoings: Outgoing_transfer_recipient_and_amount (contract_state initial_state) = None
next_action: Action initial_state
H: false = false
intval: Z
intrange: -1 < intval < Int256.modulus
value: Z32
H0: PTree.Leaf ! match intval with | 0%Z => 1 | Z.pos p => p~0 | Z.neg p => p~1 end = Some valuevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state prevSt prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed prevStbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state prevSt prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed prevSt
HReachableFromByLinkStateToStep: prevSt = Step_state prev
HReachableFromByLinkStepToList: exists tl : list Step, prev :: tl = prevListbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
HReachableFromByLinkStateToStep: prevSt = Step_state prev
HReachableFromByLinkStepToList: exists tl : list Step, prev :: tl = prevListbalance_backed (stepOnce prev)(* unfold stepOnce in next_action. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)balance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_donate_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_getFunds (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_getFunds_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_claim (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_claim_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
prf: sender <> contract_address /\ amount >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
block_count, time_passing: int256
prf: validTimeChange block_count time_passing (block_number (Step_state prev)) (timestamp (Step_state prev)) = true
Case: Step_action prev = timePassing (Step_state prev) block_count time_passing prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
Case: Step_action prev = revert (Step_state prev)balance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_donate_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_donate_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_donate_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_donate_prfbalance_backed (stepOnce prev)(* destruct next_action. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_donate_prf: runStateT (Crowdfunding_donate_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_donate_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_donate_prf: runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0);; guard v);; gets Crowdfunding_backers;; spec2 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- gets Crowdfunding_max_block;; (if Int256.ltu spec3 spec2 then Monad.ret tt;; v <- Monad.ret false;; guard v else spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; (if spec4 =? 0 then MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s)) s) else Monad.ret tt;; v <- Monad.ret false;; guard v))) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_donate_prfbalance_backed (stepOnce prev)(* A way around the error: case_donate_prf is used in hypothesis Case. If using eqn:Case in the destruct *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_donate_prf: runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0);; guard v);; gets Crowdfunding_backers;; spec2 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- gets Crowdfunding_max_block;; (if Int256.ltu spec3 spec2 then Monad.ret tt;; v <- Monad.ret false;; guard v else spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; (if spec4 =? 0 then MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s)) s) else Monad.ret tt;; v <- Monad.ret false;; guard v))) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_donate_prf
case_donate_prf': runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0);; guard v);; gets Crowdfunding_backers;; spec2 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- gets Crowdfunding_max_block;; (if Int256.ltu spec3 spec2 then Monad.ret tt;; v <- Monad.ret false;; guard v else spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; (if spec4 =? 0 then MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s)) s) else Monad.ret tt;; v <- Monad.ret false;; guard v))) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0);; guard v);; gets Crowdfunding_backers;; spec2 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- gets Crowdfunding_max_block;; (if Int256.ltu spec3 spec2 then Monad.ret tt;; v <- Monad.ret false;; guard v else spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; (if spec4 =? 0 then MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s)) s) else Monad.ret tt;; v <- Monad.ret false;; guard v))) (contract_state (Step_state prev)) = Some (tt, update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0);; guard v);; gets Crowdfunding_backers;; spec2 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- gets Crowdfunding_max_block;; (if Int256.ltu spec3 spec2 then Monad.ret tt;; v <- Monad.ret false;; guard v else spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; (if spec4 =? 0 then MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s)) s) else Monad.ret tt;; v <- Monad.ret false;; guard v))) (contract_state (Step_state prev)) = Some (tt, update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0);; guard v);; gets Crowdfunding_backers;; spec2 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- gets Crowdfunding_max_block;; (if Int256.ltu spec3 spec2 then Monad.ret tt;; v <- Monad.ret false;; guard v else spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; (if spec4 =? 0 then MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s)) s) else Monad.ret tt;; v <- Monad.ret false;; guard v))) (contract_state (Step_state prev)) = Some (tt, update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed (step (Step_state prev) (Step_action prev))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0);; guard v);; gets Crowdfunding_backers;; spec2 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- gets Crowdfunding_max_block;; (if Int256.ltu spec3 spec2 then Monad.ret tt;; v <- Monad.ret false;; guard v else spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; (if spec4 =? 0 then MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s)) s) else Monad.ret tt;; v <- Monad.ret false;; guard v))) (contract_state (Step_state prev)) = Some (tt, update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) (Step_state prev) (Step_action prev))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0);; guard v);; gets Crowdfunding_backers;; spec2 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- gets Crowdfunding_max_block;; (if Int256.ltu spec3 spec2 then Monad.ret tt;; v <- Monad.ret false;; guard v else spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; (if spec4 =? 0 then MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s)) s) else Monad.ret tt;; v <- Monad.ret false;; guard v))) (contract_state (Step_state prev)) = Some (tt, update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed (next_blockchain_state (Step_state prev) context (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed (next_blockchain_state (Step_state prev) context (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := current_balances (Outgoing_transfer_recipient_and_amount (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := match Outgoing_transfer_recipient_and_amount (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) with | Some (recipient, amount) => update_balances contract_address recipient amount (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) | None => update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) end; blockhash := blockhash (Step_state prev); contract_state := resetTransfers (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := match Outgoing_transfer_recipient_and_amount (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) with | Some (recipient, amount) => fun a : addr => if (contract_address =? recipient)%int256 then if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a else if (a =? contract_address)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) - amount else if (a =? recipient)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) recipient else if (recipient =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (recipient =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) recipient) + amount else if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a | None => fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a end; blockhash := blockhash (Step_state prev); contract_state := resetTransfers (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := match Outgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)); Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} with | Some (recipient, amount) => fun a : addr => if (contract_address =? recipient)%int256 then if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a else if (a =? contract_address)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) - amount else if (a =? recipient)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) recipient else if (recipient =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (recipient =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) recipient) + amount else if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a | None => fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a end; blockhash := blockhash (Step_state prev); contract_state := resetTransfers {| Outgoing_transfer_recipient_and_amount := Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)); Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := match Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) with | Some (recipient, amount) => fun a : addr => if (contract_address =? recipient)%int256 then if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a else if (a =? contract_address)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) - amount else if (a =? recipient)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) recipient else if (recipient =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (recipient =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) recipient) + amount else if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a | None => fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a end; blockhash := blockhash (Step_state prev); contract_state := resetTransfers {| Outgoing_transfer_recipient_and_amount := Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)); Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a; blockhash := blockhash (Step_state prev); contract_state := resetTransfers {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a; blockhash := blockhash (Step_state prev); contract_state := {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_max_block := Crowdfunding_max_block {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_goal := Crowdfunding_goal {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_backers := Crowdfunding_backers {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_funded := Crowdfunding_funded {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_funded_msg := Crowdfunding_funded_msg {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_failed_msg := Crowdfunding_failed_msg {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |}; Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} |} |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = truebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a; blockhash := blockhash (Step_state prev); contract_state := {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = trueCrowdfunding_funded (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a; blockhash := blockhash (Step_state prev); contract_state := {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} |}) = false -> sum (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a; blockhash := blockhash (Step_state prev); contract_state := {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} |})) <= balance {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a; blockhash := blockhash (Step_state prev); contract_state := {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} |} contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := fun a : addr => if (caller context =? contract_address)%int256 then balance (Step_state prev) a else if (a =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (a =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) a; blockhash := blockhash (Step_state prev); contract_state := {| Outgoing_transfer_recipient_and_amount := None; Crowdfunding_owner := Crowdfunding_owner (contract_state (Step_state prev)); Crowdfunding_max_block := Crowdfunding_max_block (contract_state (Step_state prev)); Crowdfunding_goal := Crowdfunding_goal (contract_state (Step_state prev)); Crowdfunding_backers := set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (contract_state (Step_state prev)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state (Step_state prev)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state (Step_state prev)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state (Step_state prev)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state (Step_state prev)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state (Step_state prev)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state (Step_state prev)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state (Step_state prev)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state (Step_state prev)) |} |})) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = trueCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
Case: Step_action prev = call_Crowdfunding_donate (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf tt (update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) case_donate_prf
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_donate_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context >=? 0)) s with | Some (_, s0) => runStateT (if Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev)) then {| runStateT := fun _ : global_abstract_data_type => None |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if get_default 0 (caller context) (Crowdfunding_backers s1) =? 0 then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, update_Crowdfunding_backers (set (...) (...) (...)) s2) |} else {| runStateT := fun _ : global_abstract_data_type => None |}) s1 |}) s0 | None => None end | None => None end = Some (tt, update_Crowdfunding_backers (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus(* Search "=?" true. Search int256 false. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus(* Search ( _ =? _)%int256. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else balance (Step_state prev) contract_address + callvalue context)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (caller context =? contract_address)%int256 then balance (Step_state prev) (caller context) - callvalue context else balance (Step_state prev) contract_address + callvalue context)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus(* apply Int256eq_false in H2. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) <= balance (Step_state prev) contract_address + callvalue contextsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus(* Search Int256.unsigned. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) + callvalue context <= balance (Step_state prev) contract_address + callvalue contextsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: (0 <=? callvalue context) && (callvalue context <? Int256.modulus) && (balance (Step_state prev) (caller context) - callvalue context >=? 0) && (balance (Step_state prev) contract_address + callvalue context <? Int256.modulus) = true
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) + callvalue context <= balance (Step_state prev) contract_address + callvalue contextsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: (0 <=? callvalue context) && (callvalue context <? Int256.modulus) && (balance (Step_state prev) (caller context) - callvalue context >=? 0) && (balance (Step_state prev) contract_address + callvalue context <? Int256.modulus) = true
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulussum (Crowdfunding_backers (contract_state (Step_state prev))) + callvalue context <= balance (Step_state prev) contract_address + callvalue contextsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: (0 <=? callvalue context) && (callvalue context <? Int256.modulus) && (balance (Step_state prev) (caller context) - callvalue context >=? 0) && (balance (Step_state prev) contract_address + callvalue context <? Int256.modulus) = true
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) = 0
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulussum (Crowdfunding_backers (contract_state (Step_state prev))) + callvalue context <= balance (Step_state prev) contract_address + callvalue contextsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulusforall (key : elt) (value : Z32), get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some valuevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = truevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = falsevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: key = caller contextvalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = falsevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get (caller context) (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: key = caller contextvalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = falsevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: Some (callvalue context) = Some value
SSCase: key = caller contextvalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = falsevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: Some (callvalue context) = Some value
SSCase: key = caller context
H5: callvalue context = valuecallvalue context >= 0 /\ callvalue context < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = falsevalue >= 0 /\ value < Int256.moduluscontext: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.moduluscallvalue context >= 0 /\ callvalue context < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = falsevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = falsevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (set (caller context) (callvalue context) (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: key <> caller contextvalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value
SSCase: key <> caller contextvalue >= 0 /\ value < Int256.modulusassumption.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context >=? 0) = true
Heqb: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) = true
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H1: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H3: value >= 0 /\ value < Int256.modulus
SSCase: key <> caller contextvalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_getFunds (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_getFunds_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_getFunds (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_getFunds_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_getFunds (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_getFunds_prf
case_getFunds_prf': runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_getFunds (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_getFunds_prf
case_getFunds_prf': runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- gets Crowdfunding_owner;; (if (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? spec1)%int256 then spec2 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- Monad.ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets Crowdfunding_max_block;; (if Int256.ltu spec4 spec2 then spec5 <- gets Crowdfunding_goal;; (if spec5 <=? spec3 then MonadState.modify (update_Crowdfunding_funded true);; Monad.ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (...) spec1 spec3 d in if (...)%int256 then MonadState.put d' else mzero) else Monad.ret tt) else Monad.ret tt) else Monad.ret tt)) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_getFunds (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_getFunds_prf
case_getFunds_prf': runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- gets Crowdfunding_owner;; (if (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? spec1)%int256 then spec2 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- Monad.ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets Crowdfunding_max_block;; (if Int256.ltu spec4 spec2 then spec5 <- gets Crowdfunding_goal;; (if spec5 <=? spec3 then MonadState.modify (update_Crowdfunding_funded true);; Monad.ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (...) spec1 spec3 d in if (...)%int256 then MonadState.put d' else mzero) else Monad.ret tt) else Monad.ret tt) else Monad.ret tt)) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (step (Step_state prev) (Step_action prev))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_getFunds (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_getFunds_prf
case_getFunds_prf': runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- gets Crowdfunding_owner;; (if (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? spec1)%int256 then spec2 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- Monad.ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets Crowdfunding_max_block;; (if Int256.ltu spec4 spec2 then spec5 <- gets Crowdfunding_goal;; (if spec5 <=? spec3 then MonadState.modify (update_Crowdfunding_funded true);; Monad.ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (...) spec1 spec3 d in if (...)%int256 then MonadState.put d' else mzero) else Monad.ret tt) else Monad.ret tt) else Monad.ret tt)) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) (Step_state prev) (Step_action prev))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: runStateT (Crowdfunding_getFunds_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_getFunds (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_getFunds_prf
case_getFunds_prf': runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- gets Crowdfunding_owner;; (if (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? spec1)%int256 then spec2 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- Monad.ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets Crowdfunding_max_block;; (if Int256.ltu spec4 spec2 then spec5 <- gets Crowdfunding_goal;; (if spec5 <=? spec3 then MonadState.modify (update_Crowdfunding_funded true);; Monad.ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (...) spec1 spec3 d in if (...)%int256 then MonadState.put d' else mzero) else Monad.ret tt) else Monad.ret tt) else Monad.ret tt)) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_getFunds (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_getFunds_prf
case_getFunds_prf': runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- gets Crowdfunding_owner;; (if (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? spec1)%int256 then spec2 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- Monad.ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets Crowdfunding_max_block;; (if Int256.ltu spec4 spec2 then spec5 <- gets Crowdfunding_goal;; (if spec5 <=? spec3 then MonadState.modify (update_Crowdfunding_funded true);; Monad.ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (...) spec1 spec3 d in if (...)%int256 then MonadState.put d' else mzero) else Monad.ret tt) else Monad.ret tt) else Monad.ret tt)) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
case_getFunds_prf': runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- gets Crowdfunding_owner;; (if (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? spec1)%int256 then spec2 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- Monad.ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets Crowdfunding_max_block;; (if Int256.ltu spec4 spec2 then spec5 <- gets Crowdfunding_goal;; (if spec5 <=? spec3 then MonadState.modify (update_Crowdfunding_funded true);; Monad.ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (...) spec1 spec3 d in if (...)%int256 then MonadState.put d' else mzero) else Monad.ret tt) else Monad.ret tt) else Monad.ret tt)) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
case_getFunds_prf': runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- gets Crowdfunding_owner;; (if (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? spec1)%int256 then spec2 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec3 <- Monad.ret (me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets Crowdfunding_max_block;; (if Int256.ltu spec4 spec2 then spec5 <- gets Crowdfunding_goal;; (if spec5 <=? spec3 then MonadState.modify (update_Crowdfunding_funded true);; Monad.ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (...) spec1 spec3 d in if (...)%int256 then MonadState.put d' else mzero) else Monad.ret tt) else Monad.ret tt) else Monad.ret tt)) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = true
case_getFunds_prf'2: runStateT (let (success, d') := me_transfer (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (Crowdfunding_owner (contract_state (Step_state prev))) (me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) (update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then MonadState.put d' else mzero) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Monad.ret (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = true
case_getFunds_prf'2: runStateT (let (success, d') := (let (_, _, _, me_callvalue, _, _, _, _, me_balance, _, me_transfer, _, _, _) := make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf in me_transfer) (Crowdfunding_owner (contract_state (Step_state prev))) (me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) (update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then MonadState.put d' else mzero) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Monad.ret (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = true
case_getFunds_prf'2: runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address (Crowdfunding_owner (contract_state (Step_state prev))) (me_balance {| me_address := contract_address; me_origin := origin context; me_caller := caller context; me_callvalue := callvalue context; me_coinbase := coinbase context; me_timestamp := timestamp (Step_state prev); me_number := block_number (Step_state prev); me_chainid := chainid context; me_balance := ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)); me_blockhash := blockhash (Step_state prev); me_transfer := fun (recipient : int256) (amount : Z) (d : global_abstract_data_type) => if noOverflowOrUnderflowInTransfer contract_address recipient amount (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (recipient, amount)) d) else (Int256.zero, d); me_callmethod := fun (_ : HighValues.val) (_ : int) (_ : HighValues.val) (_ : list HighValues.val) (_ : global_abstract_data_type) (_ : ExtEnv.ext_env) (_ : global_abstract_data_type) (_ : ExtEnv.ext_env) (_ : int256) (_ : list HighValues.val) => False; me_log := fun (_ _ : list HighValues.val) (d : global_abstract_data_type) => d; me_valid := ContractModel.ContractModel.make_machine_env_obligation_1 contract_address (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf |} (me_address {| me_address := contract_address; me_origin := origin context; me_caller := caller context; me_callvalue := callvalue context; me_coinbase := coinbase context; me_timestamp := timestamp (Step_state prev); me_number := block_number (Step_state prev); me_chainid := chainid context; me_balance := ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)); me_blockhash := blockhash (Step_state prev); me_transfer := fun (recipient : int256) (amount : Z) (d : global_abstract_data_type) => if noOverflowOrUnderflowInTransfer contract_address recipient amount (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (recipient, amount)) d) else (Int256.zero, d); me_callmethod := fun (_ : HighValues.val) (_ : int) (_ : HighValues.val) (_ : list HighValues.val) (_ : global_abstract_data_type) (_ : ExtEnv.ext_env) (_ : global_abstract_data_type) (_ : ExtEnv.ext_env) (_ : int256) (_ : list HighValues.val) => False; me_log := fun (_ _ : list HighValues.val) (d : global_abstract_data_type) => d; me_valid := ContractModel.ContractModel.make_machine_env_obligation_1 contract_address (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf |})) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), me_balance {| me_address := contract_address; me_origin := origin context; me_caller := caller context; me_callvalue := callvalue context; me_coinbase := coinbase context; me_timestamp := timestamp (Step_state prev); me_number := block_number (Step_state prev); me_chainid := chainid context; me_balance := ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)); me_blockhash := blockhash (Step_state prev); me_transfer := fun (recipient : int256) (amount : Z) (d : global_abstract_data_type) => if noOverflowOrUnderflowInTransfer contract_address recipient amount (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (recipient, amount)) d) else (Int256.zero, d); me_callmethod := fun (_ : HighValues.val) (_ : int) (_ : HighValues.val) (_ : list HighValues.val) (_ : global_abstract_data_type) (_ : ExtEnv.ext_env) (_ : global_abstract_data_type) (_ : ExtEnv.ext_env) (_ : int256) (_ : list HighValues.val) => False; me_log := fun (_ _ : list HighValues.val) (d : global_abstract_data_type) => d; me_valid := ContractModel.ContractModel.make_machine_env_obligation_1 contract_address (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf |} (me_address {| me_address := contract_address; me_origin := origin context; me_caller := caller context; me_callvalue := callvalue context; me_coinbase := coinbase context; me_timestamp := timestamp (Step_state prev); me_number := block_number (Step_state prev); me_chainid := chainid context; me_balance := ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)); me_blockhash := blockhash (Step_state prev); me_transfer := fun (recipient : int256) (amount : Z) (d : global_abstract_data_type) => if noOverflowOrUnderflowInTransfer contract_address recipient amount (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance ...)) && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (recipient, amount)) d) else (Int256.zero, d); me_callmethod := fun (_ : HighValues.val) (_ : int) (_ : HighValues.val) (_ : list HighValues.val) (_ : global_abstract_data_type) (_ : ExtEnv.ext_env) (_ : global_abstract_data_type) (_ : ExtEnv.ext_env) (_ : int256) (_ : list HighValues.val) => False; me_log := fun (_ _ : list HighValues.val) (d : global_abstract_data_type) => d; me_valid := ContractModel.ContractModel.make_machine_env_obligation_1 contract_address (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf |}))) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then MonadState.put d' else mzero) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Monad.ret (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address (Crowdfunding_owner (contract_state (Step_state prev))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: runStateT (let (success, d') := if true && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: runStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: runStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = contract_state_afterbalance_backed (next_blockchain_state (Step_state prev) context (update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: runStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = contract_state_afterbalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: runStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = contract_state_aftertrue = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: runStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: runStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = true
case_getFunds_prf'2: runStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (Crowdfunding_owner (contract_state (Step_state prev)), ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) (update_Crowdfunding_funded true (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_funded true (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_funded true (contract_state (Step_state prev))) = Some (r, contract_state_after)Crowdfunding_funded contract_state_after = false -> sum (Crowdfunding_backers contract_state_after) <= new_balance_after_contract_call (Step_state prev) context contract_state_after contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers contract_state_after) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falsebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falseCrowdfunding_funded (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |}) = false -> sum (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |})) <= balance {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |} contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |})) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = falseCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = false
H0: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) <= current_balances (Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev))) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= current_balances (Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev))) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= current_balances None (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))(* intros. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: callvalue context = 0
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))(* rewrite H0. *) (* subst. *) (* unfold resetTransfers. simpl. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: callvalue context = 0
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address 0 (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: callvalue context = 0
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = true
Heqb1: (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))(* ---- *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falsebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falseCrowdfunding_funded (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |}) = false -> sum (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |})) <= balance {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |} contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |})) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = falseCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
H0: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) <= current_balances (Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev))) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= current_balances (Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev))) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= current_balances None (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))(* intros. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: callvalue context = 0
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))(* rewrite H0. *) (* subst. *) (* unfold resetTransfers. simpl. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: callvalue context = 0
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address 0 (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: callvalue context = 0
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = true
Heqb0: Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev)) = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))(* ---- *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_getFunds_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if (caller context =? Crowdfunding_owner s0)%int256 then {| runStateT := fun s1 : global_abstract_data_type => runStateT (if Int256.ltu (Crowdfunding_max_block s1) (block_number (Step_state prev)) then {| runStateT := fun s2 : global_abstract_data_type => runStateT (if Crowdfunding_goal s2 <=? ContractModel.update_balances ... contract_address ... ... contract_address then {| ... |} else {| ... |}) s2 |} else {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |}) s1 |} else {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falsebalance_backed {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |}snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falseCrowdfunding_funded (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |}) = false -> sum (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |})) <= balance {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |} contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := resetTransfers (contract_state (Step_state prev)) |})) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = falseCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) <= new_balance_after_contract_call (Step_state prev) context (contract_state (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) <= current_balances (Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev))) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= current_balances (Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev))) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= current_balances None (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)(* intros. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: callvalue context = 0
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)(* rewrite H0. *) (* subst. *) (* unfold resetTransfers. simpl. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: callvalue context = 0
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances (caller context) contract_address 0 (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)assumption.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: callvalue context = 0
Heqb: (caller context =? Crowdfunding_owner (contract_state (Step_state prev)))%int256 = false
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
H1: Outgoing_transfer_recipient_and_amount (contract_state (Step_state prev)) = Nonesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_claim (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_claim_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_claim (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_claim_prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_claim (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_claim_prf
case_claim_prf': runStateT (Crowdfunding_claim_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_claim (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_claim_prf
case_claim_prf': runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec2 <- gets Crowdfunding_max_block;; (if negb (Int256.ltu spec2 spec1) then Monad.ret tt else spec3 <- Monad.ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; spec5 <- gets Crowdfunding_funded;; spec6 <- gets Crowdfunding_goal;; (if (spec4 =? 0) || (spec5 || (spec6 <=? spec3)) then Monad.ret tt else MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (...)) 0 (Crowdfunding_backers s)) s);; Monad.ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (make_machine_env contract_address (...) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_caller (...)) spec4 d in if (success =? Int256.one)%int256 then MonadState.put d' else mzero)))) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_claim (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_claim_prf
case_claim_prf': runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec2 <- gets Crowdfunding_max_block;; (if negb (Int256.ltu spec2 spec1) then Monad.ret tt else spec3 <- Monad.ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; spec5 <- gets Crowdfunding_funded;; spec6 <- gets Crowdfunding_goal;; (if (spec4 =? 0) || (spec5 || (spec6 <=? spec3)) then Monad.ret tt else MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (...)) 0 (Crowdfunding_backers s)) s);; Monad.ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (make_machine_env contract_address (...) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_caller (...)) spec4 d in if (success =? Int256.one)%int256 then MonadState.put d' else mzero)))) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (step (Step_state prev) (Step_action prev))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_claim (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_claim_prf
case_claim_prf': runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec2 <- gets Crowdfunding_max_block;; (if negb (Int256.ltu spec2 spec1) then Monad.ret tt else spec3 <- Monad.ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; spec5 <- gets Crowdfunding_funded;; spec6 <- gets Crowdfunding_goal;; (if (spec4 =? 0) || (spec5 || (spec6 <=? spec3)) then Monad.ret tt else MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (...)) 0 (Crowdfunding_backers s)) s);; Monad.ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (make_machine_env contract_address (...) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_caller (...)) spec4 d in if (success =? Int256.one)%int256 then MonadState.put d' else mzero)))) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) (Step_state prev) (Step_action prev))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: runStateT (Crowdfunding_claim_opt (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (contract_state (Step_state prev)) = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_claim (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_claim_prf
case_claim_prf': runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec2 <- gets Crowdfunding_max_block;; (if negb (Int256.ltu spec2 spec1) then Monad.ret tt else spec3 <- Monad.ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; spec5 <- gets Crowdfunding_funded;; spec6 <- gets Crowdfunding_goal;; (if (spec4 =? 0) || (spec5 || (spec6 <=? spec3)) then Monad.ret tt else MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (...)) 0 (Crowdfunding_backers s)) s);; Monad.ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (make_machine_env contract_address (...) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_caller (...)) spec4 d in if (success =? Int256.one)%int256 then MonadState.put d' else mzero)))) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
Case: Step_action prev = call_Crowdfunding_claim (Step_state prev) context callvalue_bounded_prf balances_bounded_prf callvalue_prf r contract_state_after case_claim_prf
case_claim_prf': runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec2 <- gets Crowdfunding_max_block;; (if negb (Int256.ltu spec2 spec1) then Monad.ret tt else spec3 <- Monad.ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; spec5 <- gets Crowdfunding_funded;; spec6 <- gets Crowdfunding_goal;; (if (spec4 =? 0) || (spec5 || (spec6 <=? spec3)) then Monad.ret tt else MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (...)) 0 (Crowdfunding_backers s)) s);; Monad.ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (make_machine_env contract_address (...) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_caller (...)) spec4 d in if (success =? Int256.one)%int256 then MonadState.put d' else mzero)))) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
case_claim_prf': runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec2 <- gets Crowdfunding_max_block;; (if negb (Int256.ltu spec2 spec1) then Monad.ret tt else spec3 <- Monad.ret (me_balance (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; spec5 <- gets Crowdfunding_funded;; spec6 <- gets Crowdfunding_goal;; (if (spec4 =? 0) || (spec5 || (spec6 <=? spec3)) then Monad.ret tt else MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (...)) 0 (Crowdfunding_backers s)) s);; Monad.ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (make_machine_env contract_address (...) context address_accepts_funds_assumption callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_caller (...)) spec4 d in if (success =? Int256.one)%int256 then MonadState.put d' else mzero)))) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
case_claim_prf': runStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0);; guard v);; spec1 <- Monad.ret (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf));; spec2 <- gets Crowdfunding_max_block;; (if negb (Int256.ltu spec2 spec1) then Monad.ret tt else spec3 <- Monad.ret (me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)));; spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers s));; spec5 <- gets Crowdfunding_funded;; spec6 <- gets Crowdfunding_goal;; (if (spec4 =? 0) || (spec5 || (spec6 <=? spec3)) then Monad.ret tt else MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (...)) 0 (Crowdfunding_backers s)) s);; Monad.ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (make_machine_env contract_address (...) context (...) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_caller (...)) spec4 d in if (success =? Int256.one)%int256 then MonadState.put d' else mzero)))) (contract_state (Step_state prev)) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = truebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (tt, contract_state (Step_state prev))
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)))) = truebalance_backed (next_blockchain_state (Step_state prev) context (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)))) = false
case_claim_prf'1: runStateT (let (success, d') := me_transfer (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then MonadState.put d' else mzero) (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = Monad.ret (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: GetHighData
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))%int256 = true
a1: unit
H6: (me_callvalue (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (me_number (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf))) = false
Heqb0: (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? me_balance (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_address (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)))) = false
case_claim_prf'1: runStateT (let (success, d') := me_transfer (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf) (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (get_default 0 (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) (Crowdfunding_backers (contract_state (Step_state prev)))) (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then MonadState.put d' else mzero) (update_Crowdfunding_backers (set (me_caller (make_machine_env contract_address (Step_state prev) context (fun (_ : option ContractState) (_ _ : addr) (_ : wei) => true) callvalue_bounded_prf balances_bounded_prf callvalue_prf)) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = Monad.ret (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
case_claim_prf'1: runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: runStateT (let (success, d') := if true && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = false
case_claim_prf'1: runStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: runStateT (let (success, d') := if true && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_afterbalance_backed (next_blockchain_state (Step_state prev) context (update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_afterCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= new_balance_after_contract_call (Step_state prev) context (update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) contract_address /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= new_balance_after_contract_call (Step_state prev) context (update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) contract_address /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= new_balance_after_contract_call (Step_state prev) context (update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) contract_address /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= current_balances (Outgoing_transfer_recipient_and_amount (update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))))) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= current_balances (Outgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))); Crowdfunding_owner := Crowdfunding_owner (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_max_block := Crowdfunding_max_block (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_goal := Crowdfunding_goal (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_backers := Crowdfunding_backers (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_funded := Crowdfunding_funded (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_funded_msg := Crowdfunding_funded_msg (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_failed_msg := Crowdfunding_failed_msg (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) |}) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= update_balances contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) contract_address /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (contract_address =? caller context)%int256 then if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address else if (contract_address =? contract_address)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) else if (contract_address =? caller context)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) (caller context) else if (caller context =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) (caller context)) + get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) else if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)(* Open Scope int256. Search "=?" false. *) (* Search negb false true. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (contract_address =? caller context)%int256 then if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address else if (contract_address =? contract_address)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) else if (contract_address =? caller context)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) (caller context) else if (caller context =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) (caller context)) + get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) else if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)(* apply Int256eq_false in H2. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (contract_address =? caller context)%int256 then if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address else if (contract_address =? contract_address)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) else if (contract_address =? caller context)%int256 then (if (caller context =? contract_address)%int256 then balance (Step_state prev) (caller context) else if (caller context =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) (caller context)) + get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) else if (caller context =? contract_address)%int256 then balance (Step_state prev) contract_address else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (contract_address =? caller context)%int256 then if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address else if (contract_address =? contract_address)%int256 then (if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) else if (contract_address =? caller context)%int256 then (if (caller context =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else balance (Step_state prev) (caller context)) + get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) else if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else if (contract_address =? contract_address)%int256 then balance (Step_state prev) contract_address + callvalue context else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (caller context =? contract_address)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (contract_address =? caller context)%int256 then if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else balance (Step_state prev) contract_address + callvalue context else (if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else balance (Step_state prev) contract_address + callvalue context) - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= (if (contract_address =? caller context)%int256 then if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else balance (Step_state prev) contract_address + callvalue context else (if (contract_address =? caller context)%int256 then balance (Step_state prev) (caller context) - callvalue context else balance (Step_state prev) contract_address + callvalue context) - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= balance (Step_state prev) contract_address + callvalue context - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) /\ (forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= balance (Step_state prev) contract_address + callvalue context - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= balance (Step_state prev) contract_address + callvalue context - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: callvalue context = 0
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= balance (Step_state prev) contract_address + callvalue context - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: callvalue context = 0
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= balance (Step_state prev) contract_address + 0 - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: callvalue context = 0
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= balance (Step_state prev) contract_address - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: callvalue context = 0
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulussum (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) <= balance (Step_state prev) contract_address - get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))assumption.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: callvalue context = 0
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulussum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_addresssnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)forall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulusforall (key : elt) (value : Z32), get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value -> value >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some valuevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = truevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = falsevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = truevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: key = caller contextvalue >= 0 /\ value < Int256.modulus(* rewrite Int256Tree.gss in H5. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: get (caller context) (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: key = caller contextvalue >= 0 /\ value < Int256.moduluslia.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: Some 0 = Some value
SSCase: key = caller context
H8: 0 = value0 >= 0 /\ 0 < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: (key =? caller context)%int256 = falsevalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: get key (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) = Some value
SSCase: key <> caller contextvalue >= 0 /\ value < Int256.modulus(* apply H4 in H5. *) match goal with H1 : (forall k v, get k _ = Some v -> v >= 0 /\ v < Int256.modulus), H2 : (get key _ = _) |- _ => apply H1 in H2; assumption end.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: (contract_address =? caller context)%int256 = false
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = true
case_claim_prf'1: Some (tt, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) = Some (r, contract_state_after)
H1: tt = r
H3: update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = contract_state_after
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address
H4: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus
key: elt
value: Z32
H5: get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value
SSCase: key <> caller contextvalue >= 0 /\ value < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = false
case_claim_prf'1: runStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (caller context, get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))))) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev)))) else (Int256.zero, update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set (caller context) 0 (Crowdfunding_backers (contract_state (Step_state prev)))) (contract_state (Step_state prev))) = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)discriminate.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
context: CallContext
callvalue_bounded_prf: 0 <= callvalue context < Int256.modulus
balances_bounded_prf: forall a : addr, 0 <= balance (Step_state prev) a < Int256.modulus
callvalue_prf: noOverflowOrUnderflowInTransfer (caller context) contract_address (callvalue context) (balance (Step_state prev)) = true
r: unit
contract_state_after: global_abstract_data_type
case_claim_prf: match runStateT (guard (negb (caller context =? contract_address)%int256)) (contract_state (Step_state prev)) with | Some (_, s) => match runStateT (guard (callvalue context =? 0)) s with | Some (_, s0) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s0) (block_number (Step_state prev))) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (if (get_default 0 (caller context) (Crowdfunding_backers s1) =? 0) || (Crowdfunding_funded s1 || (Crowdfunding_goal s1 <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) then {| runStateT := fun s2 : global_abstract_data_type => Some (tt, s2) |} else {| runStateT := fun s2 : global_abstract_data_type => runStateT (let (success, d') := if ... then ... else ... in if (...)%int256 then {| ... |} else {| ... |}) (update_Crowdfunding_backers (set (...) 0 (...)) s2) |}) s1 |}) s0 | None => None end | None => None end = Some (r, contract_state_after)
a: unit
H2: negb (caller context =? contract_address)%int256 = true
a1: unit
H6: (callvalue context =? 0) = true
Heqb: negb (Int256.ltu (Crowdfunding_max_block (contract_state (Step_state prev))) (block_number (Step_state prev))) = false
Heqb0: (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev))) =? 0) || (Crowdfunding_funded (contract_state (Step_state prev)) || (Crowdfunding_goal (contract_state (Step_state prev)) <=? ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev)) contract_address)) = false
SCase: noOverflowOrUnderflowInTransfer contract_address (caller context) (get_default 0 (caller context) (Crowdfunding_backers (contract_state (Step_state prev)))) (ContractModel.update_balances (caller context) contract_address (callvalue context) (balance (Step_state prev))) = false
case_claim_prf'1: None = Some (r, contract_state_after)balance_backed (next_blockchain_state (Step_state prev) context contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
prf: sender <> contract_address /\ amount >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
prf: sender <> contract_address /\ amount >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount prfbalance_backed ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) (Step_state prev) (Step_action prev))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
prf: sender <> contract_address /\ amount >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount prfbalance_backed (update_balance (Step_state prev) (update_balances sender recipient amount (balance (Step_state prev))))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
prf: sender <> contract_address /\ amount >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount prfCrowdfunding_funded (contract_state (update_balance (Step_state prev) (update_balances sender recipient amount (balance (Step_state prev))))) = false -> sum (Crowdfunding_backers (contract_state (update_balance (Step_state prev) (update_balances sender recipient amount (balance (Step_state prev)))))) <= balance (update_balance (Step_state prev) (update_balances sender recipient amount (balance (Step_state prev)))) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (update_balance (Step_state prev) (update_balances sender recipient amount (balance (Step_state prev)))))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
prf: sender <> contract_address /\ amount >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount prfCrowdfunding_funded (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := update_balances sender recipient amount (balance (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := contract_state (Step_state prev) |}) = false -> sum (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := update_balances sender recipient amount (balance (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := contract_state (Step_state prev) |})) <= balance {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := update_balances sender recipient amount (balance (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := contract_state (Step_state prev) |} contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state {| timestamp := timestamp (Step_state prev); block_number := block_number (Step_state prev); balance := update_balances sender recipient amount (balance (Step_state prev)); blockhash := blockhash (Step_state prev); contract_state := contract_state (Step_state prev) |})) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
prf: sender <> contract_address /\ amount >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount prfCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances sender recipient amount (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
a: amount >= 0 /\ noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n a)Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances sender recipient amount (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances sender recipient amount (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: Crowdfunding_funded (contract_state (Step_state prev)) = falsesum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances sender recipient amount (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) <= update_balances sender recipient amount (balance (Step_state prev)) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) <= (if (sender =? recipient)%int256 then balance (Step_state prev) contract_address else if (contract_address =? sender)%int256 then balance (Step_state prev) sender - amount else if (contract_address =? recipient)%int256 then balance (Step_state prev) recipient + amount else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)sum (Crowdfunding_backers (contract_state (Step_state prev))) <= (if (contract_address =? sender)%int256 then balance (Step_state prev) sender - amount else if (contract_address =? recipient)%int256 then balance (Step_state prev) recipient + amount else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = truesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) sender - amount /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = falsesum (Crowdfunding_backers (contract_state (Step_state prev))) <= (if (contract_address =? recipient)%int256 then balance (Step_state prev) recipient + amount else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = truesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) sender - amount /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: contract_address = sendersum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) sender - amount /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)contradiction.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: sender = contract_addresssum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) sender - amount /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = falsesum (Crowdfunding_backers (contract_state (Step_state prev))) <= (if (contract_address =? recipient)%int256 then balance (Step_state prev) recipient + amount else balance (Step_state prev) contract_address) /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = false
SSCase: (contract_address =? recipient)%int256 = truesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) recipient + amount /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = false
SSCase: (contract_address =? recipient)%int256 = falsesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = false
SSCase: (contract_address =? recipient)%int256 = truesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) recipient + amount /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = false
SSCase: contract_address = recipientsum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) recipient + amount /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = false
SSCase: contract_address = recipientsum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address + amount /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)lia.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = false
SSCase: contract_address = recipientsum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address + amountsplit; apply H0.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
sender, recipient: addr
amount: wei
n: sender <> contract_address
g: amount >= 0
e: noOverflowOrUnderflowInTransfer sender recipient amount (balance (Step_state prev)) && address_accepts_funds_assumption None sender recipient amount = true
Case: Step_action prev = externalBalanceTransfer (Step_state prev) sender recipient amount (conj n (conj g e))
H0: sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
SCase: (contract_address =? sender)%int256 = false
SSCase: (contract_address =? recipient)%int256 = falsesum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
block_count, time_passing: int256
prf: validTimeChange block_count time_passing (block_number (Step_state prev)) (timestamp (Step_state prev)) = true
Case: Step_action prev = timePassing (Step_state prev) block_count time_passing prfbalance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
block_count, time_passing: int256
prf: validTimeChange block_count time_passing (block_number (Step_state prev)) (timestamp (Step_state prev)) = true
Case: Step_action prev = timePassing (Step_state prev) block_count time_passing prfbalance_backed ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) (Step_state prev) (Step_action prev))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
block_count, time_passing: int256
prf: validTimeChange block_count time_passing (block_number (Step_state prev)) (timestamp (Step_state prev)) = true
Case: Step_action prev = timePassing (Step_state prev) block_count time_passing prfbalance_backed (updateTimeAndBlock (Step_state prev) block_count time_passing)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
block_count, time_passing: int256
prf: validTimeChange block_count time_passing (block_number (Step_state prev)) (timestamp (Step_state prev)) = true
Case: Step_action prev = timePassing (Step_state prev) block_count time_passing prfCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
block_count, time_passing: int256
prf: validTimeChange block_count time_passing (block_number (Step_state prev)) (timestamp (Step_state prev)) = true
Case: Step_action prev = timePassing (Step_state prev) block_count time_passing prfCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)assumption.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: Crowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)
block_count, time_passing: int256
prf: validTimeChange block_count time_passing (block_number (Step_state prev)) (timestamp (Step_state prev)) = true
Case: Step_action prev = timePassing (Step_state prev) block_count time_passing prfCrowdfunding_funded (contract_state (Step_state prev)) = false -> sum (Crowdfunding_backers (contract_state (Step_state prev))) <= balance (Step_state prev) contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state (Step_state prev))) = Some value -> value >= 0 /\ value < Int256.modulus)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
Case: Step_action prev = revert (Step_state prev)balance_backed (stepOnce prev)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
Case: Step_action prev = revert (Step_state prev)balance_backed ((fix step (before : BlockchainState) (action : Action before) {struct action} : BlockchainState := match action with | @call_Crowdfunding_donate _ context _ _ _ _ d_after _ | @call_Crowdfunding_getFunds _ context _ _ _ _ d_after _ | @call_Crowdfunding_claim _ context _ _ _ _ d_after _ => next_blockchain_state before context d_after | @externalBalanceTransfer _ sender recipient amount _ => update_balance before (update_balances sender recipient amount (balance before)) | @timePassing _ block_count time_passing _ => updateTimeAndBlock before block_count time_passing | @revert _ => before end) (Step_state prev) (Step_action prev))assumption. Qed.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
prevSt: BlockchainState
prev: Step
prevList: list Step
H: ReachableFromBy initial_state (Step_state prev) prev prevList
next_action: Action (stepOnce prev)
IHReachableFromBy: balance_backed (Step_state prev)
Case: Step_action prev = revert (Step_state prev)balance_backed (Step_state prev)
snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (state : BlockchainState) (s : Step) (l : list Step) (backer_addr : elt) (backed_amount : Z), ReachableFromBy initial_state state s l -> backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) -> contract_address <> backer_addr -> backed_amount > 0 -> (balance state backer_addr + backed_amount <? Int256.modulus) = true -> Crowdfunding_funded (contract_state state) = false -> balance state contract_address < Crowdfunding_goal (contract_state state) -> (forall a : addr, 0 <= balance state a < Int256.modulus) -> Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true -> exists action : Action state, Outgoing_transfer_recipient_and_amount (contract_state (step_keep_transfer state action)) = Some (backer_addr, backed_amount) /\ match action with | @call_Crowdfunding_donate _ context _ _ _ _ _ _ | @call_Crowdfunding_getFunds _ context _ _ _ _ _ _ | @call_Crowdfunding_claim _ context _ _ _ _ _ _ => callvalue context = 0 /\ caller context = backer_addr | _ => False endsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps memforall (state : BlockchainState) (s : Step) (l : list Step) (backer_addr : elt) (backed_amount : Z), ReachableFromBy initial_state state s l -> backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) -> contract_address <> backer_addr -> backed_amount > 0 -> (balance state backer_addr + backed_amount <? Int256.modulus) = true -> Crowdfunding_funded (contract_state state) = false -> balance state contract_address < Crowdfunding_goal (contract_state state) -> (forall a : addr, 0 <= balance state a < Int256.modulus) -> Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true -> exists action : Action state, Outgoing_transfer_recipient_and_amount (contract_state (step_keep_transfer state action)) = Some (backer_addr, backed_amount) /\ match action with | @call_Crowdfunding_donate _ context _ _ _ _ _ _ | @call_Crowdfunding_getFunds _ context _ _ _ _ _ _ | @call_Crowdfunding_claim _ context _ _ _ _ _ _ => callvalue context = 0 /\ caller context = backer_addr | _ => False endsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueexists action : Action state, Outgoing_transfer_recipient_and_amount (contract_state (step_keep_transfer state action)) = Some (backer_addr, backed_amount) /\ match action with | @call_Crowdfunding_donate _ context _ _ _ _ _ _ | @call_Crowdfunding_getFunds _ context _ _ _ _ _ _ | @call_Crowdfunding_claim _ context _ _ _ _ _ _ => callvalue context = 0 /\ caller context = backer_addr | _ => False endsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount (contract_state (step_keep_transfer state (call_Crowdfunding_claim state ?context ?callvalue_bounded_prf ?balances_bounded_prf ?callvalue_prf ?r ?contract_state_after ?case_claim_prf))) = Some (backer_addr, backed_amount) /\ callvalue ?context = 0 /\ caller ?context = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount (contract_state {| timestamp := timestamp state; block_number := block_number state; balance := new_balance_after_contract_call state ?context ?contract_state_after; blockhash := blockhash state; contract_state := ?contract_state_after |}) = Some (backer_addr, backed_amount) /\ callvalue ?context = 0 /\ caller ?context = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount (contract_state {| timestamp := timestamp state; block_number := block_number state; balance := new_balance_after_contract_call state ?context ?contract_state_after; blockhash := blockhash state; contract_state := ?contract_state_after |}) = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue ?context = 0 /\ caller ?context = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue ?context = 0 /\ caller ?context = backer_addrshelve.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue ?context = 0 /\ caller ?context = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueCallContextsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= callvalue ?context < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller ?context) contract_address (callvalue ?context) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state ?context address_accepts_funds_assumption ?callvalue_bounded_prf ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue ?context = 0 /\ caller ?context = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueaddrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueaddrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueweisnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueint256snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueint256snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= callvalue {| origin := ?Goal1; caller := ?Goal2; callvalue := ?Goal3; coinbase := ?Goal4; chainid := ?Goal5 |} < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := ?Goal1; caller := ?Goal2; callvalue := ?Goal3; coinbase := ?Goal4; chainid := ?Goal5 |}) contract_address (callvalue {| origin := ?Goal1; caller := ?Goal2; callvalue := ?Goal3; coinbase := ?Goal4; chainid := ?Goal5 |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := ?Goal1; caller := ?Goal2; callvalue := ?Goal3; coinbase := ?Goal4; chainid := ?Goal5 |} address_accepts_funds_assumption ?callvalue_bounded_prf ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := ?Goal1; caller := ?Goal2; callvalue := ?Goal3; coinbase := ?Goal4; chainid := ?Goal5 |} = 0 /\ caller {| origin := ?Goal1; caller := ?Goal2; callvalue := ?Goal3; coinbase := ?Goal4; chainid := ?Goal5 |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueaddrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueweisnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueint256snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueint256snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= callvalue {| origin := backer_addr; caller := ?Goal1; callvalue := ?Goal2; coinbase := ?Goal3; chainid := ?Goal4 |} < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := backer_addr; caller := ?Goal1; callvalue := ?Goal2; coinbase := ?Goal3; chainid := ?Goal4 |}) contract_address (callvalue {| origin := backer_addr; caller := ?Goal1; callvalue := ?Goal2; coinbase := ?Goal3; chainid := ?Goal4 |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := ?Goal1; callvalue := ?Goal2; coinbase := ?Goal3; chainid := ?Goal4 |} address_accepts_funds_assumption ?callvalue_bounded_prf ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := ?Goal1; callvalue := ?Goal2; coinbase := ?Goal3; chainid := ?Goal4 |} = 0 /\ caller {| origin := backer_addr; caller := ?Goal1; callvalue := ?Goal2; coinbase := ?Goal3; chainid := ?Goal4 |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueweisnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueint256snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueint256snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= callvalue {| origin := backer_addr; caller := backer_addr; callvalue := ?Goal1; coinbase := ?Goal2; chainid := ?Goal3 |} < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := backer_addr; caller := backer_addr; callvalue := ?Goal1; coinbase := ?Goal2; chainid := ?Goal3 |}) contract_address (callvalue {| origin := backer_addr; caller := backer_addr; callvalue := ?Goal1; coinbase := ?Goal2; chainid := ?Goal3 |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := ?Goal1; coinbase := ?Goal2; chainid := ?Goal3 |} address_accepts_funds_assumption ?callvalue_bounded_prf ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := ?Goal1; coinbase := ?Goal2; chainid := ?Goal3 |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := ?Goal1; coinbase := ?Goal2; chainid := ?Goal3 |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueint256snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueint256snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := ?Goal1; chainid := ?Goal2 |} < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := ?Goal1; chainid := ?Goal2 |}) contract_address (callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := ?Goal1; chainid := ?Goal2 |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := ?Goal1; chainid := ?Goal2 |} address_accepts_funds_assumption ?callvalue_bounded_prf ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := ?Goal1; chainid := ?Goal2 |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := ?Goal1; chainid := ?Goal2 |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueint256snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := ?Goal1 |} < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := ?Goal1 |}) contract_address (callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := ?Goal1 |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := ?Goal1 |} address_accepts_funds_assumption ?callvalue_bounded_prf ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := ?Goal1 |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := ?Goal1 |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) contract_address (callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption ?callvalue_bounded_prf ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= 0 < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) contract_address (callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption ?Goal1 ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= 0 < Z.pos (shift_nat Int256.wordsize 1)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) contract_address (callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption ?Goal1 ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueforall a : addr, 0 <= balance state a < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) contract_address (callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) ?balances_bounded_prf ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer (caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) contract_address (callvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |}) (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 ?callvalue_prf)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truenoOverflowOrUnderflowInTransfer backer_addr contract_address 0 (balance state) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 ?Goal1)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr - 0 >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 ?Goal1)) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) ?Goal1 (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) ?Goal1 (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) ?Goal1 (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) = true /\ (balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro ?Goal1) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj ?Goal1 ?Goal2)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) && (0 <? Int256.modulus) = true /\ (balance state backer_addr >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro ?Goal2) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) && (0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state backer_addr >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj ?Goal2 ?Goal3)) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) = true /\ (0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state backer_addr >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro ?Goal3) ?Goal2)) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state backer_addr >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj ?Goal3 ?Goal4)) ?Goal2)) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state backer_addr >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) ?Goal3)) ?Goal2)) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <? Z.pos (shift_nat Int256.wordsize 1)) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state backer_addr >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) ?Goal3)) ?Goal2)) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(0 <? 115792089237316195423570985008687907853269984665640564039457584007913129639936) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state backer_addr >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) ?Goal3)) ?Goal2)) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state backer_addr >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ?Goal2)) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 <= balance state backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ((fun lemma : (...) = true <-> 0 <= balance state backer_addr => Morphisms.iff_flip_impl_subrelation ((... >=? 0) = true) (0 <= balance state backer_addr) lemma) (Z.geb_le (balance state backer_addr) 0) ?Goal2))) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H8: 0 <= balance state backer_addr < Int256.modulus0 <= balance state backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ((fun lemma : (...) = true <-> 0 <= balance state backer_addr => Morphisms.iff_flip_impl_subrelation ((... >=? 0) = true) (0 <= balance state backer_addr) lemma) (Z.geb_le (balance state backer_addr) 0) (let H8 : 0 <= balance state backer_addr < Int256.modulus := H6 backer_addr in ?Goal2)))) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true(balance state contract_address <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ((fun lemma : (...) = true <-> 0 <= balance state backer_addr => Morphisms.iff_flip_impl_subrelation ((... >=? 0) = true) (0 <= balance state backer_addr) lemma) (Z.geb_le (balance state backer_addr) 0) (let H8 : 0 <= balance state backer_addr < Int256.modulus := H6 backer_addr in let __arith : forall (__p1 : Prop) (__x1 : Z), ... /\ __p1 -> 0 <= __x1 := fun (__p1 : Prop) (__x1 : Z) => let __wit := [] in ... ... in __arith (balance state backer_addr < Int256.modulus) (balance state backer_addr) H8)))) ?Goal1)) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truebalance state contract_address < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ((fun lemma : (...) = true <-> 0 <= balance state backer_addr => Morphisms.iff_flip_impl_subrelation ((... >=? 0) = true) (0 <= balance state backer_addr) lemma) (Z.geb_le (balance state backer_addr) 0) (let H8 : 0 <= balance state backer_addr < Int256.modulus := H6 backer_addr in let __arith : forall (__p1 : Prop) (__x1 : Z), ... /\ __p1 -> 0 <= __x1 := fun (__p1 : Prop) (__x1 : Z) => let __wit := [] in ... ... in __arith (balance state backer_addr < Int256.modulus) (balance state backer_addr) H8)))) ((fun lemma : (balance state contract_address <? Int256.modulus) = true <-> balance state contract_address < Int256.modulus => Morphisms.iff_flip_impl_subrelation ((balance state contract_address <? Int256.modulus) = true) (balance state contract_address < Int256.modulus) lemma) (Z.ltb_lt (balance state contract_address) Int256.modulus) ?Goal1))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H8: 0 <= balance state contract_address < Int256.modulusbalance state contract_address < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ((fun lemma : (...) = true <-> 0 <= balance state backer_addr => Morphisms.iff_flip_impl_subrelation ((... >=? 0) = true) (0 <= balance state backer_addr) lemma) (Z.geb_le (balance state backer_addr) 0) (let H8 : 0 <= balance state backer_addr < Int256.modulus := H6 backer_addr in let __arith : forall (__p1 : Prop) (__x1 : Z), ... /\ __p1 -> 0 <= __x1 := fun (__p1 : Prop) (__x1 : Z) => let __wit := [] in ... ... in __arith (balance state backer_addr < Int256.modulus) (balance state backer_addr) H8)))) ((fun lemma : (balance state contract_address <? Int256.modulus) = true <-> balance state contract_address < Int256.modulus => Morphisms.iff_flip_impl_subrelation ((balance state contract_address <? Int256.modulus) = true) (balance state contract_address < Int256.modulus) lemma) (Z.ltb_lt (balance state contract_address) Int256.modulus) (let H8 : 0 <= balance state contract_address < Int256.modulus := H6 contract_address in ?Goal1)))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueunitsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ((fun lemma : (...) = true <-> 0 <= balance state backer_addr => Morphisms.iff_flip_impl_subrelation ((... >=? 0) = true) (0 <= balance state backer_addr) lemma) (Z.geb_le (balance state backer_addr) 0) (let H8 : 0 <= balance state backer_addr < Int256.modulus := H6 backer_addr in let __arith : forall (__p1 : Prop) (__x1 : Z), ... /\ __p1 -> 0 <= __x1 := fun (__p1 : Prop) (__x1 : Z) => let __wit := [] in ... ... in __arith (balance state backer_addr < Int256.modulus) (balance state backer_addr) H8)))) ((fun lemma : (balance state contract_address <? Int256.modulus) = true <-> balance state contract_address < Int256.modulus => Morphisms.iff_flip_impl_subrelation ((balance state contract_address <? Int256.modulus) = true) (balance state contract_address < Int256.modulus) lemma) (Z.ltb_lt (balance state contract_address) Int256.modulus) (let H8 : 0 <= balance state contract_address < Int256.modulus := H6 contract_address in let __arith : forall (__p1 : Prop) (__x2 __x1 : Z), __p1 /\ __x1 < __x2 -> __x1 < __x2 := fun (__p1 : Prop) (__x2 __x1 : Z) => let __wit := [] in let __varmap := VarMap.Branch (VarMap.Elt __x2) __x1 VarMap.Empty in let __ff := Tauto.IMPL (...) None (...) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ...) (VarMap.find 0 __varmap) in __arith (0 <= balance state contract_address) Int256.modulus (balance state contract_address) H8)))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (?r, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueGetHighDatasnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ((fun lemma : (...) = true <-> 0 <= balance state backer_addr => Morphisms.iff_flip_impl_subrelation ((... >=? 0) = true) (0 <= balance state backer_addr) lemma) (Z.geb_le (balance state backer_addr) 0) (let H8 : 0 <= balance state backer_addr < Int256.modulus := H6 backer_addr in let __arith : forall (__p1 : Prop) (__x1 : Z), ... /\ __p1 -> 0 <= __x1 := fun (__p1 : Prop) (__x1 : Z) => let __wit := [] in ... ... in __arith (balance state backer_addr < Int256.modulus) (balance state backer_addr) H8)))) ((fun lemma : (balance state contract_address <? Int256.modulus) = true <-> balance state contract_address < Int256.modulus => Morphisms.iff_flip_impl_subrelation ((balance state contract_address <? Int256.modulus) = true) (balance state contract_address < Int256.modulus) lemma) (Z.ltb_lt (balance state contract_address) Int256.modulus) (let H8 : 0 <= balance state contract_address < Int256.modulus := H6 contract_address in let __arith : forall (__p1 : Prop) (__x2 __x1 : Z), __p1 /\ __x1 < __x2 -> __x1 < __x2 := fun (__p1 : Prop) (__x2 __x1 : Z) => let __wit := [] in let __varmap := VarMap.Branch (VarMap.Elt __x2) __x1 VarMap.Empty in let __ff := Tauto.IMPL (...) None (...) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ...) (VarMap.find 0 __varmap) in __arith (0 <= balance state contract_address) Int256.modulus (balance state contract_address) H8)))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (tt, ?contract_state_after)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount ?contract_state_after = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ((fun lemma : (...) = true <-> 0 <= balance state backer_addr => Morphisms.iff_flip_impl_subrelation ((... >=? 0) = true) (0 <= balance state backer_addr) lemma) (Z.geb_le (balance state backer_addr) 0) (let H8 : 0 <= balance state backer_addr < Int256.modulus := H6 backer_addr in let __arith : forall (__p1 : Prop) (__x1 : Z), ... /\ __p1 -> 0 <= __x1 := fun (__p1 : Prop) (__x1 : Z) => let __wit := [] in ... ... in __arith (balance state backer_addr < Int256.modulus) (balance state backer_addr) H8)))) ((fun lemma : (balance state contract_address <? Int256.modulus) = true <-> balance state contract_address < Int256.modulus => Morphisms.iff_flip_impl_subrelation ((balance state contract_address <? Int256.modulus) = true) (balance state contract_address < Int256.modulus) lemma) (Z.ltb_lt (balance state contract_address) Int256.modulus) (let H8 : 0 <= balance state contract_address < Int256.modulus := H6 contract_address in let __arith : forall (__p1 : Prop) (__x2 __x1 : Z), __p1 /\ __x1 < __x2 -> __x1 < __x2 := fun (__p1 : Prop) (__x2 __x1 : Z) => let __wit := [] in let __varmap := VarMap.Branch (VarMap.Elt __x2) __x1 VarMap.Empty in let __ff := Tauto.IMPL (...) None (...) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ...) (VarMap.find 0 __varmap) in __arith (0 <= balance state contract_address) Int256.modulus (balance state contract_address) H8)))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT (Crowdfunding_claim_opt (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (let cstr : 0 < Z.pos (shift_nat Int256.wordsize 1) := Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1) in let __arith : forall __x1 : Z, 0 < __x1 -> 0 <= 0 < __x1 := fun __x1 : Z => let __wit := [] in let __varmap := VarMap.Elt __x1 in let __ff := Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt)) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ZMicromega.ZTautoChecker __ff __wit = true) (VarMap.find 0 __varmap) in __arith (Z.pos (shift_nat Int256.wordsize 1)) cstr) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj (let __arith : (...) = true := let __wit := [] in ... ... in __arith) (let __arith : (...) = true := let __wit := [] in ... ... in __arith))) ((fun lemma : (...) = true <-> 0 <= balance state backer_addr => Morphisms.iff_flip_impl_subrelation ((... >=? 0) = true) (0 <= balance state backer_addr) lemma) (Z.geb_le (balance state backer_addr) 0) (let H8 : 0 <= balance state backer_addr < Int256.modulus := H6 backer_addr in let __arith : forall (__p1 : Prop) (__x1 : Z), ... /\ __p1 -> 0 <= __x1 := fun (__p1 : Prop) (__x1 : Z) => let __wit := [] in ... ... in __arith (balance state backer_addr < Int256.modulus) (balance state backer_addr) H8)))) ((fun lemma : (balance state contract_address <? Int256.modulus) = true <-> balance state contract_address < Int256.modulus => Morphisms.iff_flip_impl_subrelation ((balance state contract_address <? Int256.modulus) = true) (balance state contract_address < Int256.modulus) lemma) (Z.ltb_lt (balance state contract_address) Int256.modulus) (let H8 : 0 <= balance state contract_address < Int256.modulus := H6 contract_address in let __arith : forall (__p1 : Prop) (__x2 __x1 : Z), __p1 /\ __x1 < __x2 -> __x1 < __x2 := fun (__p1 : Prop) (__x2 __x1 : Z) => let __wit := [] in let __varmap := VarMap.Branch (VarMap.Elt __x2) __x1 VarMap.Empty in let __ff := Tauto.IMPL (...) None (...) in ZMicromega.ZTautoChecker_sound __ff __wit (eq_refl <: ...) (VarMap.find 0 __varmap) in __arith (0 <= balance state contract_address) Int256.modulus (balance state contract_address) H8)))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truerunStateT ((v <- Monad.ret (negb (me_caller (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (ZMicromega.ZTautoChecker_sound (Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt))) [] eq_refl (VarMap.find 0 (VarMap.Elt (Z.pos (shift_nat Int256.wordsize 1)))) (Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1))) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (...) (...))) (Morphisms.iff_flip_impl_subrelation ((...) = true) (balance state contract_address < Int256.modulus) (Z.ltb_lt (...) Int256.modulus) (ZMicromega.ZTautoChecker_sound (...) [] eq_refl (...) (...))))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr)))) =? me_address (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (ZMicromega.ZTautoChecker_sound (Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt))) [] eq_refl (VarMap.find 0 (VarMap.Elt (Z.pos (shift_nat Int256.wordsize 1)))) (Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1))) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (...) (...))) (Morphisms.iff_flip_impl_subrelation ((...) = true) (balance state contract_address < Int256.modulus) (Z.ltb_lt (...) Int256.modulus) (ZMicromega.ZTautoChecker_sound (...) [] eq_refl (...) (...))))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr)))))%int256);; guard v);; (v <- Monad.ret (me_callvalue (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (ZMicromega.ZTautoChecker_sound (Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt))) [] eq_refl (VarMap.find 0 (VarMap.Elt (Z.pos (shift_nat Int256.wordsize 1)))) (Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1))) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro ...) (Morphisms.iff_flip_impl_subrelation ... ... ... ...))) (Morphisms.iff_flip_impl_subrelation ((... <? Int256.modulus) = true) (balance state contract_address < Int256.modulus) (Z.ltb_lt (balance state contract_address) Int256.modulus) (ZMicromega.ZTautoChecker_sound (Tauto.IMPL ... None ...) [] eq_refl (VarMap.find 0 ...) (H6 contract_address))))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr)))) =? 0);; guard v);; spec1 <- Monad.ret (me_number (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (ZMicromega.ZTautoChecker_sound (Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := EnvRing.PEc 0 |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt))) [] eq_refl (VarMap.find 0 (VarMap.Elt (Z.pos (shift_nat Int256.wordsize 1)))) (Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1))) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (balance state backer_addr >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (conj (andb_true_intro (conj ... ...)) (Morphisms.iff_flip_impl_subrelation (... = true) (0 <= ...) (Z.geb_le ... 0) (ZMicromega.ZTautoChecker_sound ... [] eq_refl ... ...)))) (Morphisms.iff_flip_impl_subrelation ((balance state contract_address <? Int256.modulus) = true) (balance state contract_address < Int256.modulus) (Z.ltb_lt (balance state contract_address) Int256.modulus) (ZMicromega.ZTautoChecker_sound (Tauto.IMPL (Tauto.AND ... ...) None (Tauto.A Tauto.isProp ... tt)) [] eq_refl (VarMap.find 0 (VarMap.Branch ... ... VarMap.Empty)) (H6 contract_address))))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr)))));; spec2 <- gets Crowdfunding_max_block;; (if negb (Int256.ltu spec2 spec1) then Monad.ret tt else spec3 <- Monad.ret (me_balance (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (ZMicromega.ZTautoChecker_sound (Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := EnvRing.PEc 0; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := EnvRing.PEX 1 |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| RingMicromega.Flhs := ...; RingMicromega.Fop := RingMicromega.OpLe; RingMicromega.Frhs := ... |} tt) (Tauto.A Tauto.isProp {| RingMicromega.Flhs := ...; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := ... |} tt))) [] eq_refl (VarMap.find 0 (VarMap.Elt (Z.pos (shift_nat Int256.wordsize 1)))) (Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1))) H6 (eq_ind_r (fun z : Z => (0 <=? 0) && (0 <? Int256.modulus) && (z >=? 0) && (balance state contract_address + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => (...) && (...) && (... >=? 0) && (z <? Int256.modulus) = true) (andb_true_intro (conj (andb_true_intro (...)) (Morphisms.iff_flip_impl_subrelation (...) (...) (...) (...)))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr)))) (me_address (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (ZMicromega.ZTautoChecker_sound (Tauto.IMPL (Tauto.A Tauto.isProp {| RingMicromega.Flhs := ...; RingMicromega.Fop := RingMicromega.OpLt; RingMicromega.Frhs := ... |} tt) None (Tauto.AND (Tauto.A Tauto.isProp {| ... |} tt) (Tauto.A Tauto.isProp {| ... |} tt))) [] eq_refl (VarMap.find 0 (VarMap.Elt (Z.pos (...)))) (Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1))) H6 (eq_ind_r (fun z : Z => (...) && (...) && (z >=? 0) && (... + 0 <? Int256.modulus) = true) (eq_ind_r (fun z : Z => ... && ... && (...) = true) (andb_true_intro (conj (...) (...))) (Z.add_0_r (balance state contract_address))) (Z.sub_0_r (balance state backer_addr))))));; spec4 <- gets (fun s : GetHighData => get_default 0 (me_caller (make_machine_env contract_address state {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} address_accepts_funds_assumption (ZMicromega.ZTautoChecker_sound (Tauto.IMPL (Tauto.A Tauto.isProp {| ... |} tt) None (Tauto.AND (...) (...))) [] eq_refl (VarMap.find 0 (VarMap.Elt (...))) (Pos2Z.pos_is_pos (shift_nat Int256.wordsize 1))) H6 (eq_ind_r (fun z : Z => ... && ... && (...) = true) (eq_ind_r (fun ... => ... = true) (andb_true_intro (...)) (Z.add_0_r (...))) (Z.sub_0_r (balance state backer_addr))))) (Crowdfunding_backers s));; spec5 <- gets Crowdfunding_funded;; spec6 <- gets Crowdfunding_goal;; (if (spec4 =? 0) || (spec5 || (spec6 <=? spec3)) then Monad.ret tt else MonadState.modify (fun s : GetHighData => update_Crowdfunding_backers (set (me_caller (...)) 0 (Crowdfunding_backers s)) s);; Monad.ret tt;; d <- MonadState.get;; (let (success, d') := me_transfer (make_machine_env contract_address state {| ... |} address_accepts_funds_assumption (...) H6 (...)) (me_caller (...)) spec4 d in if (success =? Int256.one)%int256 then MonadState.put d' else mzero)))) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truematch runStateT (guard (negb (backer_addr =? contract_address)%int256)) (contract_state state) with | Some (_, s) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s) (block_number state)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s0) =? 0) || (Crowdfunding_funded s0 || (Crowdfunding_goal s0 <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr ... ... && address_accepts_funds_assumption ... contract_address backer_addr ... then (Int256.one, update_Outgoing_transfer_recipient_and_amount ... ...) else (Int256.zero, update_Crowdfunding_backers ... s1) in if (success =? Int256.one)%int256 then {| runStateT := ... |} else {| runStateT := ... |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s1)) s1) |}) s0 |}) s | None => None end = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
Case: (backer_addr =? contract_address)%int256 = truematch runStateT (guard (negb true)) (contract_state state) with | Some (_, s) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s) (block_number state)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s0) =? 0) || (Crowdfunding_funded s0 || (Crowdfunding_goal s0 <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr ... ... && address_accepts_funds_assumption ... contract_address backer_addr ... then (Int256.one, update_Outgoing_transfer_recipient_and_amount ... ...) else (Int256.zero, update_Crowdfunding_backers ... s1) in if (success =? Int256.one)%int256 then {| runStateT := ... |} else {| runStateT := ... |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s1)) s1) |}) s0 |}) s | None => None end = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
Case: (backer_addr =? contract_address)%int256 = falsematch runStateT (guard (negb false)) (contract_state state) with | Some (_, s) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s) (block_number state)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s0) =? 0) || (Crowdfunding_funded s0 || (Crowdfunding_goal s0 <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr ... ... && address_accepts_funds_assumption ... contract_address backer_addr ... then (Int256.one, update_Outgoing_transfer_recipient_and_amount ... ...) else (Int256.zero, update_Crowdfunding_backers ... s1) in if (success =? Int256.one)%int256 then {| runStateT := ... |} else {| runStateT := ... |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s1)) s1) |}) s0 |}) s | None => None end = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
Case: backer_addr = contract_addressmatch runStateT (guard (negb true)) (contract_state state) with | Some (_, s) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s) (block_number state)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s0) =? 0) || (Crowdfunding_funded s0 || (Crowdfunding_goal s0 <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr ... ... && address_accepts_funds_assumption ... contract_address backer_addr ... then (Int256.one, update_Outgoing_transfer_recipient_and_amount ... ...) else (Int256.zero, update_Crowdfunding_backers ... s1) in if (success =? Int256.one)%int256 then {| runStateT := ... |} else {| runStateT := ... |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s1)) s1) |}) s0 |}) s | None => None end = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
Case: (backer_addr =? contract_address)%int256 = falsematch runStateT (guard (negb false)) (contract_state state) with | Some (_, s) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s) (block_number state)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s0) =? 0) || (Crowdfunding_funded s0 || (Crowdfunding_goal s0 <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr ... ... && address_accepts_funds_assumption ... contract_address backer_addr ... then (Int256.one, update_Outgoing_transfer_recipient_and_amount ... ...) else (Int256.zero, update_Crowdfunding_backers ... s1) in if (success =? Int256.one)%int256 then {| runStateT := ... |} else {| runStateT := ... |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s1)) s1) |}) s0 |}) s | None => None end = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
Case: contract_address = backer_addrmatch runStateT (guard (negb true)) (contract_state state) with | Some (_, s) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s) (block_number state)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s0) =? 0) || (Crowdfunding_funded s0 || (Crowdfunding_goal s0 <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr ... ... && address_accepts_funds_assumption ... contract_address backer_addr ... then (Int256.one, update_Outgoing_transfer_recipient_and_amount ... ...) else (Int256.zero, update_Crowdfunding_backers ... s1) in if (success =? Int256.one)%int256 then {| runStateT := ... |} else {| runStateT := ... |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s1)) s1) |}) s0 |}) s | None => None end = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
Case: (backer_addr =? contract_address)%int256 = falsematch runStateT (guard (negb false)) (contract_state state) with | Some (_, s) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s) (block_number state)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s0) =? 0) || (Crowdfunding_funded s0 || (Crowdfunding_goal s0 <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr ... ... && address_accepts_funds_assumption ... contract_address backer_addr ... then (Int256.one, update_Outgoing_transfer_recipient_and_amount ... ...) else (Int256.zero, update_Crowdfunding_backers ... s1) in if (success =? Int256.one)%int256 then {| runStateT := ... |} else {| runStateT := ... |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s1)) s1) |}) s0 |}) s | None => None end = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
Case: (backer_addr =? contract_address)%int256 = falsematch runStateT (guard (negb false)) (contract_state state) with | Some (_, s) => runStateT (if negb (Int256.ltu (Crowdfunding_max_block s) (block_number state)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s0) =? 0) || (Crowdfunding_funded s0 || (Crowdfunding_goal s0 <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s1 : global_abstract_data_type => Some (tt, s1) |} else {| runStateT := fun s1 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr ... ... && address_accepts_funds_assumption ... contract_address backer_addr ... then (Int256.one, update_Outgoing_transfer_recipient_and_amount ... ...) else (Int256.zero, update_Crowdfunding_backers ... s1) in if (success =? Int256.one)%int256 then {| runStateT := ... |} else {| runStateT := ... |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s1)) s1) |}) s0 |}) s | None => None end = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
Case: (backer_addr =? contract_address)%int256 = falserunStateT (if negb (Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state)) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s) =? 0) || (Crowdfunding_funded s || (Crowdfunding_goal s <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr ...) (ContractModel.update_balances backer_addr contract_address 0 ...) && address_accepts_funds_assumption (Some ...) contract_address backer_addr (get_default 0 backer_addr ...) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some ...) (update_Crowdfunding_backers ... s0)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 ...) s0) in if (success =? Int256.one)%int256 then {| runStateT := fun ... => Some ... |} else {| runStateT := fun ... => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s0)) s0) |}) s |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = falserunStateT (if negb true then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (if (get_default 0 backer_addr (Crowdfunding_backers s) =? 0) || (Crowdfunding_funded s || (Crowdfunding_goal s <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s0 : global_abstract_data_type => Some (tt, s0) |} else {| runStateT := fun s0 : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr ...) (ContractModel.update_balances backer_addr contract_address 0 ...) && address_accepts_funds_assumption (Some ...) contract_address backer_addr (get_default 0 backer_addr ...) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some ...) (update_Crowdfunding_backers ... s0)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 ...) s0) in if (success =? Int256.one)%int256 then {| runStateT := fun ... => Some ... |} else {| runStateT := fun ... => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s0)) s0) |}) s |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = falserunStateT (if (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) || (Crowdfunding_funded (contract_state state) || (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = truerunStateT (if true || (Crowdfunding_funded (contract_state state) || (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = falserunStateT (if false || (Crowdfunding_funded (contract_state state) || (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) = 0runStateT (if true || (Crowdfunding_funded (contract_state state) || (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = falserunStateT (if false || (Crowdfunding_funded (contract_state state) || (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = falserunStateT (if false || (Crowdfunding_funded (contract_state state) || (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = falserunStateT (if false || (false || (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address)) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = truerunStateT (if false || (false || true) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = falserunStateT (if false || (false || false) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: Crowdfunding_goal (contract_state state) <= ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_addressrunStateT (if false || (false || true) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = falserunStateT (if false || (false || false) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: Crowdfunding_goal (contract_state state) <= balance state contract_addressrunStateT (if false || (false || true) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = falserunStateT (if false || (false || false) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = falserunStateT (if false || (false || false) then {| runStateT := fun s : global_abstract_data_type => Some (tt, s) |} else {| runStateT := fun s : global_abstract_data_type => runStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s)) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers s)) s) |}) (contract_state state) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = falserunStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && address_accepts_funds_assumption (Some (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = falserunStateT (let (success, d') := if noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = truerunStateT (let (success, d') := if true && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = falserunStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = trueSome (tt, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = falserunStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = trueSome (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state))); Crowdfunding_owner := Crowdfunding_owner (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_max_block := Crowdfunding_max_block (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_goal := Crowdfunding_goal (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_backers := Crowdfunding_backers (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_funded_msg := Crowdfunding_funded_msg (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_failed_msg := Crowdfunding_failed_msg (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) |}) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = falserunStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = trueSome (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state))); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |}) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = falserunStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = trueSome (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |}) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = falserunStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = trueSome (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |}) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = falserunStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addr(* The above is the successful claim case, I think.*)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = falserunStateT (let (success, d') := if false && true then (Int256.one, update_Outgoing_transfer_recipient_and_amount (Some (backer_addr, get_default 0 backer_addr (Crowdfunding_backers (contract_state state)))) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state))) else (Int256.zero, update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) in if (success =? Int256.one)%int256 then {| runStateT := fun _ : global_abstract_data_type => Some (tt, d') |} else {| runStateT := fun _ : global_abstract_data_type => None |}) (update_Crowdfunding_backers (set backer_addr 0 (Crowdfunding_backers (contract_state state))) (contract_state state)) = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: noOverflowOrUnderflowInTransfer contract_address backer_addr (get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) (ContractModel.update_balances backer_addr contract_address 0 (balance state)) = falseNone = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseNone = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
SSSSSCase: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false \/ (ContractModel.update_balances backer_addr contract_address 0 (balance state) backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseNone = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = falseNone = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (ContractModel.update_balances backer_addr contract_address 0 (balance state) backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseNone = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = falseFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (ContractModel.update_balances backer_addr contract_address 0 (balance state) backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseNone = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = falseFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false(forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false(forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = truecontract_address: addr
state: BlockchainState
backer_addr: elt(forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = truecontract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address(balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = truecontract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address0 <= balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state))contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_addressget_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <= sum (Crowdfunding_backers (contract_state state))contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
H1: get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <= sum (Crowdfunding_backers (contract_state state))0 <= balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state))contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_addressforall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
H1: get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <= sum (Crowdfunding_backers (contract_state state))0 <= balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state))contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
k: elt
v: Z
H1: get k (Crowdfunding_backers (contract_state state)) = Some vv >= 0contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
H1: get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <= sum (Crowdfunding_backers (contract_state state))0 <= balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state))contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
k: elt
v: Z
H1: v >= 0 /\ v < Int256.modulusv >= 0contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
H1: get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <= sum (Crowdfunding_backers (contract_state state))0 <= balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state))contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
k: elt
v: Z
H1: v >= 0
H2: v < Int256.modulusv >= 0contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
H1: get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <= sum (Crowdfunding_backers (contract_state state))0 <= balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state))lia.contract_address: addr
state: BlockchainState
backer_addr: elt
H: forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus
H0: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
H1: get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <= sum (Crowdfunding_backers (contract_state state))0 <= balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state))snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && ((if (backer_addr =? contract_address)%int256 then balance state contract_address else if (contract_address =? backer_addr)%int256 then balance state backer_addr - 0 else if (contract_address =? contract_address)%int256 then balance state contract_address + 0 else balance state contract_address) - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && ((if (backer_addr =? contract_address)%int256 then balance state contract_address else if (contract_address =? backer_addr)%int256 then balance state backer_addr - 0 else balance state contract_address + 0) - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && ((if (contract_address =? backer_addr)%int256 then balance state backer_addr - 0 else balance state contract_address + 0) - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address + 0 - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = trueFalse(* Here, we make use of a previous proof, sufficient_funds_safe *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: Safe balance_backedFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed stateFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: balance_backed state
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed stateFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: Crowdfunding_funded (contract_state state) = false -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address /\ (forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus)
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed stateFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed stateCrowdfunding_funded (contract_state state) = falsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulusFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulusFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulusFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? match get backer_addr (Crowdfunding_backers (contract_state state)) with | Some v => v | None => 0 end) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? match get backer_addr (Crowdfunding_backers (contract_state state)) with | Some v => v | None => 0 end) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: forall value : Z, get backer_addr (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? match get backer_addr (Crowdfunding_backers (contract_state state)) with | Some v => v | None => 0 end) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
z: Z
H11: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? z) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
z: Z
H11: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H12: Some z = Some z -> z >= 0 /\ z < Int256.modulus(0 <=? z) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
z: Z
H11: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H12: Some z = Some z -> z >= 0 /\ z < Int256.modulus
H13: Some z = Some z(0 <=? z) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
z: Z
H11: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H12: Some z = Some z -> z >= 0 /\ z < Int256.modulus
H13: z >= 0 /\ z < Int256.modulus(0 <=? z) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
z: Z
H11: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H12: Some z = Some z -> z >= 0 /\ z < Int256.modulus
H13: z >= 0
H14: z < Int256.modulus(0 <=? z) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
z: Z
H11: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H12: Some z = Some z -> z >= 0 /\ z < Int256.modulus
H13: z >= 0
H14: z < Int256.modulus0 <= zsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <=? 0) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus0 <= 0snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true(get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true(match get backer_addr (Crowdfunding_backers (contract_state state)) with | Some v => v | None => 0 end <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true(match get backer_addr (Crowdfunding_backers (contract_state state)) with | Some v => v | None => 0 end <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, get backer_addr (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus(match get backer_addr (Crowdfunding_backers (contract_state state)) with | Some v => v | None => 0 end <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
z: Z
H12: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus(z <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
z: Z
H12: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H13: Some z = Some z -> z >= 0 /\ z < Int256.modulus(z <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
z: Z
H12: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H13: Some z = Some z -> z >= 0 /\ z < Int256.modulus
H14: Some z = Some z(z <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
z: Z
H12: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H13: Some z = Some z -> z >= 0 /\ z < Int256.modulus
H14: z >= 0 /\ z < Int256.modulus(z <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
z: Z
H12: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H13: Some z = Some z -> z >= 0 /\ z < Int256.modulus
H14: z >= 0
H15: z < Int256.modulus(z <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
z: Z
H12: forall value : Z, Some z = Some value -> value >= 0 /\ value < Int256.modulus
H13: Some z = Some z -> z >= 0 /\ z < Int256.modulus
H14: z >= 0
H15: z < Int256.modulusz < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus(0 <? Int256.modulus) = truesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus0 < Int256.modulussnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: forall value : Z, None = Some value -> value >= 0 /\ value < Int256.modulus0 < Z.pos (shift_nat Int256.wordsize 1)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && true && (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true && true && true = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsediscriminate.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: true = false
H9: (forall (k : elt) (v : Z), get k (Crowdfunding_backers (contract_state state)) = Some v -> v >= 0 /\ v < Int256.modulus) -> sum (Crowdfunding_backers (contract_state state)) <= balance state contract_address -> (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
sufficient_funds_safe: forall (state : BlockchainState) (s : Step) (l : list Step), ReachableFromBy initial_state state s l -> balance_backed state
H: (balance state contract_address - get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) >=? 0) = true
H10: forall (key : elt) (value : Z32), get key (Crowdfunding_backers (contract_state state)) = Some value -> value >= 0 /\ value < Int256.modulus
H11: (0 <=? get_default 0 backer_addr (Crowdfunding_backers (contract_state state))) = true
H12: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = trueFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (ContractModel.update_balances backer_addr contract_address 0 (balance state) backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseNone = Some (tt, {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := false; Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |})snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (ContractModel.update_balances backer_addr contract_address 0 (balance state) backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (ContractModel.update_balances backer_addr contract_address 0 (balance state) backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: ((if (backer_addr =? contract_address)%int256 then balance state backer_addr else if (backer_addr =? backer_addr)%int256 then balance state backer_addr - 0 else if (backer_addr =? contract_address)%int256 then balance state contract_address + 0 else balance state backer_addr) + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: ((if (backer_addr =? contract_address)%int256 then balance state backer_addr else balance state backer_addr - 0) + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addr(* rewrite Int256.eq_false in H8 by auto. *)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (balance state backer_addr - 0 + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = true
SSSCase: Crowdfunding_funded (contract_state state) = false
H4: false = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
SCase: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true
H7: true = true
Case: (backer_addr =? contract_address)%int256 = false
SSCase: (get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) =? 0) = false
SSSSCase: (Crowdfunding_goal (contract_state state) <=? ContractModel.update_balances backer_addr contract_address 0 (balance state) contract_address) = false
H8: (balance state backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrstate: BlockchainState
backer_addr: elt
backed_amount: Z
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H3: (balance state backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = true
H8: (balance state backer_addr + get_default 0 backer_addr (Crowdfunding_backers (contract_state state)) <? Int256.modulus) = falseFalsesnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueOutgoing_transfer_recipient_and_amount {| Outgoing_transfer_recipient_and_amount := Some (backer_addr, backed_amount); Crowdfunding_owner := Crowdfunding_owner (contract_state state); Crowdfunding_max_block := Crowdfunding_max_block (contract_state state); Crowdfunding_goal := Crowdfunding_goal (contract_state state); Crowdfunding_backers := set backer_addr 0 (Crowdfunding_backers (contract_state state)); Crowdfunding_funded := Crowdfunding_funded (contract_state state); Crowdfunding_deadlinePassed_msg := Crowdfunding_deadlinePassed_msg (contract_state state); Crowdfunding_successfullyDonated_msg := Crowdfunding_successfullyDonated_msg (contract_state state); Crowdfunding_alreadyDonated_msg := Crowdfunding_alreadyDonated_msg (contract_state state); Crowdfunding_funded_msg := Crowdfunding_funded_msg (contract_state state); Crowdfunding_failed_msg := Crowdfunding_failed_msg (contract_state state); Crowdfunding_too_early_to_claim_funds_msg := Crowdfunding_too_early_to_claim_funds_msg (contract_state state); Crowdfunding_too_early_to_reclaim_msg := Crowdfunding_too_early_to_reclaim_msg (contract_state state); Crowdfunding_cannot_refund_msg := Crowdfunding_cannot_refund_msg (contract_state state); Crowdfunding_here_is_your_money_msg := Crowdfunding_here_is_your_money_msg (contract_state state) |} = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = trueSome (backer_addr, backed_amount) = Some (backer_addr, backed_amount)snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrsnapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = truecallvalue {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = 0 /\ caller {| origin := backer_addr; caller := backer_addr; callvalue := 0; coinbase := Int256.zero; chainid := Int256.zero |} = backer_addrauto. (* These are the conditions to ensure that the action is reasonably callable by the backer. *) Qed.snapshot_timestamp, snapshot_number: int256
snapshot_blockhash: int256 -> int256
snapshot_balances: addr -> wei
snapshot_balances_valid_prf: forall a : addr, 0 <= snapshot_balances a < Int256.modulus
contract_address: addr
address_accepts_funds: option ContractState -> addr -> addr -> wei -> bool
HmemOps, memModelOps: MemoryModelOps mem
state: BlockchainState
s: Step
l: list Step
backer_addr: elt
backed_amount: Z
H: ReachableFromBy initial_state state s l
H0: backed_amount = get_default 0 backer_addr (Crowdfunding_backers (contract_state state))
H1: contract_address <> backer_addr
H2: backed_amount > 0
H3: (balance state backer_addr + backed_amount <? Int256.modulus) = true
H4: Crowdfunding_funded (contract_state state) = false
H5: balance state contract_address < Crowdfunding_goal (contract_state state)
H6: forall a : addr, 0 <= balance state a < Int256.modulus
H7: Int256.ltu (Crowdfunding_max_block (contract_state state)) (block_number state) = true0 = 0 /\ backer_addr = backer_addr
Thank you!
I would like to thank my supervisor Professor Steve Reeves at the University of Waikato and Vilhelm Sjöberg at CertiK for their valuable insights and input.
I would also like to thank Associate Professor Jing Sun and the University of Auckland for kindly hosting me during this research.
In addition, thanks to the University of Waikato for providing the funds for me to attend this workshop.
Extra References