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.