comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Generic Package
Date: Mon, 30 Apr 2007 18:29:18 +0200
Date: 2007-04-30T18:28:56+02:00	[thread overview]
Message-ID: <2aq08qbvw0ym$.1rquampzo7o53.dlg@40tude.net> (raw)
In-Reply-To: 1177944533.13970.17.camel@localhost

On Mon, 30 Apr 2007 16:48:53 +0200, Georg Bauhaus wrote:

> On Mon, 2007-04-30 at 14:16 +0200, Dmitry A. Kazakov wrote:
> 
>>> So it is not a question of trusting the iterator but rather
>>> a mere consequence of trust in the iterator being defined
>>> as required by the specification of iterator.
>> 
>> But you could not present any formal specification of.
>> 
>> Consider the program that counts elements of a set:
>> 
>>    C : Protected_Integer;
>>    procedure Count is
>>    begin
>>       C.Inc;
>>    end Count;
>> begin
>>    C.Set (0);
>>    foreach S do Count;
> 
> "The following iterator is defined:
> 
>     generic
>        with procedure P(C: Cursor);
>     procedure foreach(S: Set);
> 
> "The foreach procedure operates as if the following body
> were written
> 
>     procedure foreach(S: Set) is
>        C: Cursor;
>     begin
>        C := first(S);

You forgot that first is not defined on Set, which is not well-ordered and 
thus does not have visible implementations of first, last, next, prev etc 
in its interface. It has Length, =, /=, :=, and, or, xor, /, Empty, in, not 
in. [*]

>        while has_element(C) loop
>           P(C);
>           next(C);
>        end loop;
>     end;
> 
> "The set S is locked while foreach is executing."

Concurrency is not the issue. Some ordered sets might become unordered in 
presence of concurrent access. But the reason is irrelevant here. The set 
is declared unordered. Locking it cannot not change that, unless you looked 
in the implementation.

>> How could you prove that C.Get = S'Length?
> 
> Given
>    Sum: Integer := 0;
>    procedure Count(C: Cursor) is
>    begin
>       Sum := Sum + 1;
>    end;
>    procedure how_many is new foreach(P => Count);
> Still impossible to show the above after the first run?

No, that would not be a proof, only a test. To make a proof out of it, you 
have to run this test on all possible programs with all possible sets.

---------
*  If Element of unordered Set is itself ordered and countable, then you 
could solve the problem by combining Element'Succ with "in" membership 
test. I.e. Element would give you an order. But in general case there could 
be no Element'Succ.

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



  reply	other threads:[~2007-04-30 16:29 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 [this message]
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
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