context: It is likely that Bernhard is a lion. Chances are slight that Jason is tired. Chances are about even that John went to the hallway. It is highly likely that if 'John went to the hallway and Bernhard is a lion' then Greg is a swan. There is a better than even chance that if 'Bernhard is a lion' or 'John went to the hallway' or both then Lily is white. It is unlikely that if 'John went to the hallway and Jason is tired' then Julius is a swan.
hypothesis: It is highly unlikely that either 'Lily is white' or 'John went to the hallway' but not both.
valid_hypothesis: Chances are about even that either 'Lily is white' or 'John went to the hallway' but not both.
invalid_hypothesis: It is highly unlikely that either 'Lily is white' or 'John went to the hallway' but not both.
problog: 
    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.7::factA.
    0.1::factB.
    0.5::factC.
    %hop1
    0.9::factX:-and(factC,factA).
    0.6::factY:-or(factA,factC).
    0.2::factZ:-and(factC,factB).
  
    %hop2
    conclusion:-xor(factY,factC).
  
    query(conclusion).
    
hypothesis_assertion: Either 'Lily is white' or 'John went to the hallway' but not both.