bool TAxiom :: absorbIntoTop ( TBox& KB ) const { TConcept* C = NULL; // check whether the axiom is Top [= C for ( const_iterator p = begin(), p_end = end(); p != p_end; ++p ) if ( InAx::isBot(*p) ) // BOTTOMS are fine continue; else if ( InAx::isPosCN(*p) ) // CN found { if ( C != NULL ) // more than one concept return false; C = InAx::getConcept((*p)->Left()); if ( C->isSingleton() ) // doesn't work with nominals return false; } else return false; if ( C == NULL ) return false; // make an absorption Stat::SAbsTApply(); DLTree* desc = KB.makeNonPrimitive ( C, createTop() ); #ifdef RKG_DEBUG_ABSORPTION std::cout << " T-Absorb GCI to axiom"; if ( desc ) std::cout << "s *TOP* [=" << desc << " and"; std::cout << " " << C->getName() << " = *TOP*"; #endif if ( desc ) KB.addSubsumeAxiom ( createTop(), desc ); return true; }
bool TAxiom :: absorbIntoTop ( TBox& KB ) const { TConcept* Cand = nullptr; // check whether the axiom is Top [= C for ( const auto& C: Disjuncts ) if ( InAx::isBot(C) ) // BOTTOMS are fine continue; else if ( InAx::isPosCN(C) ) // CN found { if ( Cand != nullptr ) // more than one concept return false; Cand = InAx::getConcept(C->Left()); if ( Cand->isSingleton() ) // doesn't work with nominals return false; } else return false; if ( Cand == nullptr ) return false; // make an absorption Stat::SAbsTApply(); DLTree* desc = KB.makeNonPrimitive ( Cand, createTop() ); #ifdef RKG_DEBUG_ABSORPTION std::cout << " T-Absorb GCI to axiom"; if ( desc ) std::cout << "s *TOP* [=" << desc << " and"; std::cout << " " << Cand->getName() << " = *TOP*"; #endif if ( desc ) KB.addSubsumeAxiom ( createTop(), desc ); return true; }