Contradiction Indicates False Fact

From OfCourseImProbablyWrong (...or BlameYourselfFirst)...


I find that ContradictionIndicatesFalseFact: No matter how "heavily proven" my knowledge is, when the conclusion is a contradiction (like "1=2"), then I know that some "fact" I consider True is actually False.

Doesn't GoedelsTheorem mean that you will find some contradictions, i.e. your facts might be right and your conclusion different to the programs? (No. GoedelsTheorem only means that some things are true that your finite set of axioms do not imply; an attempt to test these truths will not return 'false'; it simply won't ever return.)

sort of. see below

For example: When I call the function that determines if this point is in that polygon, it returns False, in spite of the fact that the point really is in the polygon. Now I know that...

So it should work. But, > contradiction <, it doesn't. So...
 > ERROR <
A debugger should not change the behavior of a program. In most cases, a debugger will not change the behavior of a program (in any really significantly meaningful way). But if a function is relying on the value of an uninitialized variable, some of your knowledge of "how things work" is likely to be wrong.

(This is the "3rd party geometry library having problems determining if a point was within a polygon" story on the HeroicDebugging page.) -- JeffGrigg


A contradiction may also signal an invalid process. That is if you made a mistake assembling your facts into your conclusion (as a philosophical argument or hunk o' code), you may also fail----in some way. -- SunirShah


To look at this more abstractly, what you are talking about is a non-rigorous form of the 'reductio ad absurdum', or 'proof by contradiction'. This proof method is ever popular with undergraduate students and the like, but strenously avoided by most mathematicians (in fact some do not admit it as valid). Why? Since the method of proof assumes you are operating in a well defined formal system. Ignoring the fact that you can not have a Principia type formal system (as Goedel showed), there are too many details in which mistakes may be made. A constructive proof lays out all of the assumptions clearly, whilst a contradictive proof may involve assumptions that one is not even aware in writing the proof. This problem generalises to any sort of deductive reasoning (as above) that attempts the method.


I don't buy the "strenuously avoided by most mathematicians" line. We used it constantly when I was studying in the PhD program at the U of Rochester. (I should point out I left with a master's degree so you don't think too highly of me.) Many, many real proofs in the literature are proof by contradiction. Sure, if you're a particular kind of logician you consider them non-delightful and change your logical system so you can accomplish the same thing a different way - but pretty much the only people who seem to care are logicians.

There are a number of proofs which I'm not sure HAVE constructive equivalents. How you prove constructively that e is transcendental is beyond me.

--JamesWilson

The example with e is bad, because the definition of a transcendental number is negative (it's not the solution of a polynom in whole numbers). The meaning of "constructive proof" in this case is not clear. Your point about logicians, though, is correct.

The first guy appears to misunderstand what proof by contradiction is. This page refers to refuting a statement/proving a negative statement by deriving a contradiction from it. This is perfectly legitimate in both classical _and_ constructive/intuitionistic logic. In fact, in constructive logic, ¬P is usually defined as syntactic sugar for P -> _|_. Proof by contradiction, on the other hand, is proving P by assuming ¬P and deriving a contradiction from that, i.e. proving ¬¬P and claiming that this is a proof of P.


Try looking at fuzzy logic instead of boolean some time. In fuzzy logic "true AND false" is treated as the normal state not a contradiction. Fuzzy logic also tends to reflect the real world much better than boolean logic.

Nope. I want to be able to reason conclusively about my computer programs. Fuzz is for people. (CognitiveDissonance perhaps?)

The claim that fuzzy logic reflects the real world better than good ol' true/false logic has a bad smell. Like sophistry. Like there's some really deep equivocation going on. Would someone like to explain what that claim is claiming about the world? Then we might be in a position to judge the claim true or false. Oops, but there I go thinking logically again.

Real World examples of fuzzy values: clean/dirty, fast/slow, ease of use, colors, heights, weights, anything measured.

Counter-proposal: Identify even one item in the real world that is absolutely true.

When you say something is clean and dirty, you don't mean it is in a contradictory state. You mean that whether it is clean or not depends on the value given to clean. So the person below suggesting that statistical distributions are as good is wrong, they're more representative of reality and so better. And every time we check the charge of an electron, it comes out the same. ;)

To say something is both clean and dirty is to say it has aspects of both cleanness and dirtiness. It is never absolutely clean nor absolutely dirty. Clean and dirty is the most correct description of anything physical.

This difficulty doesn't stem from the object itself, though, but in the attempts to apply the adjectives to it. The reason you get fuzzy distributions here is because clean and dirty are not boolean concepts - there is a continuum between the two. The distinction is mostly semantics, I guess, but the point is that there is some state which the object is in absolutely, and you are just having trouble describing it - if I defined isoclean to mean as clean as the given object, it would always be fully isoclean, and I can be perfectly confident in that statement.

I don't think you will find a value judgment in the below. I didn't suggest they were 'as good' or 'better' or whatever --- I was merely looking for technical equivalence. If they are equivalent, then that could be used as an *argument* (i.e., statistical distributions have a superset of f.l capabilities) as to why they (stats) are better; and no-one should bother with f.l. :)


On another tack: since there seem to be one or more fuzzy logic proponents here. Can one of you demonstrate to me that fuzzy logic is not completely representable with statistics. IOW, is there anything that you can do with fuzzy logic that can't be done (just as easily) with statistical distributions?

Is 3 seconds a fast response time? Is 3 seconds a slow response time? Is it very fast? Is it very slow? These are the types of questions fuzzy logic answers. A statistical distribution would provide a model of how the measured results vary around 3 seconds, but not how to interpret the results.

To step back a level, statistical distributions are yet another example where "true" and "false" don't have a binary meaning. --- Response time is context dependent. 3 seconds is a very fast response time for a person to pick up a ringing phone, but a very slow response time for a keystroke to echo, a web page to begin loading, or even for an automated system such as a voicemail to answer the phone.


Fuzzy logic systems can deal with arbitrary dimensionality, and arbitrary continuity of the function. I'm not sure you can easily do that with statistical distributions which tend to have group coherency rules. Fuzzy logic models a manifold with patches of the manifold and a basic heuristic to interpolate between those patches. "Statistical distributions" on their own don't describe this behaviour which suggests to me that they are a lower order implementation decision. my 2p. RichardHenderson.


I find this ContradictionIndicatesFalseFact to be one of my most powerful debugging techiniques. In fact I often try to push a hard to find bug to a point where I can say it cant do that! (but it is) Now I know I am close. Now I dont go home and sleep on it. The trick is to stop mistaking "should not do that" for "can not do that". When all the probable explanations are eliminated then the improbable becomes likely. B=2; C=2; A = B+C; answer 5. Oh yes a program really CAN do that, all it takes in C for instance is a one line of code anywhere that has undefined behaviour and from then on anything can happen. -- AlanChristiansen

 Don't remind me. I've clobbered my codeseg that way.


CategoryLogic


EditText of this page (last edited November 15, 2009) or FindPage with title or text search