Example #1
0
void ACTermPrint(FILE* out, ACTerm_p term, Sig_p sig)
{
   if(term->f_code < 0)
   {
      VarPrint(out, term->f_code);
   }
   else
   {
      int i;
      ACTerm_p arg;

      assert(term->args);
      fputs(SigFindName(sig, term->f_code),out);
      arg = PDArrayElementP(term->args, 0);
      
      if(arg)
      {
	 putc('(', out);
	 ACTermPrint(out, arg, sig);
	 for(i=1; (arg = PDArrayElementP(term->args, i)); i++)
	 {
	    putc(',', out);
	    ACTermPrint(out, arg, sig);	 
	 }
	 putc(')', out);
      }
   }      
}
Example #2
0
static void findex_remove_instance(FIndex_p index, FunCode i, void* inst)
{
   void *tmp;

   tmp = &(PDArrayElementP(index->index, i));
   PTreeDeleteEntry(tmp, inst);
}
Example #3
0
static PStack_p pdt_node_succ_stack_create(PDTNode_p node)
{
   PStack_p result = PStackAlloc();
   FunCode i = 0; /* Stiffle warning */
   long tmpmaxvar = 0;   
   PDTNode_p next;
   IntMapIter_p iter;

   iter = IntMapIterAlloc(node->f_alternatives, 0, LONG_MAX);
   while((next=IntMapIterNext(iter, &i)))
   {         
      assert(next);
      PStackPushP(result, next);
   }
   IntMapIterFree(iter);
   for(i=1; i<=node->max_var; i++)
   {
      next = PDArrayElementP(node->v_alternatives, i);
      if(next)
      {
         PStackPushP(result, next);
         tmpmaxvar = i;
      }
   }
   node->max_var = tmpmaxvar;
   return result;
}
Example #4
0
static void findex_add_instance(FIndex_p index, FunCode i, void* inst)
{
   void *tmp;

   tmp = &(PDArrayElementP(index->index, i));
   PTreeStore(tmp, inst);
}
Example #5
0
void PDTNodeFree(PDTNode_p tree)
{
   FunCode      i;
   IntMapIter_p iter;
   ClausePos_p  tmp;
   PDTNode_p     subtree;
 
  
   iter = IntMapIterAlloc(tree->f_alternatives, 0, LONG_MAX);
   while((subtree = IntMapIterNext(iter, &i)))
   {
      assert(subtree);
   }
   IntMapIterFree(iter);
   for(i=1; i<=tree->max_var; i++)
   {
      subtree = PDArrayElementP(tree->v_alternatives, i);
      if(subtree)
      {
         PDTNodeFree(subtree);
      }
   }
   while(tree->entries)
   {
      tmp = PTreeExtractRootKey(&tree->entries);
      ClausePosCellFree(tmp);
   }   
   pdtree_default_cell_free(tree);   

}
Example #6
0
void VarBankFree(VarBank_p junk)
{
   int i;

   assert(junk);
   StrTreeFree(junk->ext_index);
   
   for(i=0; i<junk->f_code_index->size; i++)
   {
      if(PDArrayElementP(junk->f_code_index, i))
      {
	 TermTopFree(PDArrayElementP(junk->f_code_index, i));
      }
   }
   PDArrayFree(junk->f_code_index);
   VarBankCellFree(junk);
}
Example #7
0
void pdt_node_print(FILE* out, PDTNode_p node, unsigned level)
{
   if(node->entries)
   {
      PStack_p trav_stack;
      PTree_p trav;
      ClausePos_p entry;

      fprintf(out, "%sleaf size=%ld age=%lu\n", IndentStr(2*level), 
             node->size_constr, node->age_constr);
      trav_stack = PTreeTraverseInit(node->entries);

      while((trav = PTreeTraverseNext(trav_stack)))
      {
	 fprintf(out, "%s: ",IndentStr(2*level));
         entry = trav->key;
         ClausePrint(out, entry->clause, true);
	 fprintf(out, "\n");
      }
      PTreeTraverseExit(trav_stack);
   }
   else
   {
      FunCode i = 0; /* Stiffle warning */
      PDTNode_p next;
      IntMapIter_p iter;

      fprintf(out, "%sinternal size=%ld age=%lu f_alts=%p, type=%d\n", 
              IndentStr(2*level), 
              node->size_constr, 
              node->age_constr, 
              node->f_alternatives, 
              node->f_alternatives?node->f_alternatives->type:-1);
      
      iter = IntMapIterAlloc(node->f_alternatives, 0, LONG_MAX);
      while((next=IntMapIterNext(iter, &i)))
      {
	 fprintf(out, "%sBranch %ld\n", IndentStr(2*level), i); 
         pdt_node_print(out, next, level+1);
      }
      IntMapIterFree(iter);
      for(i=1; i<=node->max_var; i++)
      {
	 next = PDArrayElementP(node->v_alternatives, i);
	 if(next)
	 {
            fprintf(out, "%sBranch %ld\n", IndentStr(2*level), -i); 
            pdt_node_print(out, next, level+1);
	 }
      }
   } 
}
Example #8
0
void FIndexFree(FIndex_p junk)
{
   long i;
   PTree_p tmp;

   for(i = 0; i<junk->index->size; i++)
   {    
      tmp = PDArrayElementP(junk->index, i);
      PTreeFree(tmp);
   }
   PDArrayFree(junk->index);
   FIndexCellFree(junk);
}
Example #9
0
int ACTermCompare(ACTerm_p t1, ACTerm_p t2)
{
   int res=0;

   assert(t1 && t2);

   res = t1->f_code -t2->f_code;
   
   if((!res)&&t1->f_code > 0)
   {
      int i;
      ACTerm_p arg1,arg2;

      assert(t1->args&&t2->args);

      for(i=0; !res; i++)
      {
	 arg1 = PDArrayElementP(t1->args, i);
	 arg2 = PDArrayElementP(t2->args, i);
	 if(!arg1 && !arg2)
	 {
	    break;
	 }
	 else if(!arg1)
	 {
	    res = -1;
	    break;
	 }
	 else if(!arg2)
	 {
	    res = 1;
	    break;
	 }
	 res = ACTermCompare(arg1, arg2);
      }
   }
   return res;
}
Example #10
0
void VarBankVarsDelProp(VarBank_p bank, TermProperties prop)
{
   Term_p handle;
   int i;

   for(i=0; i<bank->f_code_index->size; i++)
   {
      handle = PDArrayElementP(bank->f_code_index, i);
      if(handle)
      {         
	 TermCellDelProp(handle, prop);
      }
   }
}
Example #11
0
static void* pdt_select_alt_ref(PDTree_p tree, PDTNode_p node, Term_p term)
{
   void* res;

   if(TermIsVar(term))
   {
      tree->arr_storage_est -= PDArrayStorage(node->v_alternatives);
      res = &(PDArrayElementP(node->v_alternatives, 
			       -term->f_code));
      tree->arr_storage_est += PDArrayStorage(node->v_alternatives);
   }
   else
   {
      tree->arr_storage_est -= IntMapStorage(node->f_alternatives);
      res = IntMapGetRef(node->f_alternatives, term->f_code);
      tree->arr_storage_est += IntMapStorage(node->f_alternatives);
   }
   return res;
}
Example #12
0
void ACTermFree(ACTerm_p term)
{
   assert(term);

   if(term->f_code > 0)
   {
      int i;
      ACTerm_p t;
      
      for(i=0; (t=PDArrayElementP(term->args, i)); i++)
      {
	 ACTermFree(t);
      }
      PDArrayFree(term->args);
   }
   else
   {
      assert(!term->args);
   }
   ACTermCellFree(term);
}
Example #13
0
   Eval_p   cell;

   OUTPRINT(1, "# Initializing proof state\n");
   
   
   assert(ClauseSetEmpty(state->processed_pos_rules));
   assert(ClauseSetEmpty(state->processed_pos_eqns));
   assert(ClauseSetEmpty(state->processed_neg_units));
   assert(ClauseSetEmpty(state->processed_non_units));

   tmphcb = GetHeuristic("Uniq", state, control, &(control->heuristic_parms));
   assert(tmphcb);
   ClauseSetReweight(tmphcb, state->axioms);
   
   traverse =
      EvalTreeTraverseInit(PDArrayElementP(state->axioms->eval_indices,0),0);

   while((cell = EvalTreeTraverseNext(traverse, 0)))
   {
      handle = cell->object;
      new = ClauseCopy(handle, state->terms);
      ClauseSetProp(new, CPInitial);
      HCBClauseEvaluate(control->hcb, new);
      DocClauseQuoteDefault(6, new, "eval");
      ClausePushDerivation(new, DCCnfQuote, handle, NULL);
      if(control->heuristic_parms.prefer_initial_clauses)
      {
	 EvalListChangePriority(new->evaluations, -PrioLargestReasonable);
      }
      ClauseSetInsert(state->unprocessed, new);
   }
