Comment by scotty79
3 months ago
If x is "no" (I do not know this to be true) then not-x is "yes" (I do know this to be true). So negation still works as usual.
"Yes" is not "true" but rather "provably true". And "no" is not "false" but rather "not provably true".
Third sensible value in this framework (which I think Prolog doesn't have) would be "false" meaning "it's provably false" ("the opposite of it is provably true").
To be frank I think Prolog in newer implementations completely abandoned this nuance and just call states "true" and "false" instead of "yes" and "no".
> If x is "no" (I do not know this to be true) then not-x is "yes" (I do know this to be true). So negation still works as usual.
As I said though, that doesn't make sense. Because if I don't know x to be true because it is not mentioned in the knowledge base, I also don't know not-x to be true. So both would have to be "no". But they aren't. Therefore the knowledge interpretation is incorrect. Knowledge wouldn't be closed under negation. If you don't know something to be true, that doesn't imply that you know it to be false.
You are right. If X is 'no' then not-X wouldn't necessarily be "yes".
After looking around I see that Prolog recognizes some nuance around not: https://en.wikipedia.org/wiki/Prolog#Negation
And aldready deprecated one 'not' operator:
https://www.swi-prolog.org/pldoc/man?predicate=not/1
Look at how they are not using not, but rather "not provable".
I'm not sure if Prolog has straight up negation behaving in binary arithmetic way.