It is almost certain that Bernhard is white. It is highly likely that Brian is a frog. It is probably the case that John dropped the apple. It is almost certain that if 'Brian is a frog' or 'John dropped the apple' or both then Greg is a swan. It is highly unlikely that if 'Brian is a frog' or 'Bernhard is white' or both then Jeff went to the garden. It is improbable that if 'John dropped the apple' or 'Bernhard is white' or both then Lily is white.
It is impossible that either 'Greg is a swan' or 'Jeff went to the garden' but not both.
It is highly likely that either 'Greg is a swan' or 'Jeff went to the garden' but not both.
It is impossible that either 'Greg is a swan' or 'Jeff went 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.95::factA.
  0.9::factB.
  0.7::factC.
  %hop1
  0.95::factX:-or(factB,factC).
  0.05::factY:-or(factB,factA).
  0.1::factZ:-or(factC,factA).

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

  query(conclusion).
  
Either 'Greg is a swan' or 'Jeff went to the garden' but not both.