Goal: To get to Brecon -- a picturesque welsh market town famous for its mountains (beacons) and its Jazz festival.
The training data is:
near(Cardiff, Brecon), airport(Cardiff)
The Domain Knowledge is:
near(x,y)
holds(loc(x),s)
holds(loc(y), result(drive(x,y),s))
airport(z)
loc(z), result(fly(z),s)))
In this case operational criterion is: We must express concept definition in pure description language syntax.
Our goal can expressed as follows:
holds(loc(Brecon),s)
-- find some situation s for this holds.
We can prove this holds with s defined by:
result(drive(Cardiff,Brecon), result(fly(Cardiff), s')))
We can fly to Cardiff and then drive to Brecon.
If we analyse the proof (say with an ATMS). We can learn a few general rules from it.
Since Brecon appears in query and binding we could abstract it to give:
holds(loc(x),drive(Cardiff,x), result(fly(Cardiff), s')))
but this not quite right - we cannot get everywhere by flying to Cardiff.
Since Brecon appears in the database when we abstract things we must explicitly record the use of the fact:
near(Cardiff,x)
holds(loc(x),drive(Cardiff,x), result(fly(Cardiff), s')))
This states if x is near Cardiff we can get to it by flying to Cardiff and then driving. We have learnt this general rule.
We could also abstract out Cardiff instead of Brecon to get:
near(Brecon,x)
airport(x)
holds(loc(Brecon), result(drive(x,Brecon),
result(fly(x),s')))
This states we can get top Brecon by flying to another nearby airport and driving from there.
We could add airport(Swansea) and get an alternative means of travel plan.
Finally we could actually abstract out both Brecon and Cardiff to get a general plan:
near(x,y)
airport(y)
holds(loc(y), result(drive(x,y),result(fly(x),s')))