next up previous
Next: Bibliography Up: First-Order Logic Resolution Theorem Previous: Example Run: Did Curiosity

Summary

The implementation works reasonably well. The functions of parsers, state monad knowledge base, and the interactive system work great. One flaw is that instead of composing monads in an elegant way in the file loading function (when IO and state monads are used), a more ugly hack of \( runStateRun\, ::\, State\, \rightarrow \, StateMonad\, a\, \rightarrow (a,State) \), and \( hugsIORun\, ::\, IO\, a\, \rightarrow \, Either\, Int\, a \) are used and some of the hidden primitive functions in Prelude had to be copied over. On the other hand, improvements can be made to the efficiency of the (CNF and INF) normalization functions. In particular, checking for redundant literals has not been implemented (i.e. reducing \( p\wedge p \), \( p\vee p \), \( p\Rightarrow p \), and \( p\Leftrightarrow q \) to \( p \)).

The most difficult and quirky part of the project is the algorithm for making resolutions and proving using refutation. Presently, it is able to handle relatively simple set of knowledge bases. How well (or badly) it would perform when the knowledge base is big and the complexity of the proof is higer is questionable. Refining the efficiency of the algorithm and perhaps use a different approach (other than choosing the set-of-support strategy) could be the next imrovement.


next up previous
Next: Bibliography Up: First-Order Logic Resolution Theorem Previous: Example Run: Did Curiosity
Charles Chiou
2001-04-29