Newsgroups: comp.lang.misc
Path: utzoo!utgpu!watserv1!watmath!tolstoy.waterloo.edu!mhcoffin
From: mhcoffin@tolstoy.waterloo.edu (Michael Coffin)
Subject: Re: Formal definitions (Re: ada-c++ productivity)
Message-ID: <1991Apr13.165135.7820@watmath.waterloo.edu>
Sender: news@watmath.waterloo.edu (News Owner)
Organization: University of Waterloo
References: <11APR91.19210188@uc780.umd.edu> <1991Apr12.125553.7307@watmath.waterloo.edu> <12APR91.20195376@uc780.umd.edu>
Date: Sat, 13 Apr 1991 16:51:35 GMT
Lines: 29

In article <12APR91.20195376@uc780.umd.edu> cs450a03@uc780.umd.edu writes:
>But if I have a routine called "sort" which sorts, and I feed a list
>into it which it can sort, the result is a sorted list.  Somebody has
>to establish that "sort" does indeed sort, but that would be true of a
>formal proof as well (you need to establish that you have a definition
>of "sorted" which fits within your formalism -- or else accept a
>priori that there is this thing called "sorted" and use its
>properties).

This is the whole point.  The definition of "sorted" can be translated
into a logical predicate pretty easily.  E.g., for a list of numbers
A, "A is sorted in ascending order" is translated to

    "for elements i and j in A, i <= j implies A[i] <= A[j]"

This is perhaps a leap of faith, but it's across a pretty narrow
canyon.  It's quite different to point to a routine for quicksort and
claim that the partitions and exchanges somehow describe "sortedness."

By the way, I agree with David Gudeman that proofs are prone to error.
But short of exhaustive testing, which is rarely possible, proofs are
the only way I know to reconcile the specification of a program with
its imperative realization.  It may not be particularly *good* tool, 
but as far as I can see it's the only tool.

Michael Coffin				mhcoffin@watmsg.waterloo.edu
Dept. of Computer Science		office: (519) 885-1211
University of Waterloo			home:   (519) 725-5516
Waterloo, Ontario, Canada N2L 3G1
