Building Expert Systems in Prolog
Faceplate John Stannard on the first free ascent of Foops - 1967 Preface & Acknowledgements Preface Acknowledgements 1 Introduction 1.1 Expert Systems 1.2 Expert System Features Goal-Driven Reasoning Uncertainty Data Driven Reasoning Data Representation User Interface Explanations 1.3 Sample Applications 1.4 Prolog 1.5 Assumptions 2 Using Prolog's Inference Engine 2.1 The Bird Identification System Rule formats Rules about birds Rules for hierarchical relationships Rules for other relationships 2.2 User Interface Attribute Value pairs Asking the user Remembering the answer Multi-valued answers Menus for the user Other enhancements 2.3 A Simple Shell Command loop A tool for non-programmers 2.4 Summary Exercises 3 Backward Chaining with Uncertainty 3.1 Certainty Factors An Example Rule Uncertainty User Uncertainty Combining Certainties Properties of Certainty Factors 3.2 MYCINs Certainty Factors Determining Premise CF Combining Premise CF and Conclusion CF Premise Threshold CF Combining CFs 3.3 Rule Format 3.4 The Inference Engine Working Storage Find a Value for an Attribute Attribute Value Already Known Ask User for Attribute Value Deduce Attribute Value from Rules 3.5 Making the Shell Starting the Inference 3.6 English-like Rules Exercises 4 Explanation Value of Explanations to the User Value of Explanations to the Developer Types of Explanation 4.1 Explanation in Clam Tracing How Explanations Why Questions 4.2 Native Prolog Systems Exercises 5 Forward Chaining 5.1 Production Systems 5.2 Using Oops 5.3 Implementation 5.4 Explanations for Oops 5.5 Enhancements 5.6 Rule Selection Generating the conflict set Time stamps 5.7 LEX Changes in the Rules Implementing LEX 5.8 MEA Exercises 6 Frames 6.1 The Code 6.2 Data Structure 6.3 The Manipulation Predicates 6.4 Using Frames 6.5 Summary Exercises 7 Integration 7.1 Foops (Frames and Oops) Instances Rules for frinsts Adding Prolog to Foops 7.2 Room Configuration Furniture frames Frame Demons Initial Data Input Data The Rules Output Data 7.3 A Sample Run 7.4 Summary Exercises 8 Performance 8.1 Backward Chaining Indexes 8.2 Rete Match Algorithm Network Nodes Network Propagation Example of Network Propagation Performance Improvements 8.3 The Rete Graph Data Structures 8.4 Propagating Tokens 8.5 The Rule Compiler 8.6 Integration with Foops 8.7 Design Tradeoffs Exercises 9 User Interface 9.1 Object Oriented Window Interface 9.2 Developer's Interface to Windows 9.3 High-Level Window Implementation Message Passing Inheritance 9.4 Low-Level Window Implementation Exercises 10 Two Hybrids 10.1 CVGEN 10.2 The Knowledge Base Rule for parameters Rules for derived information Questions for the user Default rules Rules for edits Static information 10.3 Inference Engine 10.4 Explanations 10.5 Environment 10.6 AIJMP 10.7 Summary Exercises 11 Prototyping 11.1 The Problem 11.2 The Sales Advisor Knowledge Base Qualifying Objectives - Benefits - Features Situation Analysis Competitive Analysis Miscellaneous Advice User Queries 11.3 The Inference Engine 11.4 User Interface 11.5 Summary Exercises 12 Rubik's Cube 12.1 The Problem 12.2 The Cube 12.3 Rotation 12.4 High Level Rules 12.5 Improving the State 12.6 The Search 12.7 More Heuristics 12.8 User Interface 12.9 On the Limits of Machines Exercises Appendix - Full Source Code Native Clam Oops Foops Rete-Foops Windows Rubik Taxes (Bonus Code)