check_transition(bop(Name,NumberArgs,NumberResults,ArgPatterns,ResPatterns),
Transition,SrcNode,_DstNode) :-
!, functor(Op,Name,NumberArgs),
( NumberResults == 0 -> Transition = Op
; otherwise ->
Transition = '-->'(Op,ReturnValues),
length(ReturnValues,NumberResults),
check_bop_res_patterns(ResPatterns,SrcNode,State,ReturnValues)),
check_bop_arg_patterns(ArgPatterns,SrcNode,State,Op).
check_transition(btrans(TransPred),Transition,SrcNode,DstNode) :-
!, check_eventb_transition(TransPred,Transition,SrcNode,DstNode).
check_transition(csp(Channel,Arity,Args),Transition,_SrcNode,_DstNode) :-
!, check_csp_event(Channel,Arity,Args,Transition).
check_transition(xtl(Op,Arity,PatternArgs),Transition,_SrcNode,_DstNode) :-
!, check_xtl_transition(Op,Arity,PatternArgs,Transition).
check_transition(plugin_transition_check(Id,Predicate),Transition,_SrcNode,_DstNode) :-
!, plugin_evaluate_transition_predicate(Id,Predicate,Transition).
check_transition(Spec,_Trans,_SrcNode,_DstNode) :-
functor(Spec,Name,Arity), add_error(ltl, 'Unknown transition specification: ', Name/Arity), fail.