Against Truth
+Generated by Codox
Wildwood 0.1.0-SNAPSHOT
Against Truth
“Hey, what IS truth, man?” Beeblebrox, Z, quoted in [Adams, 1978]
diff --git a/docs/codox/Analysis.html b/docs/codox/Analysis.html index 192846f..d747e8c 100644 --- a/docs/codox/Analysis.html +++ b/docs/codox/Analysis.html @@ -1,6 +1,6 @@ -Analysis Generated by Codox
Wildwood 0.1.0-SNAPSHOT
Analysis
+Analysis Generated by Codox
Wildwood 0.1.0-SNAPSHOT
Analysis
Accounts from the Philosophy of Science
(Towards another chapter. What l want to do is: ,
diff --git a/docs/codox/Arboretum.html b/docs/codox/Arboretum.html index 439b2c5..7a1d92a 100644 --- a/docs/codox/Arboretum.html +++ b/docs/codox/Arboretum.html @@ -1,6 +1,6 @@ -
Arboretum Generated by Codox
Wildwood 0.1.0-SNAPSHOT
Arboretum
+Arboretum Generated by Codox
Wildwood 0.1.0-SNAPSHOT
Arboretum
This chapter describes briefly an inference mechanism, implemented in the Arboretum prototype; this is included here to show the results achieved in the author’s early work on explanation, on which it is hoped to build in the current work. A fuller description of this mechanism, and of the Arboretum prototype, will be found in [Mott & Brooke 87], from which this chapter is largely drawn.
Arboretum was written in InterLisp-D[4] using LOOPS [5] object oriented facilities, to allow people to manipulate DTree structures through graphical representations: to build arbitrarily large knowledge bases, to use these to provide answers to questions about objects in domains admitting incomplete information - and to provide natural language explanations of these answers. The inference process by which answers are produced is shown as an animated graph. The user can ask the system how the value of any particular feature was arrived at, and what that value was. . It was developed for the Alvey DHSS Large Demonstrator Project, and sought to meet early perceptions of the needs of DHSS Adjudication Officers. Adjudication Officers decide claimants’ eligibility over a wide range of welfare benefits. There is a very large volume of work to be done, so they work under considerable pressure.
The Adjudication process within the DHSS has its own levels of authority culminating in the
diff --git a/docs/codox/Arden.html b/docs/codox/Arden.html index 5bb81df..2769048 100644 --- a/docs/codox/Arden.html +++ b/docs/codox/Arden.html @@ -1,6 +1,6 @@ -Arden Generated by Codox
Wildwood 0.1.0-SNAPSHOT
Arden
+Arden Generated by Codox
Wildwood 0.1.0-SNAPSHOT
Arden
Why Arden?
It was something of tradition in the InterLisp-D community to give successive versions of a project codenames with successive alphabetical initials. So the first version would have a name starting ‘A’, the second ‘B’, and so on. The first prototype for Wildwood was called ‘Arden’, because it starts with an ‘A’, and because it is a fantastical dream-like forest depicted in Shakespeare’s play ‘As You Like It’, which if I recall correctly was performed as a promenade performance by the Duke’s Theatre in Lancaster in that year. While Arboretum - that carefully tended garden of trees - had been, as I’ve said, largely Peter’s in concept, Wildwood would be mine.
Background
diff --git a/docs/codox/BatesonKammerer.html b/docs/codox/BatesonKammerer.html index 59a65ce..41f84c6 100644 --- a/docs/codox/BatesonKammerer.html +++ b/docs/codox/BatesonKammerer.html @@ -1,4 +1,4 @@ -The Bateson / Kammerer debate Generated by Codox
Wildwood 0.1.0-SNAPSHOT
The Bateson / Kammerer debate
+The Bateson / Kammerer debate Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file diff --git a/docs/codox/Bialowieza.html b/docs/codox/Bialowieza.html index cccf5ea..458e289 100644 --- a/docs/codox/Bialowieza.html +++ b/docs/codox/Bialowieza.html @@ -1,20 +1,46 @@ -Bialowieza Generated by Codox
Wildwood 0.1.0-SNAPSHOT
Bialowieza
+Bialowieza Generated by Codox
Wildwood 0.1.0-SNAPSHOT
Bialowieza
{ this chapter is in active development; quite a lot of the technical detail in this chapter at present will probably end up in Implementing, while additional high level and conceptual design, as it develops, will be here. }
Why Bialowieza?
Bialowieza is the second iteration of the Wildwood engine, and this following convention its name should start with ‘B’. Białowieża is Europe’s last great wild wood, and it is currently under threat.
Motivation
The current motivation for restarting work on Wildwood is to provide non-player characters in a game world with sufficient intelligence that they can enter into meaningful unscripted conversations about objects and events in that world.
-Major components of Bialowieza
-Knowledge Accessors
-The
-wildwood.knowledge-accessor/Accessor
protocol defines a bidirectional transducer which can fetch data from whatever storage representation the calling application uses into the representation defined bywildwood.schema
.Advocates
-The
-wildwood.advocate/Advocate
protocol describes an agent which can take part in decision processes.The engine itself
-The engine is implemented by the namespace
-wildwood.bialowieza
.Inference processes
-Advocates are entitled to use whatever inference processes they like, but they have access to
+wildwood.dengine
, which is an implementation of the DTree engine described in the chapter on Arboretum adapted to propositions as defined inwildwood.schema
.Knowledge representation
+It’s my intention that knowledge will be represented in Bialowieza not as Features, as were used in Arboretum, but as propositions, and in this section I intend to state what I mean by a proposition.
+On propositional and predicate calculi
+But firstly I should be clear that Bialowieza does not represent a propositional calculus. On the contrary, Arboretum, which dealt with features, is a propositional calculus. How so?
+A feature, in Arboretum, was a one-position predicate; an example would be, ‘is a widow’. Propositions were (in effect) constructed by applying that predicate to the case. Thus, suppose we were considering the case of someone called Calpurnia, the feature ‘is a widow’ expands to the proposition ‘Calpurnia is a widow’; and this proposition is, to Arboretum, atomic.
+Thus Arboretum can reason about whether Calpurnia is a widow. It can have a rule (and indeed, did have a rule) which says
++if + is a woman, and + has been married, and + husband is dead +then + is a widow +unless + was divorced, or + has remarried. +
The features are given as predicates, because all must apply to the same subject; expanding them to propositions gives us, in this case
++if + Calpurnia is a woman, and + Calpurnia has been married, and + Calpurnia's husband is dead +then + Calpurnia is a widow +unless + Calpurnia was divorced, or + Calpurnia has remarried. +
However, another proposition about a claimant that might have been been interesting to an adjudicating officer might be ‘is a widowed mother’. One might define that in common sense terms as
+if + Calpurnia is a widow, and + there exists some person whose mother is Calpurnia, and + that person is still a child +then + Calpurnia is a widowed mother +
Propositions
{ TODO read, and follow references from, https://plato.stanford.edu/entries/propositions/ }
As a slightly tendentious first stab, a proposition is a sentence which is either true or false. This is tendentious because two different sentences which have the same underlying semantic import are usually considered to be instances of the same proposition, and seen from the other end, there may be many ways you can validly express a single proposition in a single natural language. However, for the present purpose, the proposition that a proposition is a sentence is good enough.
@@ -36,9 +62,8 @@
:location
- where did it happen? value might be something from which proximity may be derived;- -
:time
- when did it happen? This needs to be a value with a canonical order, such as a number;- -
:truth
- is it true? if present and valuefalse
, negates the proposition;- -
:confidence
- how sure am I? A value, perhaps, in the range -1 to 1, although conventionally if less than 1 we probably set the:truth
value to false;- +
:data
- an argument structure…!- +
:confidence
- how sure am I? A value, perhaps, in the range -1 to 1, where values less than one in effect represent a belief that the proposition is false;:data
- a collection of (zero or more) argument structures;:authority
- id of agent from whom, or rule from which, I know this;and so on. The exact set of privileged keys is probably actually a matter for particular advocates rather than for the engine itself, although if the advocates in the game don’t broadly share the same set of privileged keys then it won’t work very well.
@@ -47,12 +72,11 @@
- that the proposition itself is a
claim
in the sense of the C term;- that
-:data
above is preciselydata
in the sense of the D term in Toulmin’s schema, but may (is likely to) also provide awarrant
in the sense of the W term;- that
+:truth
and:confidence
are bothqualifiers
of the claim in the sense of the Q term;- that
:confidence
is aqualifier
of the claim in the sense of the Q term;- that
:authority
is a form ofbacking
in the sense of the B term.So what, then, is an ‘argument structure’, as described above? It seems to me that it may be exactly a proposition, with the special feature that the value of the
:data
key is not minimised.Recall that in the chapter on Arboretum I observed that the working of the DTree decision algorithm caused precisely those nodes to be collected whose fragments which provided the most relevant explanation to support the decision, in a natural sequence from the general to the particular. I believe that precisely the same fortuitous alchemy will provide the argument structure to provide Toulmin’s D - out
-:data
term. The DTree itself then becomes the W - the:warrant
; and the author of the DTree becomes the:authority
.{ TODO: investigate how this notion of a proposition - and a Toulmin structure - relates to situation semantics; especially, consider how locating a proposition in time and space captures the notion of a situation. }
The located proposition
Aristotle’s propositions are essentially two position: they describe a relationship between two entities, a subject and an object. But they’re not located.
Thus:
@@ -78,8 +102,8 @@then provided the atomicity of our notions of time and space is sufficiently fine, we’re getting pretty close. Adding a notion of location to propositions leads to the notion of an event, a small bundle or ball of time and space which gives them context; and we can reason with this.
The size of an event is, of course, a slightly slippery notion. The inference that Caesar died (at least partly) from the blow struck by Brutus is only possible if the envelope of the event is fairly small - no more than a few metres, no more than a few minutes. But if we replace Dagger1 with Rifle1 then the spatial extent of the event can be considerable expanded; and if it’s LandMine1, then the temporal aspect similarly so.
Are located two-position propositions sufficient?
-The reason I like the idea of investigating whether located two position propositions are sufficient is that a very regular knowlege representation is easy to compute over. The reason I think it might not be is this:
-Suppose Calpurnia told Drusilla that Brutus killed Caesar in the Forum on the Ides of March. For simplicity, let’s call
+The reason I like the idea of investigating whether located two position propositions are sufficient is that a very regular knowlege representation is easy to compute over. The reason I think it might not be is that some things don’t - at first glance - seem to fit naturally into this schema.
+For example, suppose Calpurnia told Drusilla that Brutus killed Caesar in the Forum on the Ides of March. For simplicity, let’s call
@@ -90,8 +114,26 @@
- Brutus killed Caesar in the Forum on the Ides of March.
- P2 := ‘Calpurnia uttered P1 at E1.’
- P3 := ‘Drusilla heard P1 at E1.’
-And the warrant for the belief that P1 is the conjunction of P2 and P3.
-Writing it down like that, it kind of works, but I’m not yet wholly persuaded. It feels clumsy.
+And the warrant for Drusilla’s belief that P1 is the conjunction of P2 and P3.
+So we can represent this as
++{:verb :kill :subject :brutus :object :caesar :location :forum :date ides-of-march + :data [{:verb :utter :subject :calpurnia + :object {:verb :kill :subject :brutus :object :caesar :location :forum :date ides-of-march :authority :calpurnia} + :authority :drusilla} + {:verb :hear :subject :calpurnia + :object {:verb :kill :subject :brutus :object :caesar :location :forum :date ides-of-march :authority :calpurnia} :authority :drusilla}] + :authority :drusilla} +
Taking it further to look at the sorts of things required by The Great Game, there are two classes of things which need frequently to be handled. one is the passing of news, in gossip; and the other is recording trading information, in markets.
+The gossip case is covered by the Calpurnia told Drusilla example given above, leaving the markets case. When trading in markets we need three things: who sold the consignment, who bought the consignment, and the unit price of the commodity. Note that putting it like that makes a
+consignment
a first class entity, with properties of at leastcommodity
andquantity
.So, again, we have a notional event E2 at which a commodity C1 was traded, where E2 has (for example) a location of
+Forfar
and a timestamp of 202005181600; while C1 has a commodity ofFish
and a quantity of50
. Let’s say the price was 4 bronze coins per kilo.This transaction could be represented by the propositions:
++
+- P4 := ‘Donald sold 50 Kg of Fish in Forfar at 202005181600’
+- P5 := ‘Fiona bought 50 Kg of Fish in Forfar at 202005181600’
+- P6 := ‘Fish sold for 4 bronze/Kg in Forfar at 202005181600’
+So it seems to me that it’s possible to represent the things I know I need to represent, using only located two-position propositions.
As an exercise for the reader, how would we represent ‘Dirck, Joris and I carried the good news from Ghent to Aix’ using only located two position propositions? It feels, as I said, clumsy.
There is, of course, also a lurking combinatorial explosion here. If for each proposition which is learned, two further propositions must be learned as warrant for the first proposition, the world blows up. In an ideal platonic universe we may indeed have turtles all the way down, but in a finite machine we need to say, arbitrarily but ruthlessly, that some classes of proposition will be stored unwarranted.
The event is (like) a situation
@@ -128,7 +170,7 @@I’d argue that these are clearly very similar.
My schema does not specify that “at I1: … understands, a, c; no”, but there’s a reason for that.
-Learning, consistency and confidence
+Learning, consistency, trust and confidence
Let us suppose that Drusilla already knows the proposition that
- Brutus killed Caesar in Rome in March.
@@ -137,7 +179,7 @@-
- Brutus killed Caesar in the Forum on the Ides of March.
The two accounts are compatible; this compatibility migh be represented, if you choose, by two further propositions:
+The two accounts are compatible; this compatibility might be represented, if you choose, by two further propositions:
- P4 The Forum is within Rome.
- P5 The Ides of March is within March.
@@ -146,7 +188,13 @@So (unless she witnessed it herself, in which case you’d expect her to have more precise information), Drusilla does not know, in a strong sense, that Brutus killed Caesar in Rome in March. She has some degree of confidence in that proposition, which is likely to be less than perfect.
When she learns from Calpurnia that Brutus killed Caesar in the Forum on the Ides of March, because the two claims are compatible, her confidence in each is likely to increase.
By contrast, if Falco then says ‘No, I heard from Gaius that it happened in April’, then that casts doubt on both the first two claims - but also on this new claim. Because the claims are not compatible, they can’t all be right.
-For the time being, I’m going to leave the issue of how confidence is derived and adjusted as an implementation detail; I don’t - yet, at any rate - have an account of how this should work that I can defend. However, there’s one further significant point to make about propositions before we move on.
+For the time being, I’m going to leave the issue of how confidence is derived and adjusted as an implementation detail; I don’t - yet, at any rate - have an account of how this should work that I can defend. There are two main avenues to explore,
+ +However, I haven’t yet worked out what the implications of either of these are for my schema.
+However, there’s one further significant point to make about propositions before we move on.
On the subtext of propositions
Propositions are not atomic. They do not come single spies, but freighted with battalions of inferable subtexts. Suppose Calpurnia says
@@ -180,7 +228,87 @@
are still further strengthened.
In proposing a formalism to express propositions, we need to consider how it allows this freight to be unpacked.
-{ TODO: if we receive a new proposition which confirms a proposition we already know, our confidence in both increases. If we learn a new one which contradicts one we already know, our confidence in both decreases. Expand! }
+Conjunctions, disjunctions, and confidence
+Suppose we have an impeccable witness - one in whom we have 100% confidence - who tells us
++
+- Brutus, Cassius and Longus killed Caesar in the Forum on the Ides of March
+From this we learn - all with 100% confidence - that
++
+- Brutus is a killer
+- Cassius is a killer
+- Longus is a killer
+- Caesar has been killed
+- The Forum is a place where killings happen
+- The Ides of March are a time to be extra cautious
+And there are no problems there. But suppose, instead, our witness had said
++
+- Brutus, Cassius or Longus killed Caesar in the Forum on the Ides of March
+What do we learn? Natural English does not distinguish between inclusive and exclusive disjunction. So we still know, with 100% certainty
++
+- Caesar has been killed
+- The Forum is a place where killings happen
+- The Ides of March are a time to be extra cautious
+Do we know with any confidence at all that
+Brutus is a killer
? We know with certainty that one of the three is a killer; there is a possibility (inclusiveor
) that all are killers. So it seems to me, naively, that we can at least divide the confidence we have in the initial, composite proposition by the number of disjuncts.So we now have
++
+- Brutus is a killer (33%)
+- Cassius is a killer (33%)
+- Longus is a killer (33%)
+- Caesar has been killed (100%)
+- The Forum is a place where killings happen (100%)
+- The Ides of March are a time to be extra cautious (100%)
+But wait.
+What happens if we learn from another impeccable source that
+Longus is not a killer
. What does that say about whether Brutus is? Obviously the confidence in the idea thatBrutus is a killer
must increase, so the three propositions+
+- Brutus is a killer
+- Cassius is a killer
+- Longus is a killer
+are not distict. Change in confidence in one implies change in confidence in the others. But how?
+Suppose instead our second impeccable source had instead confirmed that
+Longus killed Caesar in the Forum
. By the logic that said that the negation of this would cause our confidence in the possibility thatBrutus is a killer
should increase, surely now it must decrease?But wait further.
+Suppose our second impeccable source says
+Cassius and Longus killed Caesar in the Forum
. Now we know that the or - the disjunction - was not exclusive. We know that two of the accused are guilty. What, if anything, does this say about Brutus? Is our confidence that he, too, is a killer, increased or decreased by this? I cannot see any justification for either.TODO: read
++
+- http://web.mit.edu/24.954/www/files/simons.disjunction.pdf
+- https://link.springer.com/chapter/10.1007/BFb0031745
+Universally located and unlocated propositions
+In the last passage, I observed that if we had multiple competing reported locations at which Caesar was said to have been killed, then there was nevertheless agreement on the fact that Caesar had been killed; so while we might be in doubt about whether the death had happened in March or June, there’s much less doubt that the death happened.
+So we have a hierarchy of confidence in the propositions:
++
+- We’re reasonably certain that Caesar was killed;
+- We may think it probable that he was killed in March, since we have two independent sources for this;
+- We’re probably more skeptical that he was killed in April, since the report is second hand and since it’s inconsistent with the others.
+Of these, the first proposition is not located in time. There must have been an event, but we don’t know when it was. Strictly, of course, we could in this case assign a broad event - ‘the spring’ - but what I want to talk about here is cases of things which we believe have happened, but do not know when. The reason I want to talk about them is to draw a clear distinction between unlocated propositions, and universally located propositions.
+A universally located proposition is something like
++
+- Water is wet.
+Or, to use a more classical example,
++
+- Socrates is a man.
+For the purposes of the pedagogy of logic, Socrates is always and everywhere a man. His manliness is universally located; thus the proposition ‘Socrates is a man’ is always deemed to be true. Consider the proposition ‘Socrates was hungry’. This is also, almost certainly true. But he wasn’t hungry for all time, he was hungry at most for short periods during his lifetime. There’s an important disctinction between
++
+- Socrates is a man
+and
++
+- Socrates was hungry
+and we need to make that explicit, so that we know whether we’re asserting an unlocated proposition or a universal one. I’m going to elect that it is the universal that should always be explicitly stated, so we have
++
- Water is wet in the universe in all time;
+- Socrates is a man in the universe in all time;
+- Socrates was hungry.
+Proposition minimisation
{ TODO: probably lose this. I increasingly think that, whatever the internal representation of the proposition within the advocate or knowledge base, the proposition as passed around must always be minimised. This is, in any case, very much an implementation detail. }
How are the values of
@@ -189,6 +317,15 @@:subject
,:object
and so on to be passed? If we pass rich knowledge structures around, then we lose the insight that different advocates may know different things about given objects. Thus, while internally within each advocate’s knowledge base objects may be stored with rich data, when they’re passed around in propositions they should be minimised - that is to say, the value should just be a unique identifier, such that, for every object in the domain, if an advocate knows anything at all about that object, it knows its unique identifier and knows the object by that unique identifier.But in saying ‘the advocate knows’, actually, the advocate knows nothing. The advocate has access to a knowledge base, and it is in the knowledge base that the knowledge is stored. It may be an individual knowledge base, in which case we can implement that idea that different advocates may have the different knowledge about the same object, or it may be a shared consensual knowledge base.
A proposition is represented as a map. So to minimise a proposition, for every value in that map, if the value is itself a map it shall be replaced by the value of the key
:id
in that map.This means that every implementation of the
+wildwood.knowledge-accessor/Accessor
protocol must transduce whatever token its backing store uses as the primary key for an object to:id
when it performs afetch
operation.Major components of Bialowieza
+Knowledge Accessors
+The
+wildwood.knowledge-accessor/Accessor
protocol defines a bidirectional transducer which can fetch data from whatever storage representation the calling application uses into the representation defined bywildwood.schema
.Advocates
+The
+wildwood.advocate/Advocate
protocol describes an agent which can take part in decision processes.The engine itself
+The engine is implemented by the namespace
+wildwood.bialowieza
.Inference processes
+Advocates are entitled to use whatever inference processes they like, but they have access to
wildwood.dengine
, which is an implementation of the DTree engine described in the chapter on Arboretum adapted to propositions as defined inwildwood.schema
.Thoughts on the shape of a knowledge base
The object of building Bialowieza as a library is that we should not constrain how applications which use the library store their knowledge. Rather, knowledge accessors must transduce between the representation used by the particular storage implementation and that defined in
wildwood.schema
. However, what we’ve described above suggests that a hierarchical database would be a very natural fit for knowlege base data - more natural, in this case, than a relational database.Prejudice, and defaults
diff --git a/docs/codox/Errata.html b/docs/codox/Errata.html index 9adcd58..262be99 100644 --- a/docs/codox/Errata.html +++ b/docs/codox/Errata.html @@ -1,6 +1,6 @@ -Errata Generated by Codox
Wildwood 0.1.0-SNAPSHOT
Errata
+Errata Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file diff --git a/docs/codox/Experience.html b/docs/codox/Experience.html index a9f1c8b..cf59e52 100644 --- a/docs/codox/Experience.html +++ b/docs/codox/Experience.html @@ -1,4 +1,4 @@ -Experience Generated by Codox
Wildwood 0.1.0-SNAPSHOT
Experience
+Experience Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file diff --git a/docs/codox/HegemonicArgument.html b/docs/codox/HegemonicArgument.html index 1630c86..41cde43 100644 --- a/docs/codox/HegemonicArgument.html +++ b/docs/codox/HegemonicArgument.html @@ -1,4 +1,4 @@ -Hegemonic Argument Generated by Codox
Wildwood 0.1.0-SNAPSHOT
Hegemonic Argument
+Hegemonic Argument Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file diff --git a/docs/codox/History.html b/docs/codox/History.html index 8cffb88..8b8db1a 100644 --- a/docs/codox/History.html +++ b/docs/codox/History.html @@ -1,6 +1,6 @@ -Hegemonic Argument
{ new chapter, beginning a sequence which argues that the purpose of argument is to achieve hegemony, not find truth. In this chapter we’ll cover the sources we’ve used already, and show that the philosophers of science, whatever they claim about the purpose of argument, actually argue in a highly polemical, persuasive manner, seeking to achieve widespread belief of their chosen position - that is, to achieve hegemony; and further, even those who make strong claims to the value of candour are frequently not candid in their own argument }
History Generated by Codox
Wildwood 0.1.0-SNAPSHOT
History
+History Generated by Codox
Wildwood 0.1.0-SNAPSHOT
History
History: Introduction
The object of this chapter is to describe and discuss the development of Expert System explanations from the beginning’ to the most recent systems. The argument which I will try to advance is that development has been continuously driven by the perceived inadequacy of the explanations given; and that, while many ad hoc, and some principled, approaches have been tried, no really adequate explanation system has emerged. Further, I will claim that, as some of the later and more principled explanation systems accurately model the accounts of explanation advanced in current philosophy, the philosophical understanding of explanation is itself inadequate.
{I ought to add to this chapter to give some overview of what’s happened since 1990, and look at explanations of neural network decisions, because that will help in later parts/chapters of Part One}
diff --git a/docs/codox/HuxleyKropotkin.html b/docs/codox/HuxleyKropotkin.html index 2dfecce..866de3a 100644 --- a/docs/codox/HuxleyKropotkin.html +++ b/docs/codox/HuxleyKropotkin.html @@ -1,4 +1,4 @@ -The Huxley / Kropotkin debate Generated by Codox
Wildwood 0.1.0-SNAPSHOT
The Huxley / Kropotkin debate
+The Huxley / Kropotkin debate Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file diff --git a/docs/codox/Implementing.html b/docs/codox/Implementing.html index 021bdec..0342df3 100644 --- a/docs/codox/Implementing.html +++ b/docs/codox/Implementing.html @@ -1,4 +1,4 @@ -Implementing Generated by Codox
Wildwood 0.1.0-SNAPSHOT
Implementing
+Implementing Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file diff --git a/docs/codox/JAccuse.html b/docs/codox/JAccuse.html index 45d4c0c..3e924b6 100644 --- a/docs/codox/JAccuse.html +++ b/docs/codox/JAccuse.html @@ -1,6 +1,6 @@ -J'Accuse Generated by Codox
Wildwood 0.1.0-SNAPSHOT
J’Accuse
+J'Accuse Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file diff --git a/docs/codox/KnacqTools.html b/docs/codox/KnacqTools.html index 35d32b7..1c754e4 100644 --- a/docs/codox/KnacqTools.html +++ b/docs/codox/KnacqTools.html @@ -1,6 +1,6 @@ -KnacqTools Generated by Codox
Wildwood 0.1.0-SNAPSHOT
KnacqTools
+KnacqTools Generated by Codox
Wildwood 0.1.0-SNAPSHOT
KnacqTools
Background
KnacqTools (’Knowledge Acquisition Toolkit") was essentially a productisation of the ideas developed in Arboretum. It was written in C, originally for Acorn’s RISC OS operating system, and later ported to UNIX. The only major innovation of KnacqTools was that it was able to transform DTree knowledge structures into the rule languages of a number of contemporary ‘expert system’ inference engines.
Thus the expected use of KnacqTools was not to run an inference process itself (although of course it could do this), but to allow a knowledge engineer, using Peter Mott’s ‘elicitation by exception’ technique, which I and others had polished in the field, to enter DTrees elicited from domain experts, compile these DTrees into production rules, and export those prodution rules to the selected expert system package for deployment.
diff --git a/docs/codox/Manifesto.html b/docs/codox/Manifesto.html index 9b9390c..dac4e5b 100644 --- a/docs/codox/Manifesto.html +++ b/docs/codox/Manifesto.html @@ -1,6 +1,6 @@ -Manifesto Generated by Codox
Wildwood 0.1.0-SNAPSHOT
Manifesto
+Manifesto Generated by Codox
Wildwood 0.1.0-SNAPSHOT
Manifesto
Machine inference – automated reasoning, the core of what gets called Artificial Intellegence – has ab initio been based on the assumption that the purpose of reasoning was to preserve truth. It is because this assumption is false that the project has thus far failed to bear fruit, that Allan Turing’s eponymous test has yet to be passed.
Of course it is possible to build machines which, within the constraints of finite store, can accurately compute theora of first order predicate calculus ad nauseam but such machines do not display behaviour which is convincingly intelligent. They are cold and mechanical; we do not recognise ourselves in them. Like the Girl in the Fireplace’s beautiful clocks, they are precisely inhuman.
diff --git a/docs/codox/OnHylasAndPhilonus.html b/docs/codox/OnHylasAndPhilonus.html index a185b6e..9b12dd7 100644 --- a/docs/codox/OnHylasAndPhilonus.html +++ b/docs/codox/OnHylasAndPhilonus.html @@ -1,6 +1,6 @@ -On the First Dialogue of Hylas and Philonous Generated by Codox
Wildwood 0.1.0-SNAPSHOT
On the First Dialogue of Hylas and Philonous
+On the First Dialogue of Hylas and Philonous Generated by Codox
Wildwood 0.1.0-SNAPSHOT
On the First Dialogue of Hylas and Philonous
The argument that our perception of a ‘real world’ does not prove its existence is not new, of course. Here is a classic statement of a similar argument from BerkeIey’s First Dialogue of Hylas and Philonous:
Hyl.: Do we not perceive the stars and moon, for example, to be a A great way off? Is not this, I say, manifest to the senses? I
diff --git a/docs/codox/Scratchpad.html b/docs/codox/Scratchpad.html new file mode 100644 index 0000000..c77dea8 --- /dev/null +++ b/docs/codox/Scratchpad.html @@ -0,0 +1,23 @@ + +Scratchpad: Working notes, not part of the main document Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file diff --git a/docs/codox/TheProblem.html b/docs/codox/TheProblem.html index 6811f50..e02a57b 100644 --- a/docs/codox/TheProblem.html +++ b/docs/codox/TheProblem.html @@ -1,6 +1,6 @@ -Scratchpad: Working notes, not part of the main document
+A supporting context
+Bialowieza is probably never going to be part of an actual game engine, and is probably always just an experimentation platform/proof of concept demonstrator. However, it would be good to get up to a point where we could
++
+- Analyse a corpus of text to extract knowledge;
+- Query that knowledge in a reasonable verisimilitude of natural language;
+- Accept those queries through a spoken word rather than typed interface;
+- Speak the responses in reasonably natural language.
+Components which would help with this (I don’t need to reinvent all the wheels:
+Text analysis
+(Supports both 1. and 2. above):
++
+- OpenNLP
+- Agents for Actors
+Speech recognition
++
+- speech-recognition 2.
+Text to speech
The Problem Generated by Codox
Wildwood 0.1.0-SNAPSHOT
The Problem
+The Problem Generated by Codox
Wildwood 0.1.0-SNAPSHOT
The Problem
In this chapter talk about the perceived need for expert system explanations. Advance:
the arguments used by expert systems designers, saying why explanations are needed;
the arguments used by critics which claim that the explanations given are not good enough.
diff --git a/docs/codox/index.html b/docs/codox/index.html index 2b94155..7c35d96 100644 --- a/docs/codox/index.html +++ b/docs/codox/index.html @@ -1,3 +1,3 @@ -Wildwood 0.1.0-SNAPSHOT Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file +Wildwood 0.1.0-SNAPSHOT
Released under the EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0
A general inference library using a game theoretic inference mechanism.
Installation
To install, add the following dependency to your project or build file:
[wildwood "0.1.0-SNAPSHOT"]Topics
- Against Truth
- Analysis
- Arboretum
- Arden
- The Bateson / Kammerer debate
- Bialowieza
- Errata
- Experience
- Hegemonic Argument
- History
- The Huxley / Kropotkin debate
- Implementing
- J'Accuse
- KnacqTools
- Manifesto
- On the First Dialogue of Hylas and Philonous
- The Problem
- Introduction to Wildwood
Namespaces
wildwood.bialowieza
The second iteration of the core inference engine for Wildwood
Public variables and functions:
wildwood.caesar
A dummy set of advocates and knowledge accessors with knowledge about the death of Julius Caesar.
Public variables and functions:
wildwood.dengine.engine
An implementation of the DTree engine adapted to
wildwood.schema
propositions.Public variables and functions:
wildwood.knowledge-accessor
The key point of building Bialowieza as a library rather than a complete application is that it should be possible to hook it up to multiple sources of knowledge. Thus we must design a protocol through which knowledge can be accessed, and a schema in which it will be returned. Note that the accessor must be able to add knowledge to the knowledge base, as well as retrieve it.
Public variables and functions:
wildwood.mongo-ka
A knowledge accessor fetching from and storing to Mongo DB.
Public variables and functions:
wildwood.schema
The knowledge representation. This probably ends up looking a bit like a Toulmin schema, where claims are represented as propositions. There also need to be rules or predicates, things which can test whether a given proposition has a given value. There may be other stuff in here.
Public variables and functions:
Wildwood 0.1.0-SNAPSHOT Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file diff --git a/docs/codox/intro.html b/docs/codox/intro.html index 90ec92b..aa92944 100644 --- a/docs/codox/intro.html +++ b/docs/codox/intro.html @@ -1,6 +1,6 @@ -Wildwood 0.1.0-SNAPSHOT
Released under the GNU General Public License,version 2.0 or (at your option) any later version
A general inference library using a game theoretic inference mechanism.
Installation
To install, add the following dependency to your project or build file:
[wildwood "0.1.0-SNAPSHOT"]Topics
- Against Truth
- Analysis
- Arboretum
- Arden
- The Bateson / Kammerer debate
- Bialowieza
- Errata
- Experience
- Hegemonic Argument
- History
- The Huxley / Kropotkin debate
- Implementing
- J'Accuse
- KnacqTools
- Manifesto
- On the First Dialogue of Hylas and Philonous
- Scratchpad: Working notes, not part of the main document
- The Problem
- Introduction to Wildwood
Namespaces
wildwood.bialowieza
The second iteration of the core inference engine for Wildwood
Public variables and functions:
wildwood.caesar
A dummy set of advocates and knowledge accessors with knowledge about the death of Julius Caesar.
Public variables and functions:
wildwood.dengine.engine
An implementation of the DTree engine adapted to
wildwood.schema
propositions.Public variables and functions:
wildwood.knowledge-accessor
The key point of building Bialowieza as a library rather than a complete application is that it should be possible to hook it up to multiple sources of knowledge. Thus we must design a protocol through which knowledge can be accessed, and a schema in which it will be returned. Note that the accessor must be able to add knowledge to the knowledge base, as well as retrieve it.
Public variables and functions:
wildwood.logic
Highly experimental work towards basic logic operators on Bialowieza-style proposition structures
wildwood.mongo-ka
A knowledge accessor fetching from and storing to Mongo DB.
Public variables and functions:
wildwood.schema
The knowledge representation. This probably ends up looking a bit like a Toulmin schema, where claims are represented as propositions. There also need to be rules or predicates, things which can test whether a given proposition has a given value. There may be other stuff in here.
Public variables and functions:
Introduction to Wildwood Generated by Codox
Wildwood 0.1.0-SNAPSHOT
Introduction to Wildwood
+Introduction to Wildwood Generated by Codox
Wildwood 0.1.0-SNAPSHOT
Introduction to Wildwood
I started building Wildwood nearly forty years ago on InterLisp-D workstations. Then, because of changing academic projects, I lost access to those machines, and the project was effectively abandoned. But, I’ve kept thinking about it; it has cool ideas.
Explicable inference
Wildwood was a follow on from ideas developed in Arboretum, an inference system based on a novel propositional logic using defaults. Arboretum was documented in our paper
diff --git a/docs/codox/wildwood.advocate.html b/docs/codox/wildwood.advocate.html index 2649288..4382496 100644 --- a/docs/codox/wildwood.advocate.html +++ b/docs/codox/wildwood.advocate.html @@ -1,7 +1,7 @@ -wildwood.advocate documentation Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file diff --git a/docs/codox/wildwood.bialowieza.html b/docs/codox/wildwood.bialowieza.html index 08dbe33..9381266 100644 --- a/docs/codox/wildwood.bialowieza.html +++ b/docs/codox/wildwood.bialowieza.html @@ -1,7 +1,7 @@ -wildwood.advocate
An agent capable of playing the explanation game.
+wildwood.advocate documentation Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file +wildwood.advocate
An agent capable of playing the explanation game.
An advocate must have its own knowledge accessor. Different advocates within a game may be accessing different knowledge bases, or different subsets of the same knowledge base with different - potentially competing - knowledge. It also needs to know the schema in which knowledge will be presented.
Since the mechanism by which the application will communicate with the library must include a way for users to interact with the game, and since the role of the user in the came is just as a participant, advocate must be defined as a protocol, in order that it may be extended by code within the application which is passed in to the game when the game is started. Indeed, multiple agents - the user(s) and potentially non-player characters - may be passed in.
In this conception, nothing within a default advocate has to be able to produce or consume natural language. It is sufficient for the API exposed by wildwood.advocate to receive and return wildwood.schema objects.
-Obviously to show a user interface anything similar to Arden’s, or for what I intend for The Great Game, the advocates passed must ‘at their other end’ - that is, on the application side rather than the library side - be able to consume and emit natural language, but that functionality does not need to be part of the wildwood library, and certainly does not need to be part of the default advocate as specified here.
Advocate
protocol
members
decide
(decide self proposition argument)
Return
true
,false
ornil
as the value of thisproposition
, given thisargument
. The value ofproposition
should be a proposition as defined bywildwood.schema/proposition?
; the value ofargument
should satisfywildwood.schema/argument?
.id
(id self)
Return a value which uniquely identifies this agent.
move
(move self proposition argument)
Return a new argument structure representing the result of applying my
decide
method to thisproposition
andargument
, specifying in some way not yet determined what sort of move I have made.record
(record self proposition value)
Pass a
proposition
with a determinedvalue
to me, in order that advocates can, if desired, record the determined value in their knowledge base. The API does not require that the advocate records the decision, only that it has the opportunity to do so. Return the value.Obviously to show a user interface anything similar to Arden’s, or for what I intend for The Great Game, the advocates passed must ‘at their other end’ - that is, on the application side rather than the library side - be able to consume and emit natural language, but that functionality does not need to be part of the wildwood library, and certainly does not need to be part of the default advocate as specified here.
Advocate
protocol
members
decide
(decide self proposition argument)
Return
true
,false
ornil
as the value of thisproposition
, given thisargument
. The value ofproposition
should be a proposition as defined bywildwood.schema/proposition?
; the value ofargument
should satisfywildwood.schema/argument?
.id
(id self)
Return a value which uniquely identifies this agent.
move
(move self proposition argument)
Return a new argument structure representing the result of applying my
decide
method to thisproposition
andargument
, specifying in some way not yet determined what sort of move I have made.record
(record self proposition value)
Pass a
proposition
with a determinedvalue
to me, in order that advocates can, if desired, record the determined value in their knowledge base. The API does not require that the advocate records the decision, only that it has the opportunity to do so. Return the value.wildwood.bialowieza documentation Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file diff --git a/docs/codox/wildwood.caesar.html b/docs/codox/wildwood.caesar.html index 8e89273..211e4a7 100644 --- a/docs/codox/wildwood.caesar.html +++ b/docs/codox/wildwood.caesar.html @@ -1,6 +1,6 @@ -wildwood.bialowieza
The second iteration of the core inference engine for Wildwood
decide
(decide proposition & agents)
Decide the truth value of this
+proposition
by convening a game between these advocateagents
. Iterate the game until all agents PASS; then finally offer each agent’srecord
method theproposition
together with the decided truth value (true
orfalse
), before returning that value.wildwood.bialowieza documentation Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file +wildwood.bialowieza
The second iteration of the core inference engine for Wildwood
decide
(decide proposition & agents)
Decide the truth value of this
proposition
by convening a game between these advocateagents
. Iterate the game until all agents PASS; then finally offer each agent’srecord
method theproposition
together with the decided truth value (true
orfalse
), before returning that value.The
proposition
is a proposition as defined in thewildwood.schema
; that is to say, the predicatewildwood.schema/predicate?
returns true of it. If the proposition isn’t a predicate, throw an exception.Each of
agents
should be an object implementing thewildwood.advocate/Advocate
protocol. If an agent isn’t an Advocate, throw an exception.Do not throw an exception under any other circumstances.
-If an agent throws an exception, catch it and treat it as a PASS.
If an agent throws an exception, catch it and treat it as a PASS.
wildwood.caesar documentation Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file diff --git a/docs/codox/wildwood.dengine.engine.html b/docs/codox/wildwood.dengine.engine.html index b7a6e36..662fa97 100644 --- a/docs/codox/wildwood.dengine.engine.html +++ b/docs/codox/wildwood.dengine.engine.html @@ -1,3 +1,3 @@ -wildwood.caesar
A dummy set of advocates and knowledge accessors with knowledge about the death of Julius Caesar.
+wildwood.caesar documentation Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file +wildwood.caesar
A dummy set of advocates and knowledge accessors with knowledge about the death of Julius Caesar.
The Case Against Marcus Brutus
Did Brutus conspire to kill Caesar in the forum in the Ides of March?
Falco, the detective, must find out.
@@ -36,4 +36,4 @@did-lie
- true of an entity which has offered a proposition which for other reasons we do not believe. Tricky. False by default and I think we probably leave it at that for now.- -
was-unarmed
- true of an entity at a timet
if they were unarmed at the time.Note that ALL of this is too complex for the simple DTree logic of the Arboretum / KnacqTools generation. They could not unpack propositions as I’m proposing here.
cassius-kb
Cassius and Longus each bear witness that the other killed Caesar in the Forum on the Ides of March.
drusila-kb
Drusila has heard that Brutus killed Caesar in the forum. She keys it on all three, for efficiency of retrieval.
longus-kb
Cassius and Longus each bear witness that the other killed Caesar in the Forum on the Ides of March.
Note that ALL of this is too complex for the simple DTree logic of the Arboretum / KnacqTools generation. They could not unpack propositions as I’m proposing here.
cassius-kb
Cassius and Longus each bear witness that the other killed Caesar in the Forum on the Ides of March.
longus-kb
Cassius and Longus each bear witness that the other killed Caesar in the Forum on the Ides of March.
wildwood.dengine.engine documentation Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file +wildwood.dengine.engine
An implementation of the DTree engine adapted to
wildwood.schema
propositions.decide
(decide proposition node accessor)
Decide the truth value of this
proposition
, using the dtree rooted at thisnode
and knowledge provided by thisaccessor
.wildwood.dengine.engine documentation Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file diff --git a/docs/codox/wildwood.dengine.node.html b/docs/codox/wildwood.dengine.node.html index 0d44a39..228def8 100644 --- a/docs/codox/wildwood.dengine.node.html +++ b/docs/codox/wildwood.dengine.node.html @@ -1,3 +1,3 @@ -wildwood.dengine.engine
An implementation of the DTree engine adapted to
wildwood.schema
propositions.decide
(decide proposition node accessor)
Decide the truth value of this
proposition
, using the dtree rooted at thisnode
and knowledge provided by thisaccessor
.wildwood.dengine.node documentation Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file +wildwood.dengine.node
A dtree node.
wildwood.dengine.node documentation Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file diff --git a/docs/codox/wildwood.knowledge-accessor.html b/docs/codox/wildwood.knowledge-accessor.html index bb77d42..afa53c8 100644 --- a/docs/codox/wildwood.knowledge-accessor.html +++ b/docs/codox/wildwood.knowledge-accessor.html @@ -1,6 +1,6 @@ -wildwood.dengine.node
A dtree node.
wildwood.knowledge-accessor documentation Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file diff --git a/docs/codox/wildwood.logic.html b/docs/codox/wildwood.logic.html new file mode 100644 index 0000000..745563c --- /dev/null +++ b/docs/codox/wildwood.logic.html @@ -0,0 +1,3 @@ + +wildwood.knowledge-accessor
The key point of building Bialowieza as a library rather than a complete application is that it should be possible to hook it up to multiple sources of knowledge. Thus we must design a protocol through which knowledge can be accessed, and a schema in which it will be returned. Note that the accessor must be able to add knowledge to the knowledge base, as well as retrieve it.
Accessor
protocol
members
fetch
(fetch self id)
Fetch all the knowledge I have about the object identified by this
+id
value, as a map whose:id
key has thisid
value.wildwood.knowledge-accessor documentation Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file +wildwood.knowledge-accessor
The key point of building Bialowieza as a library rather than a complete application is that it should be possible to hook it up to multiple sources of knowledge. Thus we must design a protocol through which knowledge can be accessed, and a schema in which it will be returned. Note that the accessor must be able to add knowledge to the knowledge base, as well as retrieve it.
Accessor
protocol
members
fetch
(fetch self id)
Fetch all the knowledge I have about the object identified by this
id
value, as a map whose:id
key has thisid
value.NOTE THAT: I now think knowledge should only be managed at the Wildwood level as sets of propositions, so the idea of bringing back some sort of object representation here is probably wrong.
match
(match self proposition)
Return all the propositions I know which match this proposition. The intended use case here is that you will either supply a fully specified proposition to verify that that proposition is true, or else supply a partially specified proposition to query.
e.g. passing the proposition
{:verb :kill :object :caesar} @@ -9,4 +9,4 @@
[{:verb :kill :subject :brutus :object :caesar} {:verb :kill :subject :cassius :object :caesar} {:verb :kill :subject :longus :object :caesar}] -
store
(store self proposition)
Add this
proposition
to the knowledge I hold.store
(store self proposition)
Add this
proposition
to the knowledge I hold.wildwood.logic documentation Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file diff --git a/docs/codox/wildwood.mongo-ka.html b/docs/codox/wildwood.mongo-ka.html index ba7509b..a4f8d2d 100644 --- a/docs/codox/wildwood.mongo-ka.html +++ b/docs/codox/wildwood.mongo-ka.html @@ -1,4 +1,10 @@ -wildwood.logic
Highly experimental work towards basic logic operators on Bialowieza-style proposition structures
fetch
(fetch id propositions)
Return those propositions from among these
propositions
where some key matches thisid
.match
(match pattern candidates)
Return those of these
candidates
matched by thispattern
. Bothpattern
and each candidate incandidates
are expected to be maps. AT THIS STAGE, a match is found if for every key inpattern
, the value of that key in the candidate is the same as the value inpattern
. Note that in future the values of the:time
,:location
,:confidence
and:data
keys may be handled specially.matches?
(matches? pattern candidate)
True if this
candidate
matches thispattern
. AT THIS STAGE, a match is found if for every key inpattern
, the value of that key in the candidate is the same as the value inpattern
. Note that in future the values of the:time
,:location
,:confidence
and:data
keys may be handled specially.wildwood.mongo-ka documentation Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file +wildwood.mongo-ka
A knowledge accessor fetching from and storing to Mongo DB.
-Hierarchical databases seem a very natural fit for how we’re storing knowledge. Mongo DB seems a particularly natural fit since its internal representation is JSON, which can be transformed to EDN extremely naturally.
wildwood.mongo-ka documentation Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file diff --git a/docs/codox/wildwood.schema.html b/docs/codox/wildwood.schema.html index 5bf73c6..8670076 100644 --- a/docs/codox/wildwood.schema.html +++ b/docs/codox/wildwood.schema.html @@ -1,7 +1,7 @@ -wildwood.mongo-ka
A knowledge accessor fetching from and storing to Mongo DB.
+Hierarchical databases seem a very natural fit for how we’re storing knowledge. Mongo DB seems a particularly natural fit since its internal representation is JSON, which can be transformed to EDN extremely naturally.
+Other candidate hierarchical database implementations/interfaces which might be experimented with include:
+ +(and many others).
wildwood.schema documentation Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of file +wildwood.schema
The knowledge representation. This probably ends up looking a bit like a Toulmin schema, where claims are represented as propositions. There also need to be rules or predicates, things which can test whether a given proposition has a given value. There may be other stuff in here.
-Internal representation of most of this will be as Clojure maps.
argument?
(argument? o)
True if
-o
qualifies as an argument structure.An argument structure is a (potentially rich) proposition which, in addition, should have values for
:confidence
and:authority
. A value for:data
may, and probably will, also be present but is not required. The value of:confidence
must be a number in the range -1 to 1.consensual-keys
Every proposition which has these keys, in a given decision process, must have the same semantics and types for their values. The exact representations used for the values of these keys does not matter, it is consensual between all participating advocates in a decision process.
minimise
(minimise o)
Expecting that
-o
is a (potentially rich) proposition, return a map identical too
save that for each valuev
of keyk
ino
, ifv
is a map andk
is not a member ofargument-keys
, then the returned map shall substitute the value of(:id v)
.see also
wildwood.knowledge-access/maximise
.proposition?
(proposition? o)
(proposition? o minimised)
True if
-o
qualifies as a proposition. A proposition is probably a map with some privileged keys, and may look something like a minimisedthe-great-game.gossip.news-items
item.If
minimised
is passed and istrue
, then the proposition must be minimised - that is to say, the values of keys in a proposition map may not themselves be keys. Where the value of a key represents an object in the world, that value must be simply theid
of the object, not a richer representation.rule?
(rule? o)
True if
o
qualifies as a rule. A rule is a structure which comprises * an id and * a function of two arguments, a proposition and a knowledge accessor, and which should (if this can simply be checked) return an argument structure.truth
(truth p)
If
p
is a proposition, return whether the value asserted by that proposition istrue
. If the:truth
key is missing,true
is assumed.wildwood.schema documentation Generated by Codox
Wildwood 0.1.0-SNAPSHOT
\ No newline at end of filewildwood.schema
The knowledge representation. This probably ends up looking a bit like a Toulmin schema, where claims are represented as propositions. There also need to be rules or predicates, things which can test whether a given proposition has a given value. There may be other stuff in here.
+Internal representation of most of this will be as Clojure maps.
argument?
(argument? o)
True if
+o
qualifies as an argument structure.An argument structure is a (potentially rich) proposition which, in addition, should have values for
:confidence
and:authority
. A value for:data
may, and probably will, also be present but is not required. The value of:confidence
must be a number in the range -1 to 1.consensual-keys
Every proposition which has these keys, in a given decision process, must have the same semantics and types for their values. The exact representations used for the values of these keys does not matter, it is consensual between all participating advocates in a decision process.
minimise
(minimise o)
Expecting that
+o
is a (potentially rich) proposition, return a map identical too
save that for each valuev
of keyk
ino
, ifv
is a map andk
is not a member ofargument-keys
, then the returned map shall substitute the value of(:id v)
.see also
wildwood.knowledge-access/maximise
.proposition?
(proposition? o)
(proposition? o minimised)
True if
+o
qualifies as a proposition. A proposition is probably a map with some privileged keys, and may look something like a minimisedthe-great-game.gossip.news-items
item.If
minimised
is passed and istrue
, then the proposition must be minimised - that is to say, the values of keys in a proposition map may not themselves be keys. Where the value of a key represents an object in the world, that value must be simply theid
of the object, not a richer representation.rule?
(rule? o)
True if
o
qualifies as a rule. A rule is a structure which comprises * an id and * a function of two arguments, a proposition and a knowledge accessor, and which should (if this can simply be checked) return an argument structure.truth
(truth p)
If
p
is a proposition, return whether the value asserted by that proposition istrue
. If the:truth
key is missing,true
is assumed.