MYCIN diagnoses infectious blood diseases using a backward-chained (exhaustive) control strategy.

The algorithm, ignoring certainty factors, is basically backchaining:

Given:

- list of diseases, Goal-list
- initial symptoms, DB
- Rules

For each g *&isin* Goal-list do

If prove(g, DB, Rules) then Print (``Diagnosis:'', g)

Function prove (goal, DB, Rules)

If goal *&isin* DB then return True

elseif *&exist r &isin * Rules such that *r _{RHS}* contains goal

then return provelist(LHS, DB, Rules)[provelist calls prove with each condition of LHS]

else Ask user about goal and return answer