Skip to content

Long Contract - Remove Commit NEXT statements when that variable is not used

The file data/regression/supported_features/SimpleFunction2.sol is easy and should be solved very quickly, but it does not. I suspect that this is due to the require statement commit stage being added to every function regardless of if there is a require statement, but I do not know for sure.

  • The goal of this issue is to get SimpleFunction2 working in under a minute.

See the SMV output from this command: -debug -loglevel debug -run solve -input data/regression/supported_features/SimpleFunction2.sol !x

MODULE main
VAR
NuSMVState : {
    start,SimpleFunction2_constructor_ConstructorEntryState_ln0,SimpleFunction2_constructor_DataChangeState_ln1,SimpleFunction2_constructor_FunctionSuccessState_ln2,LoopState,SimpleFunction2_func1_FunctionEntryState_ln0,SimpleFunction2_func2a_FunctionEntryState_ln0,SimpleFunction2_func2aa_FunctionEntryState_ln0,SimpleFunction2_func2aaa_FunctionEntryState_ln0,SimpleFunction2_func3_FunctionEntryState_ln0,SimpleFunction2_func4_FunctionEntryState_ln0,SimpleFunction2__FunctionEntryState_ln0,SimpleFunction2_func1_FunctionSuccessState_ln1,SimpleFunction2_func2a_DataChangeState_ln1,SimpleFunction2_func2aa_DataChangeState_ln1,SimpleFunction2_func2aaa_DataChangeState_ln1,SimpleFunction2_func3_DataChangeState_ln1,SimpleFunction2_func4_FunctionSuccessState_ln1,SimpleFunction2__FunctionSuccessState_ln1,SimpleFunction2_func2a_DataChangeState_ln2,SimpleFunction2_func2aa_DataChangeState_ln2,SimpleFunction2_func2aaa_DataChangeState_ln2,SimpleFunction2_func3_FunctionSuccessState_ln2,SimpleFunction2_func2a_DataChangeState_ln3,SimpleFunction2_func2aa_DataChangeState_ln3,SimpleFunction2_func2aaa_DataChangeState_ln3,SimpleFunction2_func2a_FunctionSuccessState_ln4,SimpleFunction2_func2aa_FunctionSuccessState_ln4,SimpleFunction2_func2aaa_FunctionSuccessState_ln4
};
__QueryName : {
    ValueReachabilityQuery_0,ValueReachabilityQuery_1,ValueReachabilityQuery_2,ValueReachabilityQuery_3,ValueReachabilityQuery_4,ValueReachabilityQuery_5,ValueReachabilityQuery_6,ValueReachabilityQuery_7,ValueReachabilityQuery_8,ValueReachabilityQuery_9,ValueReachabilityQuery_10,ValueReachabilityQuery_11
};
contract1 : contract_SimpleFunction2(NuSMVState,__QueryName);
IVAR
nextFunc : {LoopState,SimpleFunction2_func1_FunctionEntryState_ln0,SimpleFunction2_func2a_FunctionEntryState_ln0,SimpleFunction2_func2aa_FunctionEntryState_ln0,SimpleFunction2_func2aaa_FunctionEntryState_ln0,SimpleFunction2_func3_FunctionEntryState_ln0,SimpleFunction2_func4_FunctionEntryState_ln0,SimpleFunction2__FunctionEntryState_ln0};
ASSIGN
init(NuSMVState) := start;
next(NuSMVState) := case
    NuSMVState = LoopState : nextFunc;
    NuSMVState = start : SimpleFunction2_constructor_ConstructorEntryState_ln0;
    NuSMVState = SimpleFunction2_constructor_ConstructorEntryState_ln0 : SimpleFunction2_constructor_DataChangeState_ln1;
    NuSMVState = SimpleFunction2_constructor_DataChangeState_ln1 : SimpleFunction2_constructor_FunctionSuccessState_ln2;
    NuSMVState = SimpleFunction2_constructor_FunctionSuccessState_ln2 : LoopState;
    NuSMVState = SimpleFunction2_func1_FunctionEntryState_ln0 : SimpleFunction2_func1_FunctionSuccessState_ln1;
    NuSMVState = SimpleFunction2_func2a_FunctionEntryState_ln0 : SimpleFunction2_func2a_DataChangeState_ln1;
    NuSMVState = SimpleFunction2_func2aa_FunctionEntryState_ln0 : SimpleFunction2_func2aa_DataChangeState_ln1;
    NuSMVState = SimpleFunction2_func2aaa_FunctionEntryState_ln0 : SimpleFunction2_func2aaa_DataChangeState_ln1;
    NuSMVState = SimpleFunction2_func3_FunctionEntryState_ln0 : SimpleFunction2_func3_DataChangeState_ln1;
    NuSMVState = SimpleFunction2_func4_FunctionEntryState_ln0 : SimpleFunction2_func4_FunctionSuccessState_ln1;
    NuSMVState = SimpleFunction2__FunctionEntryState_ln0 : SimpleFunction2__FunctionSuccessState_ln1;
    NuSMVState = SimpleFunction2_func1_FunctionSuccessState_ln1 : LoopState;
    NuSMVState = SimpleFunction2_func2a_DataChangeState_ln1 : SimpleFunction2_func2a_DataChangeState_ln2;
    NuSMVState = SimpleFunction2_func2aa_DataChangeState_ln1 : SimpleFunction2_func2aa_DataChangeState_ln2;
    NuSMVState = SimpleFunction2_func2aaa_DataChangeState_ln1 : SimpleFunction2_func2aaa_DataChangeState_ln2;
    NuSMVState = SimpleFunction2_func3_DataChangeState_ln1 : SimpleFunction2_func3_FunctionSuccessState_ln2;
    NuSMVState = SimpleFunction2_func4_FunctionSuccessState_ln1 : LoopState;
    NuSMVState = SimpleFunction2__FunctionSuccessState_ln1 : LoopState;
    NuSMVState = SimpleFunction2_func2a_DataChangeState_ln2 : SimpleFunction2_func2a_DataChangeState_ln3;
    NuSMVState = SimpleFunction2_func2aa_DataChangeState_ln2 : SimpleFunction2_func2aa_DataChangeState_ln3;
    NuSMVState = SimpleFunction2_func2aaa_DataChangeState_ln2 : SimpleFunction2_func2aaa_DataChangeState_ln3;
    NuSMVState = SimpleFunction2_func3_FunctionSuccessState_ln2 : LoopState;
    NuSMVState = SimpleFunction2_func2a_DataChangeState_ln3 : SimpleFunction2_func2a_FunctionSuccessState_ln4;
    NuSMVState = SimpleFunction2_func2aa_DataChangeState_ln3 : SimpleFunction2_func2aa_FunctionSuccessState_ln4;
    NuSMVState = SimpleFunction2_func2aaa_DataChangeState_ln3 : SimpleFunction2_func2aaa_FunctionSuccessState_ln4;
    NuSMVState = SimpleFunction2_func2a_FunctionSuccessState_ln4 : LoopState;
    NuSMVState = SimpleFunction2_func2aa_FunctionSuccessState_ln4 : LoopState;
    NuSMVState = SimpleFunction2_func2aaa_FunctionSuccessState_ln4 : LoopState;
    TRUE: NuSMVState;
