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.