<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <font size="4"><font face="monospace">The definition of the
        approximation ordering <= is part of the e-p pair, along with
        the two sets being related and the two mappings.  You've chosen
        a different <= for each of R and S; in R-land, you say that
        true approximates everything; in S-land, you say that false
        approximates everything.  That's why you got the seeming
        inconsistency.  <br>
        <br>
        In any case, we're getting pretty far afield and I'm still not
        getting any closer to seeing the point you're trying to make,
        other than "I don't like how you designed records, and I think
        my idea is better, and I want to argue about it."  Which is (a)
        not the charter of this list, (b) arguing about decisions that
        are already made, and (c) does not seem to be offering any new
        information about why your way is better that wasn't already in
        evidence when the feature was being designed.  So I think we're
        kind of off the road here.  <br>
        <br>
        <br>
      </font></font><br>
    <div class="moz-cite-prefix">On 8/13/2022 2:20 PM, Andrew Cave
      wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:CAJuA9EimbB0=w=DwkH+1uQE00eW3+NppK5-gQg=waSPZGGJD6Q@mail.gmail.com">
      
      <div>
        <div class="gmail_quote">
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)">
            <div dir="auto"><br>
              Except you've got your mappings the wrong way around. </div>
          </blockquote>
          <div dir="auto"><br>
          </div>
          <div dir="auto">Ok, let’s go with that:</div>
          <div dir="auto"><br>
          </div>
          <div dir="auto">(new R(a)).p() <= a</div>
          <div dir="auto"><br>
          </div>
          <div dir="auto">It’s difficult to be precise, because you
            haven’t spelled out the entire semantics (and I’m pretty
            sure it doesn’t exist), but, if we are able to do some kind
            of “normalization”, we are presumably able to do the
            simplest imaginable kind:</div>
          <div dir="auto"><br>
          </div>
          <div dir="auto">record R(Boolean b) {</div>
          <div dir="auto">  Boolean b() { return true; }</div>
          <div dir="auto">  bool equals(Object o) { return true; }</div>
          <div dir="auto">}</div>
          <div dir="auto"><br>
          </div>
          <div dir="auto">And also:</div>
          <div dir="auto"><br>
          </div>
          <div dir="auto">record S(Boolean b) {</div>
          <div dir="auto">  Boolean b() { return false; }</div>
          <div dir="auto">  book equals(Object o) { return true; }</div>
          <div dir="auto">}</div>
          <div dir="auto"><br>
          </div>
          <div dir="auto">from which we can deduce:</div>
          <div dir="auto"><br>
          </div>
          <div dir="auto">false = S(true).b() <= true</div>
          <div dir="auto"><br>
          </div>
          <div dir="auto">And</div>
          <div dir="auto"><br>
          </div>
          <div dir="auto">true = R(false).b() <= false</div>
          <div dir="auto"><br>
          </div>
          <div dir="auto">So true <= false and false <= true,
            hence true = false, and since you interpret “=“ as .equals,
            we are forced to make .equals() on Boolean say that true is
            equal to false.</div>
          <div dir="auto"><br>
          </div>
          <div dir="auto">The key here is that <= in “R(a).p() <=
            a” is the one defined on the domain (type) of *a* and you
            don’t get to choose what it is as part of the definition of
            your record; it’s already chosen for you!</div>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>