comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: {Pre,Post}conditions and side effects
Date: Sat, 09 May 2015 08:18:37 +0300
Date: 2015-05-09T08:18:37+03:00	[thread overview]
Message-ID: <cr5jl8Fee0jU1@mid.individual.net> (raw)
In-Reply-To: <mijg4c$ssi$1@loke.gir.dk>

On 15-05-09 02:16 , Randy Brukardt wrote:
> "Niklas Holsti" <niklas.holsti@tidorum.invalid> wrote in message
> news:cr1snsF60hoU1@mid.individual.net...
>> On 15-05-07 22:01 , Randy Brukardt wrote:
>>> <Stefan.Lucks@uni-weimar.de> wrote in message
>>> news:alpine.DEB.2.11.1505071909280.16448@debian...
>>> ...
>>>> One property of a proper precondition (or postcondition or ...) is that
>>>> disabling the check does not change the functional behaviour of correct
>>>> programs.
>>>
>>> Sure, but this is irrelevant. There are no "correct" programs (in all
>>> possible senses). How do you know that you have a correct program? If you
>>> use some prover program, it too may have bugs. Or there might be bad data
>>> (cosmic rays?)
>>
>> Those are practical problems, not problems of principle. If you would take
>> the same attitude to mathematics, you would claim that there are no
>> correct theorems. So I disagree with you.
>
> All programming is practical. We do not care about theorems, only that the
> current program is correct in the current environment.

You have lost me here: you want to make the compiler prove things, but 
you do not care about theorems, and do not want to be infected with a 
"theory" disease? Is Humpty Dumpty involved somehow, making words mean 
whatever he wants them to mean? :-)

> Everything has to be reproved when anything changes

Agreed.

> (another good reason for putting it into the compiler, as skipping the step
> isn't possible, and thus problems like the Ariene 5 don't happen).

It is true that an optimizing and run-time-check-removing compiler has 
to make the same kind of analyses and have the same kind of 
understanding of the program's semantics as a program-proving tool. But 
constructing a proof from scratch is expensive, unpredictably expensive, 
and possibly non-terminating, while compilation of source code into 
machine code should take a time that is reasonable, and reasonably 
predictable.

Hitherto, compilers have been expected to remove run-time checks that 
the compiler can prove to itself are redundant, but not to remove *all* 
redundant run-time checks. If the latter is required, compilation time 
becomes unlimited -- a practical problem, no?

To make proof a routine part of compilation, it has IMO to be reduced to 
*proof checking*. Checking a proof is fast and terminating.

