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; |