It is unlikely that Lily is a lion. It is improbable that Bernhard is yellow. We doubt that Greg is a frog. It is probable that if 'Lily is a lion and Greg is a frog' then John moved to the garden. There is almost no chance that if either 'Bernhard is yellow' or 'Lily is a lion' but not both then Julius is a swan. It is likely that if 'Lily is a lion' or 'Bernhard is yellow' or both then Brian is a rhino.
We believe that either 'Bernhard is yellow' or 'John moved to the garden' but not both.
There is little chance that either 'Bernhard is yellow' or 'John moved to the garden' but not both.
We believe that either 'Bernhard is yellow' 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.7::factX:-and(factA,factC).
  0.02::factY:-xor(factB,factA).
  0.7::factZ:-or(factA,factB).

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

  query(conclusion).
  
Either 'Bernhard is yellow' or 'John moved to the garden' but not both.