esac;

MODULE contract_SimpleFunction2(NuSMVState,__QueryName)
-- Smart Contract "SimpleFunction2" was generated from file: "D:\Work\Masters_Phd\workspace (GradSchool)\solidity-safety-to-model-checking\data\regression\supported_features\SimpleFunction2.sol"
-- Contract Number: 1
DEFINE
CTLSPEC NAME ValueReachabilityQuery_0 := AG !(__QueryName = ValueReachabilityQuery_0 & NuSMVState = LoopState & a = 10);
CTLSPEC NAME ValueReachabilityQuery_1 := AG !(__QueryName = ValueReachabilityQuery_1 & NuSMVState = LoopState & aa = 11);
CTLSPEC NAME ValueReachabilityQuery_2 := AG !(__QueryName = ValueReachabilityQuery_2 & NuSMVState = LoopState & aaa = 12);
CTLSPEC NAME ValueReachabilityQuery_3 := AG !(__QueryName = ValueReachabilityQuery_3 & NuSMVState = LoopState & a = 20);
CTLSPEC NAME ValueReachabilityQuery_4 := AG !(__QueryName = ValueReachabilityQuery_4 & NuSMVState = LoopState & aa = 31);
CTLSPEC NAME ValueReachabilityQuery_5 := AG !(__QueryName = ValueReachabilityQuery_5 & NuSMVState = LoopState & aaa = 42);
CTLSPEC NAME ValueReachabilityQuery_6 := AG !(__QueryName = ValueReachabilityQuery_6 & NuSMVState = LoopState & a = 11);
CTLSPEC NAME ValueReachabilityQuery_7 := AG !(__QueryName = ValueReachabilityQuery_7 & NuSMVState = LoopState & a = 12);
CTLSPEC NAME ValueReachabilityQuery_8 := AG !(__QueryName = ValueReachabilityQuery_8 & NuSMVState = LoopState & aa = 10);
CTLSPEC NAME ValueReachabilityQuery_9 := AG !(__QueryName = ValueReachabilityQuery_9 & NuSMVState = LoopState & aa = 12);
CTLSPEC NAME ValueReachabilityQuery_10 := AG !(__QueryName = ValueReachabilityQuery_10 & NuSMVState = LoopState & aaa = 10);
CTLSPEC NAME ValueReachabilityQuery_11 := AG !(__QueryName = ValueReachabilityQuery_11 & NuSMVState = LoopState & aaa = 11);
VAR
aa : 0 .. 200;
NuSMVTemp_aa : 0 .. 200;
aaa : 0 .. 200;
NuSMVTemp_aaa : 0 .. 200;
a : 0 .. 200;
NuSMVTemp_a : 0 .. 200;
total : 0 .. 200;
NuSMVTemp_total : 0 .. 200;
-- Function: function func2aa() private view returns(uint) 
a12 : 0 .. 200;
b22 : 0 .. 200;
-- Function: function func2a() private view returns(uint) 
a1 : 0 .. 200;
b2 : 0 .. 200;
-- Function: function func2aaa() private view returns(uint) 
a13 : 0 .. 200;
b23 : 0 .. 200;
-- Function: function func4(uint b) public view returns(bool) 
b : 0 .. 200;
ASSIGN
init(NuSMVTemp_aa) := 11;
init(aa) := 11;
init(NuSMVTemp_aaa) := 12;
init(aaa) := 12;
init(NuSMVTemp_a) := 10;
init(a) := 10;
init(NuSMVTemp_total) := 0;
init(total) := 0;
-- Function: function func2aa() private view returns(uint) 
init(a12) := 0;
init(b22) := 0;
-- Function: function func2a() private view returns(uint) 
init(a1) := 0;
init(b2) := 0;
-- Function: function func2aaa() private view returns(uint) 
init(a13) := 0;
init(b23) := 0;
next(NuSMVTemp_aa) := case
    NuSMVState = SimpleFunction2_func2aa_FunctionEntryState_ln0 : aa;
    NuSMVState = SimpleFunction2_func2aa_DataChangeState_ln3 : max(0, (NuSMVTemp_aa + 20) mod 200);
    NuSMVState = SimpleFunction2__FunctionEntryState_ln0 : aa;
    NuSMVState = SimpleFunction2_func2a_FunctionEntryState_ln0 : aa;
    NuSMVState = SimpleFunction2_func2aaa_FunctionEntryState_ln0 : aa;
    NuSMVState = SimpleFunction2_func4_FunctionEntryState_ln0 : aa;
    NuSMVState = SimpleFunction2_func1_FunctionEntryState_ln0 : aa;
    NuSMVState = SimpleFunction2_func3_FunctionEntryState_ln0 : aa;
    TRUE : NuSMVTemp_aa;
