comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Generic Package
Date: Tue, 1 May 2007 19:16:45 +0200
Date: 2007-05-01T19:16:20+02:00	[thread overview]
Message-ID: <1ozvzzh59ebq8$.yeh9do8s3hig$.dlg@40tude.net> (raw)
In-Reply-To: 1178026941.16837.88.camel@localhost.localdomain

On Tue, 01 May 2007 15:42:21 +0200, Georg Bauhaus wrote:

> On Tue, 2007-05-01 at 12:19 +0200, Dmitry A. Kazakov wrote:
>> On Tue, 01 May 2007 11:02:22 +0200, Georg Bauhaus wrote:
>> 
>>> On Mon, 2007-04-30 at 22:04 +0200, Dmitry A. Kazakov wrote:
>>>> It was that if foreach were a primitive operation
>>>> defined on an unordered set, then its contract could not be stated.
>>> 
>>> Every specific Set object (collection of elements) inside a computer has
>>> a memory layout.
>> 
>> So the memory layout is a part of the contract?
> 
> Yes, in the sense that the specifics of memory layout and such are
> unknown and irrelevant to the client; in particular, no order needs
> to be specified.

Apart from obvious uselessness of contracts referencing to the memory
layout, the above is self-contradictory. Memory layout defines an order. It
also is a part of the contract. Hence the interface is ordered.

>     -- Proof. Foreach calls Add_One exactly once for each node
>     -- in s. Add_One unconditionally increments Count_Var by 1.
>     -- No other operation changes the value of Count_Var.
>     -- Hence, Count_Var (initially zero) is incremented by 1 for
>     -- each node in s, so Foreach counts the elements of s. ∎

So the precondition of Add_One is true? Then your proof is wrong. Here is a
counterexample:

1. let S'Length = N

2. because pred (Add_One) = true, that also includes Count_Val = N + 1. So
let's take it.

3. observe that for whatever number of calls to Add_One might then happen,
the result Count_Val is not N.

i.e. Count_Val = N does not follow from S'Length = N /\  pred (Add_One) =
true.

q.e.d.

(You cannot use true as the precondition. If you should to narrow it, for
this you need the invariant of the implicit loop behind "foreach," and that
would require ordering of S.)

> As you can see, there is some order again but I don't have to know
> the order. (Finding a first book (and then the next book) is the
> job of the librarian, not mine.)

Librarian is the interface. If it finds first book then that is a publicly
ordered set = you _can_ know the order without breaking the abstraction.

>>>> To be able to pick a random member <=>
>>>> to have an order.
>>> 
>>> Can you determine whether one of your sets is empty?
>> 
>> Sure. I can compare an empty set with the given set. This does not require
>> picking elements.
> 
> Uhm, not require the client to pick or the implementation to pick?
> When two sets A and B are equal iff the same elements
> belong to both A and B, won't you need at least references to the
> elements for "=" to be called for the elements?

No. You have to show that whatever element you took (no matter how) it is
either in both sets or else in neither:

   forall x in S, x in Q

