Re: Principle of Orthogonal Design(B
Date: Thu, 7 Feb 2008 01:44:02 -0800 (PST)
Message-ID: <c28e225d-73ce-4a42-914a-8d43fed2166f_at_b2g2000hsg.googlegroups.com>
On Feb 7, 1:13 am, David BL <davi..._at_iinet.net.au> wrote:
> On Feb 7, 2:45 am, Marshall <marshall.spi..._at_gmail.com> wrote:
>
>
>
> > On Feb 5, 1:54 pm, Jan Hidders <hidd..._at_gmail.com> wrote:
> > > On 5 feb, 22:06, Marshall <marshall.spi..._at_gmail.com> wrote:
>
> > > > However, suppose we have a binary predicate P over
> > > > domain X and we want to assert it is reflexive? In predicate
> > > > logic we can use the same name twice and express this
> > > > very conveniently:
>
> > > > Ax in X: P(x,x)
>
> > > > How would we do this if P's attributes were already bound
> > > > to the names "x" and "y"?
>
> > > Roughly the same, except you indicate the role in the predicate with
> > > the attribute names. So assume that attribute names are 'a' and 'b':
>
> > > Ax in X: P(a=x,b=x)
>
> > I see. Okay, this is a very small change indeed. Basically we
> > are just specifying attributes using the same syntax as is
> > used in named-argument function invocation, in languages
> > that support that feature. This still relies on using the
> > quantifiers to introduce new names. And the attribute
> > names of different relations are always insulated from
> > each other: a relation may be in the scope of a quantifier,
> > but it is never in the scope of another relation.
>
> > This seems like it will work as a logical language (where
> > the results are always boolean) but I don't see how it
> > could work in a query language, because it doesn't
> > specify/unify the attribute names of the result relation.
>
> > An example:
>
> > Suppose we have
> > P(a, b)
> > Q(a, b)
> > as subsets of X*X
>
> > and we want to join P and Q on P.b = Q.a.
>
> > Ax in X: Ey in X: Ez in X: P(a=y, b=x) & Q(a=x, b=z)
>
> > I guess I should go read about the tuple relational calculus
> > and see what it does...
>
> It seems to me that a role name is tied to a complete sentence that a
> variable appears in. In the following example
>
> parent(P,C) :- P is the parent of child C.
>
> P has the role of "parent", and C has the role of "child".
>
> Now consider
>
> grandparent(GP,GC) :- parent(GP,P), parent(P,GC).
In terms of Marshall's example of a join I see the above as saying: $B"P(Bx parent(p:a,c:x) $B"J(B parent(p:x,c:b) $B"N(B grandparent(gp:a,gc:b)
But even better, if we use the set enumerations of the predicates, we
can state the result of a join using standard set builder notation:
Grandparents = { {gp:a, gc:b} | {p:a, c:x}, {p:x, c:b} $B":(B Parents }
Mmmm, set notation = tasty goodness.
>
I'm unclear what you mean here - x,y and z are values no?
> Within the conjunctive query on the rhs, there are three distinct
> roles: grandparent GP, parent P and grandchild GC.
>
> In the syntax
>
> P(a=y, b=x) & Q(a=x, b=z)
>
> I don't see any reason why we can't think of 'x', 'y' and 'z' as the
> three role names in the result relation.