b_execute_statement2(case(Expression,Cases,Else), _, LocalState, InState, OutState,WF,case(Nr,Path),OR) :- !,
% According to the AtelierB handbook the cases must be distinct one-by-one; Schneider's book does not seem to require that
% ProB will at the moment allow multiple entries in which case CASE is non-deterministic
% Atelier-B will actually only allow literal integers, booleans, enumerated set values as cases !
b_compute_expression(Expression,LocalState,InState,EValue,WF),
b_compute_cases(Cases,LocalState,InState,CompCases,AllEitherValues,WF),
ground_det_wait_flag(WF),
( nth1(Nr, CompCases, comp_case_or(ListOfValues, Body)),
member(EitherValue,ListOfValues),
equal_object_wf(EValue,EitherValue,case_statement,WF),
ground_det_wait_flag(WF),
b_execute_inner_statement(Body,LocalState,InState,OutState,WF,Path,OR)
; b_not_member_of_value_lists(AllEitherValues,EValue,WF),
ground_det_wait_flag(WF),
% print_message(else_case(Body2)),
Nr=else,
b_execute_inner_statement(Else,LocalState,InState,OutState,WF,Path,OR)
).