This does not force you to present any method of getting elements from any
of the sets.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2007-05-01 17:16 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-25 22:15 Generic Package andrew.carroll
2007-04-26  0:07 ` Jeffrey R. Carter
2007-04-26  7:46   ` Markus E Leypold
2007-04-26  6:02 ` Martin Krischik
2007-04-26  7:57 ` Dmitry A. Kazakov
2007-04-26 15:31 ` andrew.carroll
2007-04-26 16:07   ` Georg Bauhaus
2007-04-26 19:40     ` andrew.carroll
2007-04-26 20:01       ` Georg Bauhaus
2007-04-26 18:54   ` Dmitry A. Kazakov
2007-04-26 21:52     ` Simon Wright
2007-04-27  9:00       ` Dmitry A. Kazakov
2007-04-27 11:11         ` Georg Bauhaus
2007-04-27 12:06           ` Dmitry A. Kazakov
2007-04-27 12:52             ` Markus E Leypold
2007-04-27 14:10             ` Georg Bauhaus
2007-04-27 14:16               ` Dmitry A. Kazakov
2007-04-27 21:44                 ` Georg Bauhaus
2007-04-28  7:38                   ` Dmitry A. Kazakov
2007-04-28 17:50                     ` Simon Wright
2007-04-28 21:04                     ` Ray Blaak
2007-04-29 16:33                       ` Markus E Leypold
2007-04-27 19:44             ` Simon Wright
2007-04-27 20:34               ` Dmitry A. Kazakov
2007-04-27 21:16                 ` Simon Wright
2007-04-28  7:36                   ` Dmitry A. Kazakov
2007-04-27 11:43         ` Markus E Leypold
2007-04-28 17:35           ` Dmitry A. Kazakov
2007-04-28 23:06             ` Georg Bauhaus
2007-04-29  8:19               ` Dmitry A. Kazakov
2007-04-29 15:10                 ` (see below)
2007-04-29 17:48                   ` Dmitry A. Kazakov
2007-04-29 22:36                     ` (see below)
2007-04-30  6:58                       ` Dmitry A. Kazakov
2007-04-30  9:59                         ` Markus E Leypold
2007-04-30 10:01                         ` Markus E Leypold
2007-04-30 10:36                         ` Georg Bauhaus
2007-04-30 10:40                           ` Georg Bauhaus
2007-04-30 12:14                           ` Dmitry A. Kazakov
2007-04-30 14:57                         ` (see below)
2007-04-30 10:30                 ` Georg Bauhaus
2007-04-30 12:16                   ` Dmitry A. Kazakov
2007-04-30 14:48                     ` Georg Bauhaus
2007-04-30 16:29                       ` Dmitry A. Kazakov
2007-04-30 17:24                         ` Georg Bauhaus
2007-04-30 18:54                           ` Dmitry A. Kazakov
2007-04-30 19:29                         ` Simon Wright
2007-04-30 20:04                           ` Dmitry A. Kazakov
2007-05-01  0:11                             ` Markus E Leypold
2007-05-01  9:02                             ` Georg Bauhaus
2007-05-01 10:19                               ` Dmitry A. Kazakov
2007-05-01 13:42                                 ` Georg Bauhaus
2007-05-01 17:16                                   ` Dmitry A. Kazakov [this message]
2007-05-01 19:14                                     ` Randy Brukardt
2007-05-01 20:14                                       ` Dmitry A. Kazakov
2007-05-02  7:52                                         ` Markus E Leypold
2007-05-02  8:06                                       ` Markus E Leypold
2007-05-03  0:37                                         ` Randy Brukardt
2007-05-03  8:36                                           ` Markus E Leypold
2007-05-03 23:16                                             ` Randy Brukardt
2007-05-04  0:15                                               ` Markus E Leypold
2007-05-01 21:41                                     ` Georg Bauhaus
2007-05-02  6:57                                       ` Ray Blaak
2007-05-02  8:22                                         ` Markus E Leypold
2007-05-02  8:07                                       ` Markus E Leypold
2007-05-02 10:29                                       ` Dmitry A. Kazakov
2007-05-02 11:48                                         ` Georg Bauhaus
2007-05-02 11:50                                           ` Georg Bauhaus
2007-05-02 13:12                                           ` Dmitry A. Kazakov
2007-05-02 14:21                                             ` Markus E Leypold
2007-05-03 18:27                                             ` Georg Bauhaus
2007-05-03 19:07                                               ` Dmitry A. Kazakov
2007-05-03 19:49                                                 ` Markus E Leypold
2007-04-29 16:26             ` Markus E Leypold
2007-04-26 21:50   ` Simon Wright
2007-04-27  4:45   ` Jeffrey R. Carter
2007-04-27  7:45     ` Martin Krischik
2007-04-27 22:54       ` Georg Bauhaus
2007-04-30 20:13         ` Matthew Heaney
2007-04-26 20:48 ` andrew.carroll
  -- strict thread matches above, loose matches on Subject: below --
2003-12-02 23:15 Mr. J.
2003-12-03  9:31 ` Dmitry A. Kazakov
2003-12-02 23:13 generic package Ratson Janiv
2003-12-03 17:39 ` Stephen Leake
replies disabled

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