It is likely that Bernhard is green. There is little chance that Mary went to the bedroom. It is almost certain that John moved to the office. It is highly likely that if 'Mary went to the bedroom' or 'John moved to the office' or both then Greg is yellow. There is almost no chance that if 'Mary went to the bedroom' or 'Bernhard is green' or both then Brian is a swan. It is improbable that if 'Bernhard is green and Mary went to the bedroom' then Lily is a rhino.
It is impossible that either 'Brian is a swan' or 'Bernhard is green' but not both.
It is probably the case that either 'Brian is a swan' or 'Bernhard is green' but not both.
It is impossible that either 'Brian is a swan' or 'Bernhard is green' 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.7::factA.
  0.1::factB.
  0.95::factC.
  %hop1
  0.9::factX:-or(factB,factC).
  0.02::factY:-or(factB,factA).
  0.1::factZ:-and(factA,factB).

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

  query(conclusion).
  
Either 'Brian is a swan' or 'Bernhard is green' but not both.