It is impossible that Mary went to the office. It is impossible that John moved to the garden. There is almost no chance that Lily is a swan. There is a very good chance that if 'Lily is a swan and Mary went to the office' then Julius is a lion. We doubt that if 'Mary went to the office' or 'John moved to the garden' or both then Brian is a rhino. It is highly unlikely that if 'John moved to the garden' or 'Mary went to the office' or both then Daniel left the apple.
There is almost no chance that either 'Lily is a swan' or 'John moved to the garden' but not both.
There is almost no chance that either 'Lily is a swan' or 'John moved to the garden' but not both.
It is probably the case that either 'Lily is a swan' or 'John moved to the garden' 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.0::factA.
  0.0::factB.
  0.02::factC.
  %hop1
  0.8::factX:-and(factC,factA).
  0.2::factY:-or(factA,factB).
  0.05::factZ:-or(factB,factA).

  %hop2
  conclusion:-xor(factC,factB).

  query(conclusion).
  
Either 'Lily is a swan' or 'John moved to the garden' but not both.