To integrate proof-checking with compilation, the programming language 
has to be able to express the proof (axioms, lemmas, individual proof 
steps) interwined with the expression of the computation that is to be 
proved. And this has to be so easy that it tempts the programmer to 
write the proof -- or at least enough of the proof to guide the compiler 
-- as a routine part of creating the program. (Echoes here of 
proof-carrying code, http://en.wikipedia.org/wiki/Proof-carrying_code.)

Ada has always had such features -- principally types, subtypes, ranges 
-- and Ada 2012 has added more -- pre/post-conds and invariants. 
However, I'm not sure if the features are yet sufficient to let us 
require, in the Ada standard, that an Ada compiler should be able to 
prove (rather, to check) exception-freeness, or termination, just to 
give two examples.

I believe it is a good goal for evolving Ada, but of course not the only 
goal.

By the way, if exception contracts are added to Ada, termination 
contracts should be considered, too.

-- 
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
       .      @       .

  reply	other threads:[~2015-05-09  5:18 UTC|newest]

Thread overview: 107+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-22 16:22 {Pre,Post}conditions and side effects Jean François Martinez
2014-12-22 17:18 ` Brad Moore
2014-12-23  8:22   ` Jean François Martinez
2014-12-23 17:05     ` Robert A Duff
2014-12-23 21:09       ` Jean François Martinez
2014-12-23 21:35         ` Robert A Duff
2014-12-23 23:02         ` Peter Chapin
2014-12-24  1:03           ` Robert A Duff
2015-04-24  8:59             ` Jacob Sparre Andersen
2015-04-24  9:18               ` J-P. Rosen
2015-04-24 23:39                 ` Randy Brukardt
2015-04-24 12:10               ` G.B.
2015-04-24 14:40                 ` Jacob Sparre Andersen
2015-04-24 16:29                   ` G.B.
2015-04-24 23:46                   ` Randy Brukardt
2015-04-24 22:26               ` Peter Chapin
2015-04-25  0:13                 ` Randy Brukardt
2015-04-25  1:01                   ` Peter Chapin
2015-04-25  5:51                 ` Dmitry A. Kazakov
2015-04-25  0:31               ` Bob Duff
2015-04-25 12:08                 ` vincent.diemunsch
2015-04-25 16:37                   ` Georg Bauhaus
2015-05-06 21:07                   ` Randy Brukardt
2015-05-06 22:10                     ` Paul Rubin
2015-05-07  9:01                     ` Georg Bauhaus
2015-05-07  9:12                       ` Dmitry A. Kazakov
2015-05-07  9:29                         ` Georg Bauhaus
2015-05-07  9:31                           ` Georg Bauhaus
2015-05-07 18:32                         ` Randy Brukardt
2015-05-08  7:50                           ` Dmitry A. Kazakov
2015-05-08 23:31                             ` Randy Brukardt
2015-05-09  6:16                               ` Dmitry A. Kazakov
2015-05-12  0:28                                 ` Randy Brukardt
2015-05-12  8:04                                   ` Dmitry A. Kazakov
2015-05-07 10:06                     ` Stefan.Lucks
2015-05-07 12:16                       ` Dmitry A. Kazakov
2015-05-07 18:00                         ` Stefan.Lucks
2015-05-07 19:01                           ` Randy Brukardt
2015-05-07 19:29                             ` Niklas Holsti
2015-05-08 23:16                               ` Randy Brukardt
2015-05-09  5:18                                 ` Niklas Holsti [this message]
2015-05-12  0:15                                   ` Randy Brukardt
2015-05-07 19:55                             ` Dmitry A. Kazakov
2015-05-08 23:24                               ` Randy Brukardt
2015-05-09  5:47                                 ` Dmitry A. Kazakov
2015-05-07 18:52                       ` Randy Brukardt
2015-05-07 19:40                         ` Stefan.Lucks
2015-05-08  7:28                           ` Dmitry A. Kazakov
2015-05-08 22:58                             ` Randy Brukardt
2015-05-08 22:52                           ` Randy Brukardt
2015-05-09  0:14                             ` Paul Rubin
2015-05-12  0:30                               ` Randy Brukardt
2015-05-12 18:10                                 ` Paul Rubin
2015-05-12 22:01                                   ` Randy Brukardt
2015-05-13  9:35                                     ` Dmitry A. Kazakov
2015-05-13 11:53                                       ` G.B.
2015-05-13 12:47                                         ` Dmitry A. Kazakov
2015-05-13 14:06                                           ` G.B.
2015-05-13 14:21                                             ` Dmitry A. Kazakov
2015-05-13 16:33                                               ` G.B.
2015-05-13 19:15                                                 ` Dmitry A. Kazakov
2015-05-14  1:36                                                   ` Randy Brukardt
2015-05-14  7:10                                                     ` Dmitry A. Kazakov
2015-05-14  1:32                                         ` Randy Brukardt
2015-05-14  7:19                                           ` Dmitry A. Kazakov
2015-05-12  0:36                               ` Randy Brukardt
2015-05-11 10:35                             ` Stefan.Lucks
2015-05-11 21:49                               ` vincent.diemunsch
2015-05-11 22:49                                 ` Peter Chapin
2015-05-12  4:49                                   ` vincent.diemunsch
2015-05-12 23:25                                     ` Peter Chapin
2015-05-13  9:00                                       ` vincent.diemunsch
2015-05-12  4:42                                 ` vincent.diemunsch
2015-05-12 14:53                                   ` johnscpg
2015-05-13  9:14                                     ` vincent.diemunsch
2015-05-12  1:03                               ` Randy Brukardt
2015-05-12  7:21                                 ` Georg Bauhaus
2015-05-12 22:08                                   ` Randy Brukardt
2015-05-12  8:02                                 ` Georg Bauhaus
2015-05-12 22:14                                   ` Randy Brukardt
2015-05-12  8:37                                 ` Stefan.Lucks
2015-05-12 11:25                                   ` Stefan.Lucks
2015-05-12 18:44                                     ` Paul Rubin
2015-05-12 20:52                                       ` Stefan.Lucks
2015-05-18  9:49                                     ` Jacob Sparre Andersen
2015-05-18 12:10                                       ` Stefan.Lucks
2015-05-19  7:46                                         ` Jacob Sparre Andersen
2015-06-09  7:55                                           ` Stefan.Lucks
2015-06-09 12:02                                             ` G.B.
2015-06-09 17:16                                               ` Stefan.Lucks
2015-05-12 18:39                                   ` Paul Rubin
2015-05-12 20:51                                     ` Stefan.Lucks
2015-05-12 14:21                                 ` Bob Duff
2015-05-12 22:37                                   ` Randy Brukardt
2015-05-13  6:58                                     ` Georg Bauhaus
2015-05-14  1:21                                       ` Randy Brukardt
2015-05-07 21:29                         ` Georg Bauhaus
2015-05-08 23:11                           ` Randy Brukardt
2015-05-08 23:19                             ` tmoran
2014-12-23 21:53   ` Florian Weimer
2014-12-24 11:41     ` Brad Moore
2014-12-22 19:38 ` sbelmont700
2014-12-22 19:59   ` Brad Moore
2014-12-22 23:46   ` Randy Brukardt
2014-12-23 10:41   ` Georg Bauhaus
2014-12-22 23:32 ` Randy Brukardt
2015-04-24 17:59   ` Shark8
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox