Re: Principle of Orthogonal Design

From: David BL <davidbl_at_iinet.net.au>
Date: Thu, 7 Feb 2008 21:08:35 -0800 (PST)
Message-ID: <58ea456a-5d99-4538-953b-ca8a2b2f5887_at_u10g2000prn.googlegroups.com>


On Feb 8, 3:42 am, Marshall <marshall.spi..._at_gmail.com> wrote:
> On Feb 6, 5:13 pm, 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).
>
> > 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.
>
> Okay. But what if we have a constant, bobdole, and we want
> to write a query that will result in bobdole's grandchildren?
>
> bobdolesgrandchildren = parent(a=bobdole, b=x) & parent(a=x, b=z)

The query

    parent(a=bobdole, b=x) & parent(a=x, b=z)

has free variables x,z which isn't want you want. You need to project away x so that only z remains. The following defines bobdolesgrandchildren assuming exactly one attribute z for the grand children.

    bobdolesgrandchildren =

        (Ex) (parent(a=bobdole, b=x) & parent(a=x, b=z)) Received on Fri Feb 08 2008 - 06:08:35 CET

Original text of this message