From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,29d8139471e3f53e X-Google-NewGroupId: yes X-Google-Attributes: gida07f3367d7,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news2.google.com!goblin1!goblin2!goblin.stu.neva.ru!news.internetdienste.de!newsfeed.velia.net!newsfeed01.sul.t-online.de!t-online.de!newsfeed.arcor.de!newsspool4.arcor-online.net!news.arcor.de.POSTED!not-for-mail From: "Dmitry A. Kazakov" Subject: Re: Preventing type extensions Newsgroups: comp.lang.ada User-Agent: 40tude_Dialog/2.0.15.1 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Reply-To: mailbox@dmitry-kazakov.de Organization: cbb software GmbH References: <87iq2bfenl.fsf@mid.deneb.enyo.de> <874odv9npv.fsf@ludovic-brenta.org> <87y6b7cedd.fsf@mid.deneb.enyo.de> <66a3704c-54f9-4f04-8860-aa12f516134b@t3g2000vbb.googlegroups.com> <87d3sib44t.fsf@mid.deneb.enyo.de> <134q4k2ly2pf4$.17nlv1q6q5ivo.dlg@40tude.net> <4c8dec8e$0$6990$9b4e6d93@newsspool4.arcor-online.net> <8f6cceFrv2U1@mid.individual.net> <135a7dc9-3943-45e4-884b-3cc6bce3db0a@q18g2000vbm.googlegroups.com> <10rutrnp4yp1b$.vxcbtginicg9.dlg@40tude.net> <1rwwxbzfj78eh.6l7isp9fciba$.dlg@40tude.net> <4c98e745$0$7667$9b4e6d93@newsspool1.arcor-online.net> <1qwl6jiun2mik$.s1k2xnzg8dv6$.dlg@40tude.net> Date: Thu, 23 Sep 2010 22:49:06 +0200 Message-ID: <118qmxho82l2o$.2hnfi4z6468h$.dlg@40tude.net> NNTP-Posting-Date: 23 Sep 2010 22:49:04 CEST NNTP-Posting-Host: 745fa080.newsspool4.arcor-online.net X-Trace: DXC=`jGSjOaKE^>=FQB?mjjV504IUK[ X-Complaints-To: usenet-abuse@arcor.de Xref: g2news1.google.com comp.lang.ada:14215 Date: 2010-09-23T22:49:04+02:00 List-Id: On Thu, 23 Sep 2010 21:00:01 +0100, Simon Wright wrote: > "Dmitry A. Kazakov" writes: > >> Gosh, it was no more than just this: if horse is an animal that does >> not imply they are interchangeable. Compare: "all horses have hoofs" >> and "all animals have hoofs." > > I don't see your point. It was: the type /horse/ is not the type /animal/. That is not because of Ada's choice to keep them apart, it is because they are behaviorally (semantically) different. > You could make a near-infinity of operations on Animal like has-hooves, > has-tentacles etc but that would be silly. The only ops that make sense > at the Animal level are ones shared by all animals. All primitive operations are already shared, if it were only about type checks there would be nothing to discuss. Ada checks types. Beyond nominal checks, comparing two related types like horse and animal one considers substitutability. S is substitutable for T when any predicate P(T) remains true after substitution S for T. LSP subtype as defined by Liskov & Wang are those maintaining substitutability. (All possible predicates exhaustively determine what in OO is called behavior. This is why Liskov & Wang named it "behavioral notion of subtype.") My example illustrated existence of predicates turning false. Thus horse is not animal and animal is not horse (yet *a* horse is *an* animal). It is a tautology: a subset which is the whole set is not the whole set. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de