esac;
next(NuSMVTemp_aaa) := case
    NuSMVState = SimpleFunction2_func2aa_FunctionEntryState_ln0 : aaa;
    NuSMVState = SimpleFunction2__FunctionEntryState_ln0 : aaa;
    NuSMVState = SimpleFunction2_func2a_FunctionEntryState_ln0 : aaa;
    NuSMVState = SimpleFunction2_func2aaa_FunctionEntryState_ln0 : aaa;
    NuSMVState = SimpleFunction2_func2aaa_DataChangeState_ln3 : max(0, (NuSMVTemp_aaa + 30) mod 200);
    NuSMVState = SimpleFunction2_func4_FunctionEntryState_ln0 : aaa;
    NuSMVState = SimpleFunction2_func1_FunctionEntryState_ln0 : aaa;
    NuSMVState = SimpleFunction2_func3_FunctionEntryState_ln0 : aaa;
    TRUE : NuSMVTemp_aaa;
esac;
next(NuSMVTemp_a) := case
    NuSMVState = SimpleFunction2_func2aa_FunctionEntryState_ln0 : a;
    NuSMVState = SimpleFunction2__FunctionEntryState_ln0 : a;
    NuSMVState = SimpleFunction2_func2a_FunctionEntryState_ln0 : a;
    NuSMVState = SimpleFunction2_func2a_DataChangeState_ln3 : max(0, (NuSMVTemp_a + 10) mod 200);
    NuSMVState = SimpleFunction2_func2aaa_FunctionEntryState_ln0 : a;
    NuSMVState = SimpleFunction2_func4_FunctionEntryState_ln0 : a;
    NuSMVState = SimpleFunction2_func1_FunctionEntryState_ln0 : a;
    NuSMVState = SimpleFunction2_func3_FunctionEntryState_ln0 : a;
    TRUE : NuSMVTemp_a;
