I'm taking a course at university about philosophical reasoning / argumentation. The professor came up with an example where formal logic was wrong:
If Dave is in London, then he is in England. (p: D. is in London, q: D. is in England; p -> q)
If Dave is in Paris, then he is in France. (r: D. is in Paris, s: D. is in France; r -> s)
Furthermore the following tautology:
- ((if p then q) and (if r then s)) then ((if p then s) or (if r then q))
He argues that this allows for the following sentence to be true:
Therefore Dave is in England, when he is in Paris, or he is in France, when he is in London.
From this he follows, that formal logic should not be used for arguments (since the conclusion is wrong).
While I accept the example argument I do not believe that the conclusion is wrong. I do agree on the validity of the conclusion regarding formal logic - the tautology used definitely is a tautology and thus the conclusion is correct according to the premises.
I believe the problem is that our understanding of the conclusion states that it should be wrong, since we know something about London, England, Paris, and France. But it isn't. As to my understanding, the premises simply lack the information that someone is not in England when he is in Paris and not in France, when he is in London.
Thus I do not accept my professors critique on formal logic as suitable for philosophical reasoning.
Is formal logic really unsuitable for philosophical reasoning?
I'm asking since this argument undermines my conviction of formal logic being the one reliable tool for reasoning!
For those of you who don't believe that (3) is a tautology: It is a tautology given that any configuration for p, q, r, and s will yield True.
For those of you who are into programming, here is a Haskell Program that checks the claim:
class Stmt a where
isTautology :: a -> Bool
instance Stmt Bool where
isTautology = id
instance (Enum a, Bounded a, Stmt b) => Stmt (a -> b) where
isTautology f = all (isTautology . f) [minBound .. maxBound]
a ==> b = not (a && not b)
claim p q r s = ( ( p ==> q ) && ( r ==> s ) ) ==> ( ( p ==> s ) || ( r ==> q ) )
checkClaim = isTautology claim