Mark Dominus on Nostr: Why are there two notations for logical negation? ∼ was originally a stylized ...
Why are there two notations for logical negation?
∼ was originally a stylized letter "N" for "not".
¬ is a vestigial version of the notation of Gttlob Frege's “Begriffsschrift”. In that notation, proofs were represented as formulas connected with lines, showing implications. To negate a formula, Frege decorated its line with a little hanging tick mark. Begriffsschrift wasn't successful, but some of its notation lingers.
https://en.wikipedia.org/wiki/Begriffsschrift----- Others
Sometimes a minus sign was used, to analogize logical quantities to numeric ones: Logical negation is supposedly like arithmetic negation. I think this was originally due to Boole. But it doesn't work well. If you want 0 to be false and ` to be true, then you have to accept -X as an abbreviation for 1-X. If you want 0 to be false and nonzero to be true, it doesn't work at all, since then ‑false = false and ‑true=true. If you make true 1 and false ‑1, it works, but then logical and is no longer multiplication. Again, so elegant! But wrong.
Sometimes a vinculum (overbar) is used to negate a formula. This works nicely for short formulas such as atoms, but becomes unwieldy, as vinculums usually do.
Programming languages often use `!`. I'm not sure which was first to do this. C, perhaps? I think the idea was that the opposite of == is !=, to suggest the slash in ≠, and then if you omit the = part you are left with the ! to mean negation.
The Algol 60 report uses the symbol ¬, but in actual code had `NOT`. Fortran, of course, used `.NOT.`.The dots tell you that it is an operator rather than a variable named NOT. Reserved keywords had not yet been invented.
Published at
2026-01-03 14:30:21 UTCEvent JSON
{
"id": "54adf07fee53477f767e9621ded43b82c535c4eb50892a01a2efe14ef0cb9bf8",
"pubkey": "ba306e606ef310fbf9e5a15fb741099310fe2c2c9d4f3b9fdcade01d1e4028f0",
"created_at": 1767450621,
"kind": 1,
"tags": [
[
"proxy",
"https://mathstodon.xyz/users/mjd/statuses/115831643910263107",
"activitypub"
],
[
"client",
"Mostr",
"31990:6be38f8c63df7dbf84db7ec4a6e6fbbd8d19dca3b980efad18585c46f04b26f9:mostr",
"wss://relay.ditto.pub"
]
],
"content": "Why are there two notations for logical negation?\n\n∼ was originally a stylized letter \"N\" for \"not\".\n\n¬ is a vestigial version of the notation of Gttlob Frege's “Begriffsschrift”. In that notation, proofs were represented as formulas connected with lines, showing implications. To negate a formula, Frege decorated its line with a little hanging tick mark. Begriffsschrift wasn't successful, but some of its notation lingers.\n\nhttps://en.wikipedia.org/wiki/Begriffsschrift\n\n----- Others\n\nSometimes a minus sign was used, to analogize logical quantities to numeric ones: Logical negation is supposedly like arithmetic negation. I think this was originally due to Boole. But it doesn't work well. If you want 0 to be false and ` to be true, then you have to accept -X as an abbreviation for 1-X. If you want 0 to be false and nonzero to be true, it doesn't work at all, since then ‑false = false and ‑true=true. If you make true 1 and false ‑1, it works, but then logical and is no longer multiplication. Again, so elegant! But wrong.\n\nSometimes a vinculum (overbar) is used to negate a formula. This works nicely for short formulas such as atoms, but becomes unwieldy, as vinculums usually do.\n\nProgramming languages often use `!`. I'm not sure which was first to do this. C, perhaps? I think the idea was that the opposite of == is !=, to suggest the slash in ≠, and then if you omit the = part you are left with the ! to mean negation.\n\nThe Algol 60 report uses the symbol ¬, but in actual code had `NOT`. Fortran, of course, used `.NOT.`.The dots tell you that it is an operator rather than a variable named NOT. Reserved keywords had not yet been invented.",
"sig": "319b7433f158a272c0524e399c2869ea93d8f32e799617c87bfcea617389ebf8fbe57e5b56d8cc983fb55ce0d6de605b398751f0698b68fce3d4c79a78d2e07b"
}