1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
/*-----------------------------------------------------------------------
File : ccl_context_sr.c
Author: Stephan Schulz
Contents
Implementation of contextual (top level) simplify-reflect.
Copyright 2003 by the author.
This code is released under the GNU General Public Licence and
the GNU Lesser General Public License.
See the file COPYING in the main E directory for details..
Run "eprover -h" for contact information.
Changes
<1> Mon Jul 14 23:20:54 CEST 2003
New
-----------------------------------------------------------------------*/
#include "ccl_context_sr.h"
/*---------------------------------------------------------------------*/
/* Global Variables */
/*---------------------------------------------------------------------*/
/*---------------------------------------------------------------------*/
/* Forward Declarations */
/*---------------------------------------------------------------------*/
/*---------------------------------------------------------------------*/
/* Internal Functions */
/*---------------------------------------------------------------------*/
/*---------------------------------------------------------------------*/
/* Exported Functions */
/*---------------------------------------------------------------------*/
/*-----------------------------------------------------------------------
//
// Function: ClauseContextualSimplifyReflect()
//
// Perform contextial-simplify-reflect with all clauses in set on
// clause. Return number of literals deleted.
//
// Global Variables: -
//
// Side Effects : Changes clause
//
/----------------------------------------------------------------------*/
int ClauseContextualSimplifyReflect(ClauseSet_p set, Clause_p clause)
{
Eqn_p handle;
int res = 0;
Clause_p subsumer;
PStack_p lit_stack = ClauseToStack(clause);
clause->weight = ClauseStandardWeight(clause);
while(!PStackEmpty(lit_stack))
{
handle = PStackPopP(lit_stack);
ClauseFlipLiteralSign(clause, handle);
ClauseSubsumeOrderSortLits(clause);
subsumer = ClauseSetSubsumesClause(set, clause);
if(subsumer)
{
if(ClauseQueryProp(subsumer, CPIsSOS))
{
ClauseSetProp(clause, CPIsSOS);
}
ClauseDelProp(clause, CPInitial|CPLimitedRW);
ClauseRemoveLiteral(clause, handle);
assert(clause->weight == ClauseStandardWeight(clause));
DocClauseModificationDefault(clause,
inf_context_simplify_reflect,
subsumer);
res++;
ClausePushDerivation(clause, DCContextSR, subsumer, NULL);
}
else
{
ClauseFlipLiteralSign(clause, handle);
}
}
PStackFree(lit_stack);
return res;
}
/*-----------------------------------------------------------------------
//
// Function: ClauseSetFindContextSRClauses()
//
// Find all clauses in set that can be contextually
// simplify-reflected ;-) with clause and push them onto
// res. ATTENTION! A clause that can be simplified in more than one
// way will be pushed more than once onto the stack! Returns number
// of clauses pushed.
//
// Global Variables: -
//
// Side Effects : -
//
/----------------------------------------------------------------------*/
long ClauseSetFindContextSRClauses(ClauseSet_p set, Clause_p clause,
PStack_p res)
{
Eqn_p handle;
long old_sp = PStackGetSP(res);
PStack_p lit_stack = ClauseToStack(clause);
assert(clause->weight == ClauseStandardWeight(clause));
while(!PStackEmpty(lit_stack))
{
handle = PStackPopP(lit_stack);
ClauseFlipLiteralSign(clause, handle);
ClauseSubsumeOrderSortLits(clause);
ClauseSetFindSubsumedClauses(set, clause, res);
ClauseFlipLiteralSign(clause, handle);
}
PStackFree(lit_stack);
return PStackGetSP(res) - old_sp;
}
/*---------------------------------------------------------------------*/
/* End of File */
/*---------------------------------------------------------------------*/
|