X. X->Y. ------ Y.
Y. X->Y. ------ X.
W:  | same_weight(woman,duck).  | (according to the scale) | 
F:  | same_weight(X,Y) and floats(Y) -> floats(X).  | (false premiss, possibly acceptable in middle ages) | 
Df:  | floats(duck).  | (premiss - OK most ducks float) | 
Wf:  | is_wood(X)->floats(X).  | (premiss - OK most woods float) | 
Wob:  | is_wood(X)->burns(X).  | (premiss - OK most woods burn) | 
Wib:  | is_witch(X)->burns(X).  | (premiss - questionable...) | 
T1:is_wood(X)->is_witch(X). Proof: A1: is_wood(X). P1: burns(X). (A1 and Wob by Modus Ponens) witch(X). (P1 and Wib by Modus Bogus)
Prop1: floats(woman). Proof: F and Df and W using Modus Ponens Prop2: is_wood(woman). Proof: Prop1 and Wf using Modus Bogus Prop3: is_witch(woman). Proof: Prop2 and T1 using Modus PonensBurn!! Burn!!
Wb:  | is_wood(X)->can_build_bridge_with(X).  | (premiss - OK most wood can be used for bridges) | 
Bw:  | can_build_bridge_with(woman).  | (presumably by attempting to do this) | 
T1: True. T2: False -> TrueThese both hold, verify by checking truth tables. Very short truth tables.
T3: FalseThen, since we have False -> P for any proposition P, we get:
T4: False -> (is_witch(woman))T3, T4 and modus ponens give:
is_witch(woman)
%%would really like to put this here:
%:- include('modusbogus.pl').
same_weight(woman,duck).
is_wood(bridge).
floats(duck).
floats(X):-same_weight(X,Y),floats(Y).
floats(X):-is_wood(X).
burns(X):-is_wood(X).
burns(X):-is_witch(X).