It is highly likely that Sandra grabbed the milk. There is almost no chance that Brian is yellow. It is improbable that John moved to the garden. There is a very good chance that if 'Brian is yellow and Sandra grabbed the milk' then Julius is gray. It is impossible that if 'Sandra grabbed the milk and John moved to the garden' then Bernhard is green. There is a better than even chance that if either 'John moved to the garden' or 'Sandra grabbed the milk' but not both then Greg is a rhino.
It is impossible that either 'Greg is a rhino' or 'Sandra grabbed the milk' but not both.
Chances are about even that either 'Greg is a rhino' or 'Sandra grabbed the milk' but not both.
It is impossible that either 'Greg is a rhino' or 'Sandra grabbed the milk' 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.9::factA.
  0.02::factB.
  0.1::factC.
  %hop1
  0.8::factX:-and(factB,factA).
  0.0::factY:-and(factA,factC).
  0.6::factZ:-xor(factC,factA).

  %hop2
  conclusion:-xor(factZ,factA).

  query(conclusion).
  
Either 'Greg is a rhino' or 'Sandra grabbed the milk' but not both.