It is improbable that Brian is a lion. It is almost certain that Sandra left the milk. It is probably not the case that Lily is a rhino. It is probably not the case that if either 'Lily is a rhino' or 'Sandra left the milk' but not both then Fred is in the office. Chances are slight that if 'Sandra left the milk' or 'Lily is a rhino' or both then Bernhard is yellow. Chances are slight that if 'Lily is a rhino' or 'Sandra left the milk' or both then John picked up the apple.
It is certain that either 'Fred is in the office' or 'Bernhard is yellow' but not both.
It is probably not the case that either 'Fred is in the office' or 'Bernhard is yellow' but not both.
It is certain that either 'Fred is in the office' or 'Bernhard is yellow' 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.95::factB.
  0.25::factC.
  %hop1
  0.25::factX:-xor(factC,factB).
  0.1::factY:-or(factB,factC).
  0.1::factZ:-or(factC,factB).

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

  query(conclusion).
  
Either 'Fred is in the office' or 'Bernhard is yellow' but not both.