
xref_check(G,R,X,missing) :- xref_missing(G,R,X).
xref_check(G,R,X,is_consistent/U) :- xref_consistent(G,R,X,U).
xref_check(G,R,X,is_inconsistent/R2) :- xref_inconsistent(G,R,X,R2).


xref_consistent(G,R,X) :-
        xref_inf(G,R,X),
        entity_xref(G,R).

xref_consistent(G,R,X,U) :-
        xref_consistent(G,R,X),
        (   xref_inf(G,R2,_X2),
            R\=R2
        ->  (   xref_inf(G2,R,_),
                G2\=G
            ->  U=many_to_many
            ;   U=one_to_many)
        ;   (   xref_inf(G2,R,_),
                G2\=G
            ->  U=many_to_one
            ;   U=one_to_one)).

xref_missing(G,R,X) :-
        xref_inf(G,R,X),
        \+ xref_consistent(G,_,_),
        \+ entity_xref_idspace(G,_,'RHEA').


xref_inconsistent(G,R,X,R2) :-
        xref_inf(G,R,X),
        \+ xref_consistent(G,_,_),
        entity_xref_idspace(G,R2,'RHEA'),
        R2\=R.


xref_inf(G,R,X) :-
        entity_xref(G,X),
        id_idspace(G,'GO'),
        entity_xref(R,X),
        id_idspace(R,'RHEA').

        