|
|
|
|
|
by tmerr
2369 days ago
|
|
I might be corrupted by programming because it doesn't bother me when I hear a vacuously true claim like "All flying horses are three-legged". My mental model corresponds to Python's definition of "all": def all(xs, predicate):
for x in xs:
if not predicate(x):
return False
return True
Similarly, def any(xs, predicate):
for x in xs:
if predicate(x):
return True
return False
You say "Ex falso quodlibet" which makes it sound like you believe such a system leads to contradictions, but this would come down to the choice of rewrite rules.Example: a rewrite rule from "NOT all(xs, predicate)" to "any(xs, NOT predicate)" would lead to contradictions.
Reasoning: A. all({}, predicate) is true by def of all
B. any({}, NOT predicate) is false by def of any
C. NOT all({}, predicate} is false follows from A
D. applying the rewrite rule to C, any({}, NOT predicate) is true, which contradicts B.
However, in first-order-logic, that same rewrite rule is fine since sets always contain elements. It doesn't seem like to much work to go from Python-esque any and all to ∀ and ∃. For example "all(xs, predicate)" could be rewritten to: "¬P ∨ (∀ xs. predicate)" where P is a new proposition variable for whether xs contains elements. This relies on the semantics including short-circuiting evaluation (which may be cheating, I don't know).Or maybe the above is what you already meant when you said "following the embeding..."? |
|
...it comes down to how you represent natural language quantifiers in logic.
The semantics of "All men are mortal." is that "all" is the quantifier, which takes two higher-order arguments. Using x as the variable that is quantified over, the first argument would have to be a predicate of x and is called the restrictor. The second argument also has to be a predicate of x and is called the body. So "all" is the quantifier. "man" is the restrictor. "mortal" is the body.
Following that notation we would write "All men are mortal" as
Now the question is how to represent this natural language quantifier in first-order logic. Most computer scientists would think But this is NOT the way Aristotle thought about it, and not the way most human beings naturally think about it. The natural way to think about it is The first part of the statement is what's called "existential import". (cf https://en.wikipedia.org/wiki/Syllogism#Existential_import)When I say "ex falso quodlibet" I mean this: https://en.wikipedia.org/wiki/Principle_of_explosion
Moving over to the example about flying horses:
Without existential import the statement would mean. Now let's evaluate that within a logical theory that contains some common sense: The statement would then become provable. That's unnatural. No "normal" person who hasn't been taught through formal education to think in a particular way about implication would say "Oh yes, all flying horses are three-legged, that sounds perfectly reasonable."Now WITH existential import, the statement would have to mean
So now, using the same piece of common sense, the statement is no longer provable, but it's negation is (the statement is unsatisfiable). That's how a "normal" person thinks. A normal person would respond by saying "Hang on! There is no such thing as a flying horse! Therefore you are talking utter nonsense."Going back to the original post: "How many blue cats are bouncing?" means
Which statement contradicts a state of the universe / game-screen, wherein there are no blue cats, if you interpret the statement by using existential import.My suggestion was to rephrase as "How many cats are blue and bouncing?" which means
So now instead of "blue cat" being the restrictor and "bouncing" being the body, you would have "cat" as the restrictor and "blue and bouncing" as the body.This would be better, because now you can use existential import the way "normal people" do, and still get to the desired result "zero" instead of the result "I can't answer that question". You avoid making a presupposition that contradicts the known state of the universe.