| Input: A TBox in NNF and a finite set of concepts in NNF |
| Output: an and-or forest , with as the initial node such that sat, unsat} |
| begin |
| create a new node with and = unexpanded; |
| let , ; |
| (a) while {sat, unsat} do |
| (b) choose an node , := unexpanded; |
| if no --tableau rule is applicable to then |
| sat}; |
| else if is applicable to then |
| unsat}; |
| else if is applicable to giving concept then |
| := and-node, ; |
| else if is applicable to giving concepts and then |
| := or-node, ; |
| else |
| (i) := and-node; |
| (ii) for every , apply to giving concept and add this |
| concept to ; |
| (c) for do |
| (i) if has then |
| then add edge () to ; |
| (ii) let be a new node, set , := unexpanded, add to , and add edge () to ; |
| (d) if (.kind = or-node and one of the successors of has status sat) or (.kind = and-node and all the |
| successors of have status sat) then |
| := sat, propagate(); |
| else if (.kind = and-node and one of the successors of has status unsat) or (.kind = or-node and all the |
| successors of have status unsat) then |
| ≔ unsat, propagate(); |
| else |
| := expanded; |
| (e) if = unsat and in , then |
| ; |
| else if := unexpanded then |
| if is of the form then |
| save(); |
| add to with ; |
| (f) if then |
| add to with ; |
| else |
| break; |
| (g) If = unsat then |
| return false; |
| else |
| return true; |