Closed sskeirik closed 3 years ago
Things to check for the super-long build time:
z3 --version
>= 4.8.6. Check if Z3 is running for ridiculously long amounts of time.--heuristic oqbaR
: https://github.com/runtimeverification/algorand-sc-semantics/blob/master/Makefile#L245priority(...)
to tell the LLVM backend to manually partition the rules.You can use configuration fragments instead for storing state, which you can see an example of in KEVM:
syntax InternalOp ::= "#pushCallStack"
// --------------------------------------
rule <k> #pushCallStack => . ... </k>
<callStack> (.List => ListItem(<callState> CALLSTATE </callState>)) ... </callStack>
<callState> CALLSTATE </callState>
syntax InternalOp ::= "#popCallStack"
// -------------------------------------
rule <k> #popCallStack => . ... </k>
<callStack> (ListItem(<callState> CALLSTATE </callState>) => .List) ... </callStack>
<callState> _ => CALLSTATE </callState>
syntax InternalOp ::= "#dropCallStack"
// --------------------------------------
rule <k> #dropCallStack => . ... </k>
<callStack> (ListItem(_) => .List) ... </callStack>
Example from KEVM: https://github.com/kframework/evm-semantics/blob/master/evm.md#the-callstack
Fixes: runtimeverification/firefly-michelson#6