Re: Principle of Orthogonal Design

From: David BL <davidbl_at_iinet.net.au>
Date: Wed, 6 Feb 2008 17:13:35 -0800 (PST)
Message-ID: <dd30d3f1-e376-4364-9814-b0fa500ea3d4_at_q77g2000hsh.googlegroups.com>


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).

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. Received on Thu Feb 07 2008 - 02:13:35 CET

Original text of this message