* included in the distribution.
*
* $RCSfile: preds.c,v $
- * $Revision: 1.9 $
- * $Date: 1999/11/17 16:57:43 $
+ * $Revision: 1.11 $
+ * $Date: 2000/03/13 11:37:16 $
* ------------------------------------------------------------------------*/
/* --------------------------------------------------------------------------
* Local function prototypes:
* ------------------------------------------------------------------------*/
-static Cell local assumeEvid Args((Cell,Int));
+static Cell local assumeEvid ( Cell,Int );
#if IPARAM
-static Cell local findIPEvid Args((Text));
-static Void local removeIPEvid Args((Text));
+static Cell local findIPEvid ( Text );
+static Void local removeIPEvid ( Text );
#endif
-static List local makePredAss Args((List,Int));
-static List local copyPreds Args((List));
-static Void local qualify Args((List,Cell));
-static Void local qualifyBinding Args((List,Cell));
-static Cell local qualifyExpr Args((Int,List,Cell));
-static Void local overEvid Args((Cell,Cell));
-
-static Void local cutoffExceeded Args((Cell,Int,List));
-static Cell local scFind Args((Cell,Cell,Int,Cell,Int,Int));
-static Cell local scEntail Args((List,Cell,Int,Int));
-static Cell local entail Args((List,Cell,Int,Int));
-static Cell local inEntail Args((List,Cell,Int,Int));
+static List local makePredAss ( List,Int );
+static List local copyPreds ( List );
+static Void local qualify ( List,Cell );
+static Void local qualifyBinding ( List,Cell );
+static Cell local qualifyExpr ( Int,List,Cell );
+static Void local overEvid ( Cell,Cell );
+
+static Void local cutoffExceeded ( Cell,Int,List );
+static Cell local scFind ( Cell,Cell,Int,Cell,Int,Int );
+static Cell local scEntail ( List,Cell,Int,Int );
+static Cell local entail ( List,Cell,Int,Int );
+static Cell local inEntail ( List,Cell,Int,Int );
#if MULTI_INST
-static Cell local inEntails Args((List,Cell,Int,Int));
-static Bool local instCompare Args((Inst, Inst));
+static Cell local inEntails ( List,Cell,Int,Int );
+static Bool local instCompare ( Inst, Inst );
#endif
#if TREX
-static Cell local lacksNorm Args((Type,Int,Cell));
+static Cell local lacksNorm ( Type,Int,Cell );
#endif
-static List local scSimplify Args((List));
-static Void local elimTauts Args((Void));
-static Bool local anyGenerics Args((Type,Int));
-static List local elimOuterPreds Args((List));
-static List local elimPredsUsing Args((List,List));
-static Void local reducePreds Args((Void));
-static Void local normPreds Args((Int));
+static List local scSimplify ( List );
+static Void local elimTauts ( Void );
+static Bool local anyGenerics ( Type,Int );
+static List local elimOuterPreds ( List );
+static List local elimPredsUsing ( List,List );
+static Void local reducePreds ( Void );
+static Void local normPreds ( Int );
-static Bool local resolveDefs Args((List));
-static Bool local resolveVar Args((Int));
-static Class local classConstraining Args((Int,Cell,Int));
-static Bool local instComp_ Args((Inst,Inst));
+static Bool local resolveDefs ( List );
+static Bool local resolveVar ( Int );
+static Class local classConstraining ( Int,Cell,Int );
+static Bool local instComp_ ( Inst,Inst );
/* --------------------------------------------------------------------------
* Predicate assignments:
if (nonNull(in)) {
Int beta = typeOff;
Cell e = inst(in).builder;
- Cell es = inst(in).specifics;
+ List es = inst(in).specifics;
+ List fs = NIL;
+ for (; nonNull(es); es=tl(es))
+ fs = cons(triple(hd(es),mkInt(beta),NIL),fs);
+ fs = rev(fs);
+ improve(0,ps,fs);
#if EXPLAIN_INSTANCE_RESOLUTION
if (showInstRes) {
for (i = 0; i < d; i++)
fputc(' ', stdout);
fputs("try ", stdout);
- printContext(stdout, es);
+ printContext(stdout, copyPreds(fs));
fputs(" => ", stdout);
- printPred(stdout, inst(in).head);
+ printPred(stdout, copyPred(inst(in).head,beta));
fputc('\n', stdout);
}
#endif
- /* would need to lift es to triples, so be lazy, and just
- use improve1 in the loop */
- /* improve(0,ps,es); */
- for (; nonNull(es); es=tl(es)) {
+ for (es=inst(in).specifics; nonNull(es); es=tl(es)) {
Cell ev;
- improve1(0,ps,hd(es),beta);
ev = entail(ps,hd(es),beta,d);
if (nonNull(ev))
e = ap(e,ev);
if (nonNull(ev)) { /* Discharge if ps ||- (pi,o) */
overEvid(thd3(hd(p)),ev);
- } else if (!isAp(pi) || isIP(fun(pi)) || !anyGenerics(pi,o)) {
+ } else if (isIP(fun(pi))) {
+ tl(p) = rems;
+ rems = p;
+ } else if (!isAp(pi) || !anyGenerics(pi,o)) {
tl(p) = sps; /* Defer if no generics */
sps = p;
}