blob: d679c5766679e23f0e1ee577ae46f54756b0a545 [file] [log] [blame]
/**************************************************************/
/* ********************************************************** */
/* * * */
/* * INFERENCE RULES * */
/* * * */
/* * $Module: INFRULES * */
/* * * */
/* * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 * */
/* * MPI fuer Informatik * */
/* * * */
/* * This program is free software; you can redistribute * */
/* * it and/or modify it under the terms of the GNU * */
/* * General Public License as published by the Free * */
/* * Software Foundation; either version 2 of the License, * */
/* * or (at your option) any later version. * */
/* * * */
/* * This program is distributed in the hope that it will * */
/* * be useful, but WITHOUT ANY WARRANTY; without even * */
/* * the implied warranty of MERCHANTABILITY or FITNESS * */
/* * FOR A PARTICULAR PURPOSE. See the GNU General Public * */
/* * License for more details. * */
/* * * */
/* * You should have received a copy of the GNU General * */
/* * Public License along with this program; if not, write * */
/* * to the Free Software Foundation, Inc., 59 Temple * */
/* * Place, Suite 330, Boston, MA 02111-1307 USA * */
/* * * */
/* * * */
/* $Revision$ * */
/* $State$ * */
/* $Date$ * */
/* $Author$ * */
/* * * */
/* * Contact: * */
/* * Christoph Weidenbach * */
/* * MPI fuer Informatik * */
/* * Stuhlsatzenhausweg 85 * */
/* * 66123 Saarbruecken * */
/* * Email: weidenb@mpi-sb.mpg.de * */
/* * Germany * */
/* * * */
/* ********************************************************** */
/**************************************************************/
/* $RCSfile$ */
#ifndef _INFRULES_
#define _INFRULES_
/**************************************************************/
/* Includes */
/**************************************************************/
#include "search.h"
#include "rules-split.h"
#include "rules-sort.h"
#include "rules-ur.h"
#include "subst.h"
#include "unify.h"
#include "st.h"
#include "defs.h"
/**************************************************************/
/* Functions */
/**************************************************************/
LIST inf_DerivableClauses(PROOFSEARCH, CLAUSE);
LIST inf_EqualityResolution(CLAUSE, BOOL, FLAGSTORE, PRECEDENCE);
LIST inf_EqualityFactoring(CLAUSE, FLAGSTORE, PRECEDENCE);
LIST inf_MergingParamodulation(CLAUSE, SHARED_INDEX, FLAGSTORE, PRECEDENCE);
LIST inf_GenSuperpositionLeft(CLAUSE,SHARED_INDEX,BOOL,BOOL,BOOL,FLAGSTORE, PRECEDENCE);
LIST inf_GenSuperpositionRight(CLAUSE,SHARED_INDEX,BOOL,BOOL,BOOL,FLAGSTORE, PRECEDENCE);
LIST inf_BoundedDepthUnitResolution(CLAUSE, SHARED_INDEX, BOOL, FLAGSTORE, PRECEDENCE);
LIST inf_UnitResolution(CLAUSE, SHARED_INDEX, BOOL, FLAGSTORE, PRECEDENCE);
LIST inf_GeneralResolution(CLAUSE, SHARED_INDEX, BOOL, BOOL, FLAGSTORE, PRECEDENCE);
BOOL inf_HyperLiteralIsBetter(LITERAL, NAT, LITERAL, NAT);
LIST inf_GeneralHyperResolution(CLAUSE, SHARED_INDEX, BOOL, FLAGSTORE, PRECEDENCE);
LIST inf_GeneralFactoring(CLAUSE, BOOL, BOOL, BOOL, FLAGSTORE, PRECEDENCE);
LIST inf_ApplyDefinition(PROOFSEARCH, CLAUSE, FLAGSTORE, PRECEDENCE);
/**************************************************************/
/* Inline Functions */
/**************************************************************/
static __inline__ LIST inf_Paramodulation(CLAUSE GivenClause,
SHARED_INDEX ShIndex,
FLAGSTORE Flags,
PRECEDENCE Precedence)
/**************************************************************
INPUT: A clause, an Index, usually the WorkedOffIndex, a
flag store and a precedence.
RETURNS: A list of clauses derivable from the GivenClause by
paramodulation wrt. the Index.
MEMORY: A list of clauses is produced, where memory for the list
and the clauses is allocated.
***************************************************************/
{
return list_Nconc(inf_GenSuperpositionLeft(GivenClause, ShIndex, FALSE,
FALSE, FALSE, Flags, Precedence),
inf_GenSuperpositionRight(GivenClause, ShIndex, FALSE,
FALSE, FALSE, Flags, Precedence));
}
static __inline__ LIST inf_OrderedParamodulation(CLAUSE GivenClause,
SHARED_INDEX ShIndex,
FLAGSTORE Flags,
PRECEDENCE Precedence)
/**************************************************************
INPUT: A clause, an Index, usually the WorkedOffIndex, a
flag store and a precedence.
RETURNS: A list of clauses derivable from the Givenclause by
ordered paramodulation wrt. the Index.
MEMORY: A list of clauses is produced, where memory for the list
and the clauses is allocated.
***************************************************************/
{
return list_Nconc(inf_GenSuperpositionLeft(GivenClause, ShIndex, TRUE,
FALSE, FALSE, Flags, Precedence),
inf_GenSuperpositionRight(GivenClause, ShIndex, TRUE,
FALSE, FALSE, Flags, Precedence));
}
static __inline__ LIST inf_SuperpositionLeft(CLAUSE GivenClause,
SHARED_INDEX ShIndex,
FLAGSTORE Flags,
PRECEDENCE Precedence)
/**************************************************************
INPUT: A clause, an Index, usually the WorkedOffIndex, a
flag store, and a precedence.
RETURNS: A list of clauses derivable from the Givenclause by
superposition left wrt. the Index.
MEMORY: A list of clauses is produced, where memory for the list
and the clauses is allocated.
***************************************************************/
{
return inf_GenSuperpositionLeft(GivenClause,ShIndex,TRUE,TRUE,FALSE,Flags, Precedence);
}
static __inline__ LIST inf_SuperpositionRight(CLAUSE GivenClause,
SHARED_INDEX ShIndex,
FLAGSTORE Flags,
PRECEDENCE Precedence)
/**************************************************************
INPUT: A clause, an Index, usually the WorkedOffIndex, a
flag store and a precedence.
RETURNS: A list of clauses derivable from the Givenclause by
superposition right wrt. the Index.
MEMORY: A list of clauses is produced, where memory for the list
and the clauses is allocated.
***************************************************************/
{
return inf_GenSuperpositionRight(GivenClause,ShIndex,TRUE,TRUE,FALSE,Flags, Precedence);
}
#endif