It is unlikely that Julius is yellow. There is almost no chance that Lily is a swan. It is probably the case that Jessica is a cat. It is likely that if either 'Julius is yellow' or 'Jessica is a cat' but not both then Greg is white. It is probable that if 'Jessica is a cat and Lily is a swan' then Bernhard is a rhino. It is highly unlikely that if 'Lily is a swan' or 'Julius is yellow' or both then John moved to the office.
It is impossible that either 'Greg is white' or 'John moved to the office' but not both.
Chances are about even that either 'Greg is white' or 'John moved to the office' but not both.
It is impossible that either 'Greg is white' or 'John moved to the office' 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.2::factA.
  0.02::factB.
  0.7::factC.
  %hop1
  0.7::factX:-xor(factA,factC).
  0.7::factY:-and(factC,factB).
  0.05::factZ:-or(factB,factA).

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

  query(conclusion).
  
Either 'Greg is white' or 'John moved to the office' but not both.