I'm not entirely certain that I missed your point here. A good example of a non-deterministic "program" is

Select the element of array A having the greatest value

But that's cheating! Or is it? I may not know which array element is the largest, but of all the actions involving selection of a single array element (at least) one will involve choosing the largest one, so this is a perfectly good non-deterministic program (more than one array element can have the same value). Of course, a "real" program might be

Get the value of the first element and store it as X
Get the largest element of the array obtained by removing the first element and store it as Y
If X >Y return X, otherwise return Y

That's a real (deterministic) algorithm. The point here, of course, is that the non-determinism masks a recursive solution.

If I were going to implement the first solution, I might write a function get(i) that gets the value of the ith element of A, then my program would be something like

big = get(magic())

where magic() just happens to pick the right index for me (I don't know how).

To draw a geometric analogy, get() is local and magic() is global. I may not know about the global topology of the problem, but perhaps I can put together pieces involving only local knowledge that somehow fit together into a global solution. But, of course, my pieces don't "know" how they will be used. More precisely *I* have to create pieces that may be used in unpredictable ways, knowing full well that I can't say in advance what will happen to them.

But is this non-determinism? A good question. What I've attempted to do here is suggest that the more theoretical notion of non- determinism does actually fit well with the more practical notion of unpredictability.

===
Gregory Woodhouse
[EMAIL PROTECTED]

"Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away."
-- Antoine de Saint-Exupery

On Jul 12, 2005, at 7:54 PM, Richard G. DAVIS wrote:

Well, the paraphrase is apt, but misses my fundamental point. You raise an
important behavior of complex systems that leads into the subject of
"emergent properties"--a matter for beyond the scope of this discussion.

The "master" program and the program developer do not know anything about
the 'message' process.  That process is fully, completely
hidden--encapsulated. Thus, reading the Master Program phrase that invoked
another program does NOT tell the reader what will happen when the
invocation is acted upon by some final recipient program. The invocation in OOP is truly indeterminate, or at lease may be so. That is what makes it hard for me to discuss this with others. At best, the reader of an OOP Master program may develop a belief about what may happen, an conjecture at best. Consider an example--the effects of inheritance can not be known by
the reader of a Master Program in an OOP system based on the invoking
phrase--the call is indeterminate.

Some notes:

Message paths can ramify, they are not restricted to single thread.

The message process is where inheritance rules are implemented.

Some message processing may be driven by things like: which hardware capable
of acting on the message is least busy?

Because the message path can ramify, I prefer to speak about the "message
switch" mechanism that mediates between Master Programs and invoked
programs.  The term "message agent" comes into use here with a broader
semantic that message switch.

Regards,

Richard.





-------------------------------------------------------
This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening
July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual
core and dual graphics technology at this free one hour event hosted by HP,
AMD, and NVIDIA.  To register visit http://www.hp.com/go/dualwebinar
_______________________________________________
Hardhats-members mailing list
Hardhats-members@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hardhats-members

Reply via email to