Beispiel #1
0
//Checks that the proof graph has no issues
void ProofGraph::checkProof()
{
	//Visit graph from sink keeping track of edges and nodes
	std::deque<ProofNode*> q;
	ProofNode* n;

	q.push_back(graph[root]);
	do
	{
		n=q.front();
		q.pop_front();
		//End current level, change level and set new end
		if(!visited[n->getId()])
		{
			checkClause(n->getId());
			if(n->getAnt1()!=NULL || n->getAnt2()!=NULL)
			{
				if(n->getAnt1()!=NULL) q.push_back(n->getAnt1());
				if(n->getAnt2()!=NULL) q.push_back(n->getAnt2());
			}
			visited[n->getId()]=true;
		}
	}
	while(!q.empty());
	visited.reset();
}
Beispiel #2
0
//
// Check if a formula is a clause
//
bool Cnfizer::checkClause( Enode * e, set< enodeid_t > & check_cache )
{
  assert( e );

  if ( e->isLit( ) )
  {
    check_cache.insert( e->getId( ) );                           // Don't check again
    return true;
  }

  if ( !e->isOr( ) )
    return false;

  if ( check_cache.find( e->getId( ) ) != check_cache.end( ) )   // Already visited term
    return true;

  bool is_clause = true;
  for ( Enode * list = e->getCdr( ) ;
        list != egraph.enil && is_clause ;
        list = list->getCdr( ) )
    is_clause = checkClause( list->getCar( ), check_cache );

  if ( !is_clause )
    return false;

  check_cache.insert( e->getId( ) );                             // Don't check again

  return true;
}
Beispiel #3
0
//
// Check if a formula is a conjunction of clauses
//
bool Cnfizer::checkConj( Enode * e, set< enodeid_t > & check_cache )
{
  if ( !e->isAnd( ) )
    return false;

  if ( check_cache.find( e->getId( ) ) != check_cache.end( ) )   // Already visited term
    return true;

  Enode * list = e->getCdr( );
  for ( ; list != egraph.enil ; list = list->getCdr( ) )
  {
    Enode * arg = list->getCar( );
    if( !checkConj( arg, check_cache ) && !checkClause( arg, check_cache ) )
      return false;
  }

  check_cache.insert( e->getId( ) );

  return true;
}
Beispiel #4
0
//
// Check whether a formula is in cnf
//
bool Cnfizer::checkCnf( Enode * formula )
{
  set< enodeid_t > check_cache;
  bool res = checkConj( formula, check_cache ) || checkClause( formula, check_cache );
  return res;
}