comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: My Invention of "Bug Sort".
Date: Thu, 28 Jun 2012 22:05:20 +0300
Date: 2012-06-28T22:05:20+03:00	[thread overview]
Message-ID: <a53o7tF6gfU1@mid.individual.net> (raw)
In-Reply-To: <jsdd43$gpq$1@munin.nbi.dk>

On 12-06-27 01:29 , Randy Brukardt wrote:
> "Simon Wright"<simon@pushface.org>  wrote in message
> news:m2sjdnyrlh.fsf@pushface.org...
> ...
>> I notice http://www.ada-auth.org/standards/12rm/html/RM-A-18.html#p5 -
>> the last part of this is very terse. Wikipedia suggests that "(or both)"
>> should be added.  But I'm still baffled; and this paragraph appears to be
>> for users, not implementers!
>
> This is the definition of "strict weak ordering", it is described as
> precisely as possible. There's nothing really here for users;

A user (programmer) using Ada.Containers and providing an actual Boolean 
function for "<" must make sure that this actual function obeys this 
rule; otherwise the container may not work as intended (as Randy said). 
So *in principle* users need to understand this.

The first three rules (with names, even more terse) are simple to 
understand, because they are familiar properties from the usual complete 
ordering of numbers and strings:

- irreflexive: x < x must be False for all values x.
- asymmetric: if x < y is True, then y < x must be False.
- transitive: if x < y is True, and y < z is True, then x < z must be 
True also.

It is the fourth rule that is tricky, because it is important only when 
there are incomparable (but different) values x and y for which neither 
x < y nor y < x is True. If we use the symbol x # y for this 
"incomparability" relation between x and y, the fourth rule can be 
stated as: the relation # is an equivalence relation (a reflexive and 
transitive relation).

The reflexivity of # follows directly from the irreflexivity assumed for 
"<"; the transitivity follows from the fourth rule for "<".

For me, the rule "incomparability is an equivalence" is more intuitively 
understandable than the formulation in the RM. The RM rule is easier to 
state directly, however. That incomparability is an equivalence relation 
comes out in the name of the function 
Ada.Containers.Ordered_Maps.Equivalent_Keys.

In practice, the fourth rule comes into play when the 
programmer-supplied actual "<" function depends on only a part of the 
compared values, for example, on only one "key" component of a record 
type. If two record values x and y have the same key, x.key = y.key, 
then neither is "<" than the other, but they can still be different if 
they have different values in their other components.

*In practice* I expect most programmer-supplied "<" functions will 
compare one or a few "key" components of the operands. As long as each 
invocation of "<" compares the same components of the operands, in the 
same way, giving a complete ordering of these component values, the 
fourth rule holds and the container should work. So perhaps most users 
can get away with ignoring this rule.

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



  reply	other threads:[~2012-06-28 19:05 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-19  7:13 My Invention of "Bug Sort" Austin Obyrne
2012-06-19 11:55 ` Peter C. Chapin
2012-06-19 13:01   ` Austin Obyrne
2012-06-19 22:39 ` ggsub
2012-06-20  8:32   ` Austin Obyrne
2012-06-20 19:45     ` ggsub
2012-06-20 10:57   ` Austin Obyrne
2012-06-20 12:47     ` Manuel Collado
2012-06-20 12:51       ` Manuel Collado
2012-06-20 13:13         ` Manuel Collado
2012-06-20 15:17         ` Austin Obyrne
2012-06-22 20:31           ` Randy Brukardt
2012-06-20 19:38     ` ggsub
2012-06-20 23:59   ` Austin Obyrne
2012-06-21  1:17     ` Jeffrey R. Carter
2012-06-21  5:13       ` Simon Wright
2012-06-21  7:23         ` Manuel Collado
2012-06-21 11:50           ` Austin Obyrne
2012-06-21 12:09             ` Dmitry A. Kazakov
2012-06-22 20:37               ` Randy Brukardt
2012-06-22 21:16                 ` Simon Wright
2012-06-26 22:29                   ` Randy Brukardt
2012-06-28 19:05                     ` Niklas Holsti [this message]
2012-07-03  2:05                       ` Randy Brukardt
2012-06-28 20:59                     ` Simon Wright
2012-07-03  2:11                       ` Randy Brukardt
2012-07-03  9:47                         ` Simon Wright
2012-06-21 18:45             ` Jeffrey Carter
2012-06-22  6:52               ` Austin Obyrne
2012-06-21 15:10         ` Adam Beneschan
2012-06-21 18:24         ` Jeffrey Carter
2012-06-21  7:24       ` Austin Obyrne
2012-06-19 22:56 ` Martin Trenkmann
2012-06-20  0:11 ` robin.vowels
2012-06-20  8:51   ` Austin Obyrne
replies disabled

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