Talk:Proof: Difference between revisions

m
changed the name of the 1st section header.
m (changed the name of the 1st section header.)
 
(One intermediate revision by the same user not shown)
Line 1:
== subtype pre-definitions ==
 
The subtype Natural is pre-defined for all Ada implementations. Arithmetic upon that subtype is also pre-defined. This does not appear to be a very interesting problem in Ada. Any suggestions? --[[User:Waldorf|Waldorf]] 14:42, 21 December 2007 (MST)
:This seems like less of a computing problem, and more of a discrete math problem. I'm not sure if it's a good task. --[[User:Mwn3d|Mwn3d]] 14:45, 21 December 2007 (MST)
Line 13 ⟶ 15:
::: The issue is not about the use of metatheory but is about the use of programming. Currently, we have the Salmon implementation for the task, which does not correspond to code that I can run. More generally, the task requires no machine output. In my experience, the educational value of this site is significantly improved when short bits of machine output are included to illustrate the behavior of the code. --[[User:Rdm|Rdm]] 13:04, 31 May 2012 (UTC)
 
:::: But all the languages which ​​are suitable for this task are based on some metatheories. Twelf is based on the [[wp:Logical_framework|LF]], Agda and Omega are based on the [[wp:Intuitionistic_type_theory|MLTT]], Coq is based on the [[wp:Calculus_of_constructions|CIC]] (which is variation of the MLTT), MLes and Haskell usualyusually based on polymorphic lambda calculus ([[wp:Hindley%E2%80%93Milner|HM]] or [[wp:System_F|SystemF]], however, they are ''not'' suitable) and so on. There is also other systems such as Mizar, MetaMath or ACL2 which are based on the set theory rather than on Type Theory.
 
:::: About the output, if the proof is correct, then there is nothing to report (or just report "proven"), but if it is not correct and contains errors then it does make sense to tell why the proof is not admissible. Once the proof is (silently) verified you can start deduce types and evaluate normal forms for terms, e.g. for agda <code>+-associative 1 2 3</code> deduced <code>6 ≡ 6</code> and evaluates to <code>refl</code> (witness of the equality).
Line 185 ⟶ 187:
 
The first line of the description reads: <cite>"Define a type for a sub-set of natural numbers (0, 1, 2, 3, ...) representable by a computer, and addition on them."</cite> Can somebody please clarify that last phrase, <cite>"addition on them"</cite>? I ''think'' I know what it's supposed to mean (and I'm ''fairly'' sure I understand the task as a whole) but just in case... -- [[User:Eriksiers|Eriksiers]] 22:24, 5 November 2009 (UTC)
:In mathematics, when we speak of "a binary operation on S", we mean a function whose domain is S × S and whose codomainco-domain is S. So "addition on the natural numbers" means an addition function that takes two naturals and returns a natural. —[[User:Underscore|Underscore]] 00:42, 6 November 2009 (UTC)
::Hmmm... I slept through most of my calculus classes, due to having '''THE MOST BORING TEACHER IN THE UNIVERSE''' (really) and as a result, most math above simple algebra I just don't get. I think I'll give this task a pass. -- [[User:Eriksiers|Eriksiers]] 15:05, 6 November 2009 (UTC)
::: But this is not much more than elemental type theory. Hardly as complex as the infinitesimal calculus... –[[User:Dkf|Donal Fellows]] 16:38, 6 November 2009 (UTC)
Line 213 ⟶ 215:
: I'll add that while I had fun with this task, I don't consider it much of a proof. There's way too much hand waving for me. &mdash;[[User:Sonia|Sonia]] 23:29, 21 June 2011 (UTC)
 
:: I'm sure it was a fun thing to write, but "not much of a proof" is the problem here. I can write any kind of code to prove odd + odd = odd, and I can make it compile, but that proves nothing; only when I run the code, and do a test like "is 1 + 3 odd?" The code will go 1 + 3 = 4-> pred 2 ->pred 0 (BOOM, hopefully, because first element is 1), so that's a counterproofcounter-proof, <i>but</i>, the key is, you <i>have to run your logic in the code to make a proof</i>, merely compiling means nothing. If you aggreeagree to that, now convince me your code can prove even + even = even: I won't likely live long enough to see your program exhastivelyexhaustively test all even numbers. See my point? However fun it was with the axioms and writing the code, I just don't think this code counts as fullfillingfulfilling the task. --[[User:Ledrug|Ledrug]] 23:43, 21 June 2011 (UTC)
 
: The task might be poorly worded and poorly named, but I think the examples posted by the task author and every example except Haskell show the same thing, which is using the language type system enforcement of closure over a type as an analog of mathematical closure over a set of numbers. The code to demonstrate isn't the code that you write, but the code that is in the language translator. &mdash;[[User:Sonia|Sonia]] 01:09, 22 June 2011 (UTC)
Line 231 ⟶ 233:
I suggest the task should be draft status. The varied solutions posted and the resulting discussions here show disagreement on what the current wording requires. &mdash;[[User:Sonia|Sonia]] 20:33, 11 May 2012 (UTC)
 
: I think the task is quite clear: "prove that the addition of any two even numbers is even". ''Any''. It is not possible with bruteforcingbrute-forcing, since there is a countable many even numbers. Nevertheless, a [[wp:Constructive_proof|constructive proof]] can be given in a suitable logical system (such as ACL2) or in a language with dependent types (Agda, Coq, Twelf to name a few).
 
: Putting something that looks like "2" in the CPU register, the same "2" in another, performing ADD, and getting something that looks like "4" doesn't help - that is not a proof! :) You need to ''define'' numbers, rules for arithmetic, induction, etc ''in'' the language based on a suitable [http://ncatlab.org/nlab/show/type+theory metatheory] such as [[wp:Intuitionistic_type_theory|MLTT]] or [[wp:Calculus_of_constructions|CoC]]/[[wp:Calculus_of_inductive_constructions|CoIC]], then prove. E.g., in the Agda version <code>even+even=even</code> takes ''any'' two even numbers and returns their sum as an even number, this is a ''type'', i.e. logical ''proposition'', ''algorithm'' itself is a ''proof'' by induction which ''builds'' a required term of a given (inhabited) type, and the typecheckertype-checker ''performs'' that proof (so that this is compile-time verification). &mdash; [[User:Ht|Ht]] 02:44, 12 May 2012 (UTC)
 
::It seems a wothwhile task in the way you describe it here on the talk page. Maybe the task description needs similar expansion to remove J-like entries and require "induction solving capabilities" or people to create such in a language without it, then apply it to the problem at hand. --[[User:Paddy3118|Paddy3118]] 07:22, 12 May 2012 (UTC)
Line 283 ⟶ 285:
::: Might I suggest you read a good book about the foundations of mathematics? Perhaps my terminology will seem less ambiguous to you after this. &mdash;''[[User:Ruud Koot|Ruud]]'' 21:33, 13 May 2012 (UTC)
 
:::: You have overgeneralized my statement. OvergeneralizationsOver-generalizations are, generally speaking: wrong.
 
:::: The issue I raised was not "computers are incapable of working with 'infinities'". The issue I raised was "computers can only represent finitely many distinct values. By leaving out that "distinct" part, you ignored my entire point.
Line 325 ⟶ 327:
::: > natural numbers are not countable
 
::: Finite sets is countable too (well, depending on the terminology, see the wikipediaWikipedia entry on the countable sets).
 
::: > My current inclination is to believe that you treat some "failures" as "valid for purposes of proof" in your implementation of types
Line 363 ⟶ 365:
::: The section about natural numbers is on page 71. That is, the Peano axioms is embeddable into MLTT (even constructive ZF set theory is embeddable), so that the questions should be asked about MLTT itself. There is some free books - [http://www.cs.kent.ac.uk/people/staff/sjt/TTFP/], [http://www.cse.chalmers.se/research/group/logic/book/] (see indexes for examples, e.g. the associativity of the append operation on lists from [2]). &mdash; [[User:Ht|Ht]] 14:06, 14 May 2012 (UTC)
 
:: By extension [[User:Rdm|Rdm]] believes that because mathematicainsmathematicians only have a finite number of sheets of paper they have only been able to prove theorems about the natural numbers which hold up to some non-trivial finite limit. I'm not sure how to argue with someone who is so confused about elementary concepts. &mdash;''[[User:Ruud Koot|Ruud]]'' 13:11, 14 May 2012 (UTC)
 
::: This is trivially false, in the sense that I have stated nothing about a relationship between sheets of paper and proofs. Please refrain from making up stuff about me. --[[User:Rdm|Rdm]] 13:17, 14 May 2012 (UTC)