Two for the road
Lynn H. Maxson
lmaxson@pacbell.net
Tue, 27 Jun 2000 20:52:01 -0700 (PDT)
Kyle Lahnakoski wrote:"You speak without proof,
reference or explicit example. I find it
impossible to believe what you say without a least
one of these components."
I'm sorry, I'm only familiar with three available
specification languages--the Z-specification
language (predicate logic), Prolog (clausal logic),
and Trilogy (predicate logic). I do believe that I
offer a reference to "Simply Logical: Intelligent
Reasoning by Example". I would offer you an
article that appeared in the September or October
1998 issue of the CACM. I did offer you one
article recently published about the Transmeta
software morphing effort. To that I could add two
defunct software products, one from IBM (TIRS-The
Intelligent Reasoning System) and one from
Knowledge Garden (KnowledgePro). If you like, you
can toss in every other AI rule-based product. I
base everything on what experience I've had with a
number of such products. They are my examples.
In another response you question my reference to
SQL. Whatever the optimization difficulties the
vendor has, specifically Oracle, does not prevent
it from executing an SQL query, an add, delete, or
update. The language is a specification language
of a limited domain. It is one which has more
users than Lisp, C, C++, or JAVA. Moreover more
non-programmer users, the ones we keep saying that
we want the Tunes HLL language to support, use it
than programmers.
My experience lies more with DB2 on the mainframe
(MVS) and on the desktop (OS/2). I have known
numerous DBAs whose purpose lay in continually
examined the performance statistics of the DB
manager for use in tuning. The point is tht what
they discover and what they do in tuning to
increase or optimize performance essentially
becomes clerical. So much so that DB2 as it has
evolved has taken on much of the tuning
responsibility for itself. The success that it has
had in this probably accounts for the Oracle ads
which quote what percentage of the top e-business
accounts use it.
I continue to use SQL as an example due to the
number of non-technical users who have taken to it.
I don't use it as an example of optimization, but
as one of a specification language in which the
user says what he wants and the conditions under
which he wants it, leaving the procedural logic to
another agent within the database manager.
"Providing a language (or set of languages) that
force the programmer to provide the necessary
optimization information, and/or making analysis
algorithms to perform optimization, will take a lot
of work."
I'm not sure what I said that caused this statement
as I most certainly don't want to force a
programmer to do anything except find a different
line of work. I don't even mean that facetiously.
That's one of the differences between a
specification language and a programming one.
There is the writing of specifications. However
much the writing resembles programming that's
strictly coincidental. No people programming
occurs (it is an automated process). No
programmers are required. Again I refer you to
SQL, which is an example of a specification
language, not a programming one.
All that aside I am saying that the principle of
logical equivalence allows the optimization of any
logically correct expression regardless of how it
is written. In such a system no writer is forced
to do anything except the bare minimum, write a
correct logical expression however he sees fit.
Absolutely no force of any other kind is necessary,
certainly none of those which you mention.
Look you have never seen logic programming used to
provide this level of optimization. If you want to
say that's a challenge, well, so be it. If you
want to say that we are not up to the challenge,
well, that might reflect a reasonable difference of
opinion.
I am correct in the two-stage proof process
involved in logic programming, the completeness
proof and the exhaustive true/false proof. The
most practical example of it is Prolog. If you are
not familiar with it, you can download a free
working copy of the PDC Prolog product replete with
sample code of some sophistication.
The issue here is code optimization within the
concept of reflective programming, of changing the
pre-fixed logic of current code generators in which
only one result is "tolerated". Everyone reading
this should have experience with multiple products
supposedly of the same language whose optimization
produces different results. Here is is the luck of
the draw. Reflective programming says that it
shouldn't be.
For a given primitive operator and associated
operands more than one machine instruction sequence
can produce a given (logically equivalent) result.
Of that set at least one is equal to or greater
than any other. That's logic.
First you have to have a means of producing the set
of logically equivalent machine instruction
sequences. That is not done in any existing
compiler or interpreter. No one reading this has
ever experienced this occurring in any product. No
dialect of Lisp, for example, with its "pattern
matching" capability has ever done this though it
certainly lies within its capability.
Now why we will accept 0, 1, or more results from a
query and not from an optimization process is not
clear to me. What is clear to me is that it is
possible. Certainly it is a challenge. Consider
what it means to the cause of reflective
programming if we meet that challenge. One thing
it does is reduce the user's performance risk in
choosing a product. It's one less thing to worry
about.