Model 2: A First-Order Model of Medical Diagnosis

The Subject

One of the problems with the propositional model described previously is
that knowledge is stored in an essentially procedural form, with the
consequence that general procedural aspects of the diagnosis process are not
distinguished from the domain-specific knowledge. This section develops an
alternative Subject model which makes this distinction explicit, paving
the way for the learning models to be described later.

We can model the knowledge base as a long-term, read-only memory for
present purposes, so the first modification to make is to add a new buffer to
the Subject box/arrow diagram, and label it knowledge base. A
read arrow should be added, permitting read access to the Decision
Procedure, like so:

The contents of the knowledge base comprise the Subject's task
knowledge, and are defined as the Initial Contents of the buffer:

Now, in the Decision Procedure, you should delete everything
except the symptom selection rules, which remain as before. You should have
only one of the following rules active at any time.

Rule (refracted): The equivalent of the discrim rule in Fox 1980
IF: once expected(Disease1, Symptom, Value1) is in Working Memory
expected(Disease2, Symptom, Value2) is in Working Memory
not Value1 == Value2
not told(Symptom, Value) is in Working Memory
THEN: add query(Symptom, present) to Working Memory
Rule (refracted): The equivalent of the verify rule in Fox 1980
IF: once expected(Disease, Symptom, present) is in Working Memory
not told(Symptom, Value) is in Working Memory
THEN: add query(Symptom, present) to Working Memory

The rest of the Decision Procedure process should be replaced
with the following three rules, which use the three types of elements in
the knowledge base to replicate the function of the three types
of rules in the propositional version of the model:

Rule (refracted): Expectations from any symptom
IF: told(Symptom, present) is in Working Memory
not diagnosis_is(AnyDisease) is in Working Memory
suggests(Symptom, Disease) is in knowledge base
THEN: add diseases(Disease, suspected) to Working Memory
Rule (refracted): Anticipating symptoms from rules
IF: diseases(Disease, suspected) is in Working Memory
not diagnosis_is(Any_Disease) is in Working Memory
assoc(Disease, Symptom, Value) is in knowledge base
THEN: add expected(Disease, Symptom, Value) to Working Memory
Rule (refracted): The diagnosis rule
IF: diseases(Disease, suspected) is in Working Memory
pattern(Disease, Pattern) is in knowledge base
not Item is a member of Pattern
not Item is in Working Memory
THEN: add diagnosis_is(Disease) to Working Memory