У меня есть стандартный тип данных, представляющий формулы логики предикатов. Функция, представляющая естественное правило исключения для дизъюнкции, может выглядеть следующим образом:
d_el p q =
if p =: (Dis r s) && q =: (Neg r) then Just s else
if q =: (Dis r s) && p =: (Neg r) then Just s else
Nothing where r,s free
x =: y = (x =:= y) == success
Вместо оценки Nothing при сбое объединения, функция не возвращает решений в PACKS
:
logic> d_el (Dis Bot Top) (Not Bot)
Result: Just Top
More Solutions? [Y(es)/n(o)/a(ll)] n
logic> d_el (Dis Bot Top) (Not Top)
No more solutions.
Чего мне не хватает, и почему el
не оценивается как Nothing
при сбое объединения?