Я запоминаю это через следующее логическое правило:
\+
= 'если unsure
или false
, предположим, false
'
Это отличается от стандартной логической логики тем, что если ваша цель неопределенная, а не прямая истина или ложь, она принимает ложь, когда не может доказать истинность. Самый очевидный пример этого - неспособность увидеть, открыт ли поток или нет. Если вы не можете доказать, что она открыта, это то же самое, что закрыться для программы.
https://en.wikipedia.org/wiki/Negation_as_failure