programming and knowledge representation
Thilo Schwidurski
thilo.s at web.de
Tue Jan 16 15:12:18 UTC 2001
Dear members,
the group lately adressed unification of languages (vs. "Babel
effect") and metaprogramming and other philosophical concepts. So I
felt that it might be a good place for a discussion of some thoughts
about programming and more general about knowledge representation.
Please forgive in the case that I even use whole phrases that were
already written here (or elsewhere) without quoting properly - in the
end nothing I have to say is possibly really new - maybe/hopefully
except of the overall picture. But I can say that I definitly got
inspired and encouraged by the Self-, the Merlin- (Jecels not Suns),
the Tunes project and of course of all of what I read from you that
are devoted to thinking about programming in this group (and a couple
of others).
A first helpful step to deal with the "Babel effect"-problem could be
changing the view on what programming is. I see Programming (perhaps a
bit more general as usual) as gaining and writing down knowledge. You
could associate "gaining knowledge" with "designing/architecturing
programs".
I don't see so much use any more in the partitioning of knowledge in
data and programs/algorithms. An example: every program code that
contains constants contains "plain" data. Every database that contains
a kind of rules (I am thinking of values of string-fields that contain
code) contains programs.
So what I am aiming at ?
-
Knowledge can be represented as a directed graph, which' nodes could
be seen as extremly fine grained objects - possibly only "containing"
one value of a POD-Type like String or Number. Maybe there has to be
also a Bitarray Datatype but 'only' for efficiency in storing
"multimedia data" streams.
All other common named properties of objects like attributes, methods,
inheritence parents (each also representable by slots) and types are
realized by named edges. An edge can be named because edges can also
be connected - with edges or objects. The names are just objects (a
string-value-node).
This special graph (I would like to call it hypergraph but the term is
already defined differently - so I will just refer to it as graph) can
be seen as an "amalgamated structure" of semantic networks, object
networks and hypermedia in respect of what it can represent. I see it
as kind of "mother of representations" or *the* model (like in
model-view).
One motivation for this represention structure is that I found that
the relations between objects are at least as important as the objects
itself.
For example is deleting an object almost always really the unlinking
of two objects (that a historizing mechanism can and should take care
of).
-
The basic language concepts (message passing, delegation to prototypes
and classes, ...) can be plugged in (and perhaps sometimes even out
of) the environment (that means getting assigned to the
"environment?-object").
I am not sure if this is partly not even already state of the art in
Smalltalk/Self/other environments.
-
To represent code of the conventional textual programming languages
each language concept can be assigned to an arbitrary syntax (of
course carefully, without violating inherent constraints like "no two
concepts may be assigned to the same syntax within the same
environment") or even a set of alternative syntaxes. For example would
I prefer to write down mathematical code expressions in the common
mathematical symbol language (probably enhanced to be
computer-interpretable).
As far as I know there are functional languages that have this feature
of syntax-adaption. I am not sure at all (because I never designed a
language) if this "separating of concepts" works at all. I just have a
good feeling that it should anyway ;-)
-
Each language concept is assigned to (and gets processed by) an
interpreting machine (part of a compiler or interpreter or VM) - this
machine solely works with the underlying graph (seeing it as the
traditional AST-structure).
-
All the other common representations (e.g. textual program code, but
also "more visual" representations like UML, just everything that is
known as hypermedia) can be generated (temporarily) as *views* an the
graph by transforming-adapters.
-
A persistence-mechanism (mapping between different "layers" of
storage) only deals with graphs (resp. queried portions of the "whole"
graph). That means that the underlying graph/OO-database (virtual
memory management ? - I get confused what the different "parts" of the
concepts behind these terms really are) just works with graphs.
-
Historizing information is embedded in the graph and the processing
and usage of it is a crucial part of the KlDE (knowledge development
environment) as it seems to be very important to being able to track
the evolution of knowledge (especially the evolution of the linking).
-
Also like Historizing is Personalization (think of ownership,
authorship and privacy) a basic concept that has to be serviced by the
system.
-
After all could this system be the foundation of something like "open
knowledge" (in contrast to "open software") development - aiming at
breaking down the borderwalls of heterogenic knowledge representation
systems (possibly just yet another holy grail dream :-/ ...).
I shurely hope this ideas are not to far away from your interests and
would love to discuss them with you.
Regards,
Thilo.
More information about the Self-interest
mailing list