- Fixed a bug in the pruning algorithm, where intruder runs were also
checked for agent lists, which is false.
This commit is contained in:
parent
b04bc86185
commit
5c90522c55
@ -1253,6 +1253,9 @@ bind_goal_new_intruder_run (const Binding b)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Bind a regular goal
|
//! Bind a regular goal
|
||||||
|
/**
|
||||||
|
* Problem child. Valgrind does not like it.
|
||||||
|
*/
|
||||||
int
|
int
|
||||||
bind_goal_regular_run (const Binding b)
|
bind_goal_regular_run (const Binding b)
|
||||||
{
|
{
|
||||||
@ -1292,7 +1295,7 @@ bind_goal_regular_run (const Binding b)
|
|||||||
if (!termMguSubTerm
|
if (!termMguSubTerm
|
||||||
(b->term, rd->message, test_sub_unification, sys->know->inverses, NULL))
|
(b->term, rd->message, test_sub_unification, sys->know->inverses, NULL))
|
||||||
{
|
{
|
||||||
int flag;
|
int sflag;
|
||||||
|
|
||||||
// A good candidate
|
// A good candidate
|
||||||
found++;
|
found++;
|
||||||
@ -1317,11 +1320,11 @@ bind_goal_regular_run (const Binding b)
|
|||||||
}
|
}
|
||||||
indentDepth++;
|
indentDepth++;
|
||||||
// Bind to existing run
|
// Bind to existing run
|
||||||
flag = bind_existing_run (b, p, r, index);
|
sflag = bind_existing_run (b, p, r, index);
|
||||||
// bind to new run
|
// bind to new run
|
||||||
flag = flag && bind_new_run (b, p, r, index);
|
sflag = sflag && bind_new_run (b, p, r, index);
|
||||||
indentDepth--;
|
indentDepth--;
|
||||||
return flag;
|
return sflag;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1506,12 +1509,21 @@ prune_theorems ()
|
|||||||
run = 1;
|
run = 1;
|
||||||
while (run < sys->maxruns)
|
while (run < sys->maxruns)
|
||||||
{
|
{
|
||||||
if (inTermlist (sys->untrusted, agentOfRun (sys, run)))
|
if (sys->runs[run].protocol != INTRUDER)
|
||||||
{
|
{
|
||||||
if (sys->output == PROOF)
|
Term actor;
|
||||||
|
|
||||||
|
actor = agentOfRun(sys, run);
|
||||||
|
eprintf ("Bla %i ", run);
|
||||||
|
termPrint (actor);
|
||||||
|
eprintf ("\n");
|
||||||
|
if (inTermlist (sys->untrusted, actor))
|
||||||
{
|
{
|
||||||
indentPrint ();
|
if (sys->output == PROOF)
|
||||||
eprintf ("Pruned because the actor of run %i is untrusted.\n", run);
|
{
|
||||||
|
indentPrint ();
|
||||||
|
eprintf ("Pruned because the actor of run %i is untrusted.\n", run);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
run++;
|
run++;
|
||||||
|
19
src/system.c
19
src/system.c
@ -339,15 +339,22 @@ agentOfRunRole (const System sys, const int run, const Term role)
|
|||||||
Termlist agents = sys->runs[run].agents;
|
Termlist agents = sys->runs[run].agents;
|
||||||
|
|
||||||
/* TODO stupid reversed order, lose that soon */
|
/* TODO stupid reversed order, lose that soon */
|
||||||
agents = termlistForward (agents);
|
if (agents != NULL)
|
||||||
while (agents != NULL && roles != NULL)
|
|
||||||
{
|
{
|
||||||
if (isTermEqual (roles->term, role))
|
agents = termlistForward (agents);
|
||||||
|
while (agents != NULL && roles != NULL)
|
||||||
{
|
{
|
||||||
return agents->term;
|
if (isTermEqual (roles->term, role))
|
||||||
|
{
|
||||||
|
return agents->term;
|
||||||
|
}
|
||||||
|
agents = agents->prev;
|
||||||
|
roles = roles->next;
|
||||||
}
|
}
|
||||||
agents = agents->prev;
|
}
|
||||||
roles = roles->next;
|
else
|
||||||
|
{
|
||||||
|
error ("Agent list for run %i is empty, so agentOfRunRole is not usable.", run);
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user