[sc34wg3] Re: Reducing redundant constructs

Robert Barta sc34wg3@isotopicmaps.org
Sat, 16 Jul 2005 13:42:20 +1000


On Fri, Jul 15, 2005 at 07:15:50AM -0400, Patrick Durusau wrote:
> The question is: What is the "set" in question.
> 
> If it is only the set of values, then yes, your reading is correct.
> 
> If the set in question is an identifier, plus a set of values, then the 
> fact that sets of values are "identical" does not lead to the same 
> result.  At least if the identifiers are different. If they are the 
> same, then again, you are correct.

Lars, Patrick,

Thanks for the insightful discussion :-). I think you hit a point
which is important to elaborate on.

1) Tau+ says that proxies are sets (of whatever).

2) It also introduces identifiers, but they are nothing else than
   a convenience, a shorthand for the 'real thing', the proxy itself.

   So the proxies

      { < name, "Larsbot" >, < shoesize, 123 > }

      { < name, "Patrick" >, < haircolor, white > }

   are what they are. They do not need an identifier, per se, but
   if I ever want to connect them into a statement

      { < protagonist, ....>, < protagonist, ....> }

   and I would want the Patrick and the Larsbot proxies there, I would
   have to expand

      { < protagonist,   { < name, "Larsbot" >, < shoesize, 123 > }    >, 
        < protagonist,   { < name, "Patrick" >, < haircolor, white > } > }

   which is not overly convenient. So, Tau+ decides to introduce (otherwise
   completely meaningless identifiers) and simply says "we treat identifiers
   and the proxy they are for as interchangeable".

   Real logicians may wince here.

   NOTE: THESE IDENTIFIERS ARE NOT PART OF THE SET THEY STAND FOR. Nothing
   in Tau+ would say so.

   So the above becomes:

      xyz = { < name, "Larsbot" >, < shoesize, 123 > }

      abc = { < name, "Patrick" >, < haircolor, white > }

      { < protagonist, xyz >, < protagonist, abz > }


3) 'Identical' is not 'equivalent'.

   Identical proxies are just identical sets. And sets are identical, if
   they have the same elements. And if these elements are <key, value> pairs,
   then they are compared as such.

   Example:

      { < name, "Larsbot" >, < shoesize, 123 > }

      and

      { < shoesize, 123 >, < name, "Larsbot" > }

      are identical.

   Example:

      { < name, "Larsbot" >, < shoesize, 123 > }

      and

      { < shoesize, 123 >, < name, "Larsbot" >, < tmdm-lover, 'most-certainly' > }

      are obviously not.

   'Equivalence' is now a semantical relationship between two (or more)
   proxies. This is handled by this beautiful partial function \bowtie which
   can be used to let a map be 'viewed through the eyes of a particular equivalence
   relation'.

   If part of this \bowtie it is defined that

      function bowtie (proxy1, proxy2) {

           if proxy1.shoesize == proxy2.shoesize then
              return union (proxy1, proxy2)
           else
              undefined
      }

   then this would merge according to the shoesize and simply would
   build the union of all properties. [ But anything can be hidden in this
   function, even accessing outside knowledge. ]

\rho