Example #14
0
static void pdtree_forward(PDTree_p tree, Subst_p subst)
{
   PDTNode_p handle = tree->tree_pos, next = NULL;
   FunCode   i = tree->tree_pos->trav_count, limit;
   Term_p    term = PStackTopP(tree->term_stack);
   
   limit = PDT_NODE_CLOSED(tree,handle);
   while(i<limit)
   {
      if(((i==0)||(i>handle->max_var))&&!TermIsVar(term))
      {
	 next = IntMapGetVal(handle->f_alternatives,term->f_code);
	 i++;
	 if(next)
	 {
	    PStackPushP(tree->term_proc, term);
	    TermLRTraverseNext(tree->term_stack);
	    next->trav_count = PDT_NODE_INIT_VAL(tree);
	    next->bound      = false;
	    assert(!next->variable);
	    tree->tree_pos = next;
#ifdef MEASURE_EXPENSIVE
	    tree->visited_count++;
#endif 
	    break;
	 }
      }
      else
      {
	 next = PDArrayElementP(handle->v_alternatives,i);
	 i++;
	 if(next)
	 {
	    assert(next->variable);
	    if((!next->variable->binding)&&(!TermCellQueryProp(term,TPPredPos)))
	    {
	       PStackDiscardTop(tree->term_stack);
	       SubstAddBinding(subst, next->variable, term);
	       next->trav_count   = PDT_NODE_INIT_VAL(tree);
	       next->bound        = true;
	       tree->tree_pos     = next;
	       tree->term_weight  -= (TermStandardWeight(term) -
                                      TermStandardWeight(next->variable));
#ifdef MEASURE_EXPENSIVE
	       tree->visited_count++;
#endif 
	       break;
	    }
	    else if(TBTermEqual(next->variable->binding,term))
	    {
	       PStackDiscardTop(tree->term_stack);
	       next->trav_count   = PDT_NODE_INIT_VAL(tree);
	       next->bound        = false;
	       tree->tree_pos     = next;
	       tree->term_weight  -= (TermStandardWeight(term) -
                                      TermStandardWeight(next->variable));
#ifdef MEASURE_EXPENSIVE
	       tree->visited_count++;
#endif 
	       break;		       
	    }
	 }
      }
   }
   handle->trav_count = i;
}
Example #15
0
Term_p VarBankFCodeFind(VarBank_p bank, FunCode f_code)
{   
   assert(f_code<0); 
   return PDArrayElementP(bank->f_code_index, -f_code);
}