esac;
next(NuSMVTemp_total) := case
    NuSMVState = SimpleFunction2_func2aa_FunctionEntryState_ln0 : total;
    NuSMVState = SimpleFunction2__FunctionEntryState_ln0 : total;
    NuSMVState = SimpleFunction2_func2a_FunctionEntryState_ln0 : total;
    NuSMVState = SimpleFunction2_func2aaa_FunctionEntryState_ln0 : total;
    NuSMVState = SimpleFunction2_func4_FunctionEntryState_ln0 : total;
    NuSMVState = SimpleFunction2_func1_FunctionEntryState_ln0 : total;
    NuSMVState = SimpleFunction2_func3_FunctionEntryState_ln0 : total;
    NuSMVState = SimpleFunction2_func3_DataChangeState_ln1 : max(0, (total + 1) mod 200);
    TRUE : NuSMVTemp_total;
esac;
next(aa) := case
    NuSMVState = SimpleFunction2_constructor_FunctionSuccessState_ln2 : NuSMVTemp_aa;
    NuSMVState = SimpleFunction2_func2aa_FunctionSuccessState_ln4 : NuSMVTemp_aa;
    NuSMVState = SimpleFunction2__FunctionSuccessState_ln1 : NuSMVTemp_aa;
    NuSMVState = SimpleFunction2_func2a_FunctionSuccessState_ln4 : NuSMVTemp_aa;
    NuSMVState = SimpleFunction2_func2aaa_FunctionSuccessState_ln4 : NuSMVTemp_aa;
    NuSMVState = SimpleFunction2_func4_FunctionSuccessState_ln1 : NuSMVTemp_aa;
    NuSMVState = SimpleFunction2_func1_FunctionSuccessState_ln1 : NuSMVTemp_aa;
    NuSMVState = SimpleFunction2_func3_FunctionSuccessState_ln2 : NuSMVTemp_aa;
    TRUE : aa;
esac;
next(aaa) := case
    NuSMVState = SimpleFunction2_constructor_FunctionSuccessState_ln2 : NuSMVTemp_aaa;
    NuSMVState = SimpleFunction2_func2aa_FunctionSuccessState_ln4 : NuSMVTemp_aaa;
    NuSMVState = SimpleFunction2__FunctionSuccessState_ln1 : NuSMVTemp_aaa;
    NuSMVState = SimpleFunction2_func2a_FunctionSuccessState_ln4 : NuSMVTemp_aaa;
    NuSMVState = SimpleFunction2_func2aaa_FunctionSuccessState_ln4 : NuSMVTemp_aaa;
    NuSMVState = SimpleFunction2_func4_FunctionSuccessState_ln1 : NuSMVTemp_aaa;
    NuSMVState = SimpleFunction2_func1_FunctionSuccessState_ln1 : NuSMVTemp_aaa;
    NuSMVState = SimpleFunction2_func3_FunctionSuccessState_ln2 : NuSMVTemp_aaa;
    TRUE : aaa;
esac;
next(a) := case
    NuSMVState = SimpleFunction2_constructor_FunctionSuccessState_ln2 : NuSMVTemp_a;
    NuSMVState = SimpleFunction2_func2aa_FunctionSuccessState_ln4 : NuSMVTemp_a;
    NuSMVState = SimpleFunction2__FunctionSuccessState_ln1 : NuSMVTemp_a;
    NuSMVState = SimpleFunction2_func2a_FunctionSuccessState_ln4 : NuSMVTemp_a;
    NuSMVState = SimpleFunction2_func2aaa_FunctionSuccessState_ln4 : NuSMVTemp_a;
    NuSMVState = SimpleFunction2_func4_FunctionSuccessState_ln1 : NuSMVTemp_a;
    NuSMVState = SimpleFunction2_func1_FunctionSuccessState_ln1 : NuSMVTemp_a;
    NuSMVState = SimpleFunction2_func3_FunctionSuccessState_ln2 : NuSMVTemp_a;
    TRUE : a;
esac;
next(total) := case
    NuSMVState = SimpleFunction2_constructor_FunctionSuccessState_ln2 : NuSMVTemp_total;
    NuSMVState = SimpleFunction2_func2aa_FunctionSuccessState_ln4 : NuSMVTemp_total;
    NuSMVState = SimpleFunction2__FunctionSuccessState_ln1 : NuSMVTemp_total;
    NuSMVState = SimpleFunction2_func2a_FunctionSuccessState_ln4 : NuSMVTemp_total;
    NuSMVState = SimpleFunction2_func2aaa_FunctionSuccessState_ln4 : NuSMVTemp_total;
    NuSMVState = SimpleFunction2_func4_FunctionSuccessState_ln1 : NuSMVTemp_total;
    NuSMVState = SimpleFunction2_func1_FunctionSuccessState_ln1 : NuSMVTemp_total;
    NuSMVState = SimpleFunction2_func3_FunctionSuccessState_ln2 : NuSMVTemp_total;
    TRUE : total;
esac;
-- Function: function func2aa() private view returns(uint) 
next(a12) := case
    NuSMVState = SimpleFunction2_func2aa_FunctionEntryState_ln0 : a12;
    NuSMVState = SimpleFunction2_func2aa_DataChangeState_ln1 : 1;
    TRUE : a12;
esac;
next(b22) := case
    NuSMVState = SimpleFunction2_func2aa_FunctionEntryState_ln0 : b22;
    NuSMVState = SimpleFunction2_func2aa_DataChangeState_ln2 : 2;
    TRUE : b22;
esac;
-- Function: function func2a() private view returns(uint) 
next(a1) := case
    NuSMVState = SimpleFunction2_func2a_FunctionEntryState_ln0 : a1;
    NuSMVState = SimpleFunction2_func2a_DataChangeState_ln1 : 1;
    TRUE : a1;
esac;
next(b2) := case
    NuSMVState = SimpleFunction2_func2a_FunctionEntryState_ln0 : b2;
    NuSMVState = SimpleFunction2_func2a_DataChangeState_ln2 : 2;
    TRUE : b2;
esac;
-- Function: function func2aaa() private view returns(uint) 
next(a13) := case
    NuSMVState = SimpleFunction2_func2aaa_FunctionEntryState_ln0 : a13;
    NuSMVState = SimpleFunction2_func2aaa_DataChangeState_ln1 : 1;
    TRUE : a13;
esac;
next(b23) := case
    NuSMVState = SimpleFunction2_func2aaa_FunctionEntryState_ln0 : b23;
    NuSMVState = SimpleFunction2_func2aaa_DataChangeState_ln2 : 2;
    TRUE : b23;
esac;
-- Function: function func4(uint b) public view returns(bool) 
next(b) := case
    NuSMVState = SimpleFunction2_func4_FunctionEntryState_ln0 : b;
    TRUE : b;
esac;
Edited by Jon Shahen