Re: Principle of Orthogonal Design

From: Marshall <marshall.spight_at_gmail.com>
Date: Thu, 7 Feb 2008 10:42:57 -0800 (PST)
Message-ID: <26c6a3e3-736b-4523-8348-a5b1deeffbe8_at_e4g2000hsg.googlegroups.com>


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)

Marshall Received on Thu Feb 07 2008 - 19:42:57 CET

Original text of this message