It is unlikely that Greg is a swan. It is probably not the case that Mary picked up the apple. It is impossible that Bernhard is gray. It is certain that if 'Greg is a swan and Bernhard is gray' then Jason is tired. It is certain that if 'Bernhard is gray' or 'Greg is a swan' or both then John went to the hallway. It is impossible that if either 'Bernhard is gray' or 'Mary picked up the apple' but not both then Julius is a rhino.
We believe that either 'John went to the hallway' or 'Jason is tired' but not both.
We doubt that either 'John went to the hallway' or 'Jason is tired' but not both.
We believe that either 'John went to the hallway' or 'Jason is tired' 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.25::factB.
  0.0::factC.
  %hop1
  1.0::factX:-and(factA,factC).
  1.0::factY:-or(factC,factA).
  0.0::factZ:-xor(factC,factB).

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

  query(conclusion).
  
Either 'John went to the hallway' or 'Jason is tired' but not both.