Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Using Coq for formalization of mathematics

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Using Coq for formalization of mathematics


chronological Thread 
  • From: Vladimir Voevodsky <vladimir AT ias.edu>
  • To: Coq-Club Club <coq-club AT inria.fr>
  • Subject: Re: [Coq-Club] Using Coq for formalization of mathematics
  • Date: Sat, 24 Sep 2011 13:29:58 -0400

It is arguable whether overusing induction and Prop is of any benefit for the 
type-theoretic formalization of mathematics. In my experience one can 
formalize everything with very few uses of [ Inductive ] and no use of Prop 
at all.

For example the use of inductive definition for "less or equal" on [ nat ] is 
unnecessary. One can define boolean less or equal [ leb ] as a fix-point and 
then define type-valued less or equal as [ Identity ( leb n m ) true ] . The 
proofs of all the properties are rather straightforward.

Vladimir.







On Sep 24, 2011, at 1:09 PM, Adam Chlipala wrote:

> Daniel Schepler wrote:
>> It's just that "induction on a proposition" isn't really part of the 
>> standard
>> mathematical language.
>>   
> 
> Perhaps you can view it as a public service task to help change that 
> deficiency? ;)
> 
>> As an example, take "<=" on the natural numbers.  In Coq,<= is defined so 
>> that
>> for fixed a, { b:nat | a<= b } is the smallest subset of nat which 
>> contains a,
>> and such that whenever b is in the set, succ(b) is also.
>
>> Now consider the problem of proving that<= is transitive, i.e. if a<= b and
>> b<= c then a<= c.  In Coq, the usual way to prove this would be "by
>> induction on b<= c".  In standard mathematical language, this proof would 
>> be
>> translated as: suppose a<= b.  Then { c:nat | a<= c } contains b; and by
>> definition, whenever c is in that set, succ(c) is also.  Since { c:nat | 
>> b<= c
>> } is the smallest such set, it follows that { c:nat | b<= c } is a subset 
>> of
>> { c:nat | a<= c }.  We have now proved that a<= b ->  ({ c:nat | b<= c } is
>> a subset of { c:nat | a<= c }), and if we unfold the definition of subset, 
>> we
>> get exactly the desired transitivity property.
>
>> So for mathematicians, it's probably easiest to think of "induction on a 
>> Prop"
>> as shorthand for this style of argument, "the set of values satisfying my
>> desired conclusion contains the generators and satisfies the closure 
>> relations
>> defining the set of values corresponding to some hypothesis".
>>   
> 
> Does any significant fraction of working mathematicians get into this level 
> of detail about "<="?  I would expect that instead they use perhaps normal 
> mathematical induction on "a" and don't sweat the details.





Archive powered by MhonArc 2.6.16.

Top of Page