コード例 #1
0
ファイル: cte_termtypes.c プロジェクト: kylepjohnson/sigma
bool TermVarSearchProp(Term_p term, DerefType deref, TermProperties prop)
{
   PStack_p stack = PStackAlloc();
   int i;
   bool res = false;

   PStackPushP(stack, term);
   PStackPushInt(stack, deref);
   
   while(!PStackEmpty(stack))
   {
      deref = PStackPopInt(stack);
      term  = PStackPopP(stack);
      term  = TermDeref(term, &deref);
      if(TermIsVar(term) && TermCellQueryProp(term, prop))
      {
	 res = true;
	 break;
      }
      for(i=0; i<term->arity; i++)
      {
	 PStackPushP(stack, term->args[i]);
	 PStackPushInt(stack, deref);
      }
   }
   PStackFree(stack);
   return res;
}
コード例 #2
0
ファイル: cte_termvars.c プロジェクト: kylepjohnson/sigma
Term_p VarBankFCodeAssertAlloc(VarBank_p bank, FunCode f_code)
{
   Term_p    var;
   
   assert(f_code < 0);
   var = VarBankFCodeFind(bank, f_code);
   if(!var)
   {
      var = TermDefaultCellAlloc();
      var->entry_no = f_code;
      var->f_code = f_code;
      TermCellSetProp(var, TPIsShared);
      PDArrayAssignP(bank->f_code_index, -f_code, var);
      bank->max_var = MAX(-f_code, bank->max_var);
   }
   assert(!TermCellQueryProp(var, TPIsGround));
   return var;
}
コード例 #3
0
ファイル: cle_termtops.c プロジェクト: kylepjohnson/sigma
Term_p term_top_marked(Term_p term, VarBank_p freshvars, PStack_p
		       bindings)
{
   Term_p handle;
   
   if(TermCellQueryProp(term, TPOpFlag))
   {
      if(!term->binding)
      {
	 handle = VarBankGetFreshVar(freshvars);
	 term->binding = handle;
	 PStackPushP(bindings, term);	 
      }
      else
      {
	 handle = term->binding;
      }
   }
   else if(TermIsVar(term))
   {
      handle = VarBankFCodeAssertAlloc(freshvars, term->f_code);
   }
   else
   {
      handle = TermDefaultCellAlloc();
      handle->arity = term->arity;
      handle->f_code = term->f_code;
      if(handle->arity > 0)
      {
	 int i;

	 handle->args = TermArgArrayAlloc(handle->arity);
	 for(i=0; i<handle->arity; i++)
	 {
	    handle->args[i] = term_top_marked(term->args[i],
					      freshvars, bindings);
	 }	 
      }
   }
   return handle;
}
コード例 #4
0
ファイル: cte_termtypes.c プロジェクト: kylepjohnson/sigma
void TermFree(Term_p junk)
{
   assert(junk);
   if(!TermIsVar(junk))
   {
      assert(!TermCellQueryProp(junk, TPIsShared));
      if(junk->arity)
      {
	 int i;
	 
	 assert(junk->args);
	 for(i=0; i<junk->arity; i++)
	 {
	    TermFree(junk->args[i]);
	 }
      }
      else
      {
	 assert(!junk->args);
      }
      TermTopFree(junk);
   }
}
コード例 #5
0
ファイル: ccl_pdtrees.c プロジェクト: martisch/eprover_dev
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;
}