It is impossible that Brian is yellow. It is impossible that John grabbed the apple. It is certain that Greg is a rhino. It is highly likely that if either 'Brian is yellow' or 'John grabbed the apple' but not both then Yann is tired. It is certain that if 'Brian is yellow and John grabbed the apple' then Sandra left the milk. It is probably not the case that if 'John grabbed the apple' or 'Greg is a rhino' or both then Lily is white.
It is certain that either 'Greg is a rhino' or 'Yann is tired' but not both.
It is certain that either 'Greg is a rhino' or 'Yann is tired' but not both.
There is almost no chance that either 'Greg is a rhino' or 'Yann is tired' but not both.

  and(A,B) :- A,B.
  or(A,B) :- A;B.
  nand(A,B) :- not(and(A,B)).
  nor(A,B) :- not(or(A,B)).
  xor(A,B) :- or(A,B), nand(A,B).

  %hop0
  0.0::factA.
  0.0::factB.
  1.0::factC.
  %hop1
  0.9::factX:-xor(factA,factB).
  1.0::factY:-and(factA,factB).
  0.25::factZ:-or(factB,factC).

  %hop2
  conclusion:-xor(factC,factX).

  query(conclusion).
  
Either 'Greg is a rhino' or 'Yann is tired' but not both.