It is probably not the case that John took the football. It is certain that Fred went to the office. We doubt that Mary is in the bathroom. There is little chance that if 'Mary is in the bathroom and John took the football' then Bernhard is a swan. There is almost no chance that if 'John took the football and Fred went to the office' then Julius is a frog. There is a very good chance that if 'Fred went to the office and Mary is in the bathroom' then Lily is green.
It is impossible that either 'Bernhard is a swan' or 'Julius is a frog' but not both.
It is impossible that either 'Bernhard is a swan' or 'Julius is a frog' but not both.
It is highly likely that either 'Bernhard is a swan' or 'Julius is a frog' 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.25::factA.
  1.0::factB.
  0.2::factC.
  %hop1
  0.1::factX:-and(factC,factA).
  0.02::factY:-and(factA,factB).
  0.8::factZ:-and(factB,factC).

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

  query(conclusion).
  
Either 'Bernhard is a swan' or 'Julius is a frog' but not both.