There is little chance that John grabbed the milk. It is probably not the case that Lily is yellow. It is probably the case that Mary got the football. It is highly likely that if 'Mary got the football and Lily is yellow' then Bernhard is a rhino. It is probable that if 'Mary got the football' or 'John grabbed the milk' or both then Antoine is thirsty. There is almost no chance that if either 'John grabbed the milk' or 'Mary got the football' but not both then Brian is a swan.
It is probably the case that either 'Bernhard is a rhino' or 'John grabbed the milk' but not both.
It is probably not the case that either 'Bernhard is a rhino' or 'John grabbed the milk' but not both.
It is probably the case that either 'Bernhard is a rhino' or 'John 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.1::factA.
  0.25::factB.
  0.7::factC.
  %hop1
  0.9::factX:-and(factC,factB).
  0.7::factY:-or(factC,factA).
  0.02::factZ:-xor(factA,factC).

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

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