We doubt that Jessica is a cat. It is improbable that Julius is a lion. It is unlikely that Bernhard is green. There is almost no chance that if 'Julius is a lion and Bernhard is green' then Bill went to the bedroom. It is improbable that if 'Bernhard is green and Julius is a lion' then John moved to the garden. It is impossible that if 'Jessica is a cat and Bernhard is green' then Lily is green.
It is impossible that either 'Bill went to the bedroom' or 'John moved to the garden' but not both.
It is impossible that either 'Bill went to the bedroom' or 'John moved to the garden' but not both.
It is highly likely that either 'Bill went to the bedroom' 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.2::factA.
  0.1::factB.
  0.2::factC.
  %hop1
  0.02::factX:-and(factB,factC).
  0.1::factY:-and(factC,factB).
  0.0::factZ:-and(factA,factC).

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

  query(conclusion).
  
Either 'Bill went to the bedroom' or 'John moved to the garden' but not both.