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 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: "G.B." Newsgroups: comp.lang.ada Subject: Re: Ada 2012 Constraints (WRT an Ada IR) Date: Wed, 14 Dec 2016 12:46:30 +0100 Organization: A noiseless patient Spider Message-ID: References: <1af458a8-cf5b-4dd7-824d-eed1ed5ffb21@googlegroups.com> Reply-To: nonlegitur@notmyhomepage.de Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Wed, 14 Dec 2016 11:45:07 -0000 (UTC) Injection-Info: mx02.eternal-september.org; posting-host="d7777aaea4e05f5460ede15b9236d665"; logging-data="19836"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18ECfckw5fTUCdBwMe7RBqmsyBh+eH8qws=" User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 In-Reply-To: Cancel-Lock: sha1:E7vSs+ic4zPwIpCNNVayW3MfjEc= Xref: news.eternal-september.org comp.lang.ada:32812 Date: 2016-12-14T12:46:30+01:00 List-Id: On 13/12/2016 22:11, Dmitry A. Kazakov wrote: > > They are not, what was meant would be a predicate, spelled fully: > > forall a > b, a in T, b in T exist n in N > a = b * n + a rem b > > It is not a Boolean expression and it cannot be written or evaluated in Ada. Though it is possible to write a program in Ada that would perform calculus on such expressions, e.g. SPARK. I'm not exactly sure which set you are referring to, and why. A theory of remainder values is not identical with contracts, being much more ambitious and being "meta" indeed. It looks like rewriting something to do with McJones and Stepanov and `remainder` in predicates only, possibly defining a result set, where b in what you have written may be 0 in "a rem b", also negative. N, if the natural numbers, is from some other domain. Whereas I mentioned the example only because they have stated // Precondition: a ≥ b > 0 to then show how their `requires(ArchimedianMonoid(T))` together with this precondition will produce a terminating algorithm that does what it is supposed to do. Provided that b > 0, for example. And that statement of a precondition is something a programmer can work with in Ada, by deriving from it a Pre aspect for a contract.