caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Andrej Bauer <Andrej.Bauer@fmf.uni-lj.si>
To: skaller <skaller@users.sourceforge.net>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] Unsoundness is essential
Date: Thu, 04 Oct 2007 17:29:29 +0200	[thread overview]
Message-ID: <470506D9.3080704@fmf.uni-lj.si> (raw)
In-Reply-To: <1191509355.6518.104.camel@rosella.wigram>

At the danger of repeating myself (for which I apologize), I would like 
to convince skaller that he does not want unsound type systems. (What 
skaller calls "sound" I call "safety property" in my previous post.)

Skaller, you want something like this:

(a) expressive power (dependent types, subsets, you-name-it)

(b) soundness, in the following form:
     * the compiler rejects obvious nonsense
     * the result of a compilation is a program and a list of
       assertions which the compiler was unable to verify

This I would call "controlled unsoundness" which at least allows the 
human to see what needs to be verified to guarantee soundness. It's much 
better than the sort of unsoundness that skaller seems to be advocating.

There is actually a new minor point I want to make: you cannot postpone 
all problems with typechecking to runtime. Only very simple conditions, 
such as bounds checks, can be checked at runtime.

It is very easy to come up with preconditions that are computationally 
unverifiable. For example, you might have a numerical method for 
zero-finding which only works if the input is a function satisfying a 
funky condition, e.g., "the function is convex". How are you going to 
check that at runtime?

Or to give you a much more simplistic example:

fun find_zero (f: int -> int where not (forall n:int, f(n) != 0)) {
   int i = 0;
   while (f(i) != 0) { i++; }
   return i;
}

How will you verify the precondition on f at runtime?  In this case I 
would expect the compiler to list all uses of find_zero applied to 
functions which are not known not have a zero. Let the human worry.

Andrej


  parent reply	other threads:[~2007-10-04 15:28 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-03  8:35 Locally-polymorphic exceptions [was: folding over a file] oleg
2007-10-03 11:27 ` kirillkh
2007-10-03 11:48   ` [Caml-list] " Daniel de Rauglaudre
2007-10-03 12:19     ` kirillkh
2007-10-03 12:32       ` Daniel de Rauglaudre
2007-10-03 14:34         ` kirillkh
2007-10-03 20:39   ` Christophe Raffalli
2007-10-03 22:50     ` Unsoundness is essential skaller
2007-10-03 23:13       ` [Caml-list] " Jacques Carette
2007-10-04  1:24         ` skaller
2007-10-04 11:26           ` David Allsopp
2007-10-04 12:45             ` Vincent Hanquez
2007-10-04 15:07               ` skaller
2007-10-03 23:13       ` Vincent Aravantinos
2007-10-04  1:49         ` skaller
2007-10-03 23:28       ` Joshua D. Guttman
2007-10-04  1:52         ` skaller
2007-10-04  2:35           ` Brian Hurt
2007-10-04  7:46           ` Christophe Raffalli
2007-10-04  8:56             ` Arnaud Spiwack
2007-10-04 14:49               ` skaller
2007-10-04 15:00                 ` Harrison, John R
2007-10-04 15:29                 ` Andrej Bauer [this message]
2007-10-04 16:25                   ` skaller
2007-10-04 18:17                     ` Arnaud Spiwack
2007-10-04 20:54                       ` skaller
2007-10-04 22:24                         ` Arnaud Spiwack
2007-10-04 16:37                   ` skaller
2007-10-04 18:59                     ` Christophe Raffalli
2007-10-04 15:04               ` Andrej Bauer
2007-10-04 15:57                 ` Christophe Raffalli
2007-10-04 16:03                 ` skaller
2007-10-04 20:02                   ` Ken Rose
2007-10-04 21:00                     ` skaller
2007-10-04 15:31       ` Lukasz Stafiniak
2007-10-04 17:56       ` rossberg
2007-10-04 19:56         ` skaller
2007-10-04 21:07           ` rossberg
2007-10-04 22:23             ` skaller
2007-10-05  2:48               ` Bárður Árantsson
2007-10-04  2:16   ` Locally-polymorphic exceptions [was: folding over a file] oleg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=470506D9.3080704@fmf.uni-lj.si \
    --to=andrej.bauer@fmf.uni-lj.si \
    --cc=Andrej.Bauer@andrej.com \
    --cc=caml-list@inria.fr \
    --cc=skaller@users.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).