A Rule is a set of conditions triggering a set of actions (if <conditions> then <action>).
A domain expert models the domain knowledge (buisness rules) by defining the set of all the rules.
Rules are usually defined using a domain-specific lanaguage also known as DSL.
Using these sets of rules, we can build an expert system that can make decisions on behalf of domain experts.
A rules engine is in the core of an expert system.
Data constantly come through the system in streams or in batches.
The rules engine decides when to evaluate which rules (evaluation can happen on-demand or in cycles).
The order in which rules are defined does not matter. The rules engine decides which rules should be evaluated in what order.
Chaining happens when the action part of one rule changes the state of the system and the conditions of other rules which can lead to triggering other actions as well.
Chaining makes it very hard to reason about and debug the system.
An inference engine applies logical rules to the knowledge base to infer new information from known facts.
Inference engines usually proceed in two modes: forward chaining and backward chaining.
There are some challenges with rule-based systems and expert systems:
The sets of rules need to be defined and maintained by domain experts.
An expert system is just as capable and precise as the rules are.
For performance reasons, there are limitations applied to rule definitions (no. of rules, no. of conditions, cardinality of dimensions, etc.).