NEW: Added Aliveness and Weak Agreement claims.
This commit is contained in:
parent
6afcfe1d10
commit
2fb0ecde97
110
src/claim.c
110
src/claim.c
@ -727,7 +727,85 @@ arachne_claim_nisynch (const System sys, const int claim_run,
|
||||
return arachne_claim_authentications (sys, claim_run, claim_index, 1);
|
||||
}
|
||||
|
||||
//! Are all agents trusted of the claim run (as required by the property?)
|
||||
//! Test weak agreement
|
||||
int
|
||||
arachne_claim_weakagree (const System sys, const int claim_run,
|
||||
const int claim_index)
|
||||
{
|
||||
/*
|
||||
* Runs for each role, with matching lists for rho.
|
||||
*/
|
||||
Role role;
|
||||
|
||||
for (role = sys->runs[claim_run].protocol->roles; role != NULL;
|
||||
role = role->next)
|
||||
{
|
||||
if (role != sys->runs[claim_run].role)
|
||||
{
|
||||
int run;
|
||||
int roleokay;
|
||||
|
||||
roleokay = false;
|
||||
for (run = 0; run < sys->maxruns; run++)
|
||||
{
|
||||
if (run != claim_run)
|
||||
{
|
||||
if (role == sys->runs[run].role)
|
||||
{
|
||||
if (isTermlistEqual
|
||||
(sys->runs[run].rho, sys->runs[claim_run].rho))
|
||||
{
|
||||
roleokay = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!roleokay)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//! Test aliveness
|
||||
int
|
||||
arachne_claim_alive (const System sys, const int claim_run,
|
||||
const int claim_index)
|
||||
{
|
||||
/*
|
||||
* Fairly simple claim: there must exist runs for each agent involved.
|
||||
* We don't even consider the roles.
|
||||
*/
|
||||
Termlist tl;
|
||||
|
||||
for (tl = sys->runs[claim_run].rho; tl != NULL; tl = tl->next)
|
||||
{
|
||||
int run;
|
||||
int principalLives;
|
||||
|
||||
principalLives = false;
|
||||
for (run = 0; run < sys->maxruns; run++)
|
||||
{
|
||||
if (isTermEqual (tl->term, agentOfRun (sys, run)))
|
||||
{
|
||||
principalLives = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!principalLives)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//! Determine good height for full session
|
||||
/**
|
||||
* For a role, assume in context of claim role
|
||||
*/
|
||||
int
|
||||
pruneClaimRunTrusted (const System sys)
|
||||
{
|
||||
@ -802,6 +880,36 @@ prune_claim_specifics (const System sys)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
if (sys->current_claim->type == CLAIM_Weakagree)
|
||||
{
|
||||
if (arachne_claim_weakagree (sys, 0, sys->current_claim->ev))
|
||||
{
|
||||
sys->current_claim->count =
|
||||
statesIncrease (sys->current_claim->count);
|
||||
if (switches.output == PROOF)
|
||||
{
|
||||
indentPrint ();
|
||||
eprintf
|
||||
("Pruned: Weak agreement holds in this part of the proof tree.\n");
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
if (sys->current_claim->type == CLAIM_Alive)
|
||||
{
|
||||
if (arachne_claim_alive (sys, 0, sys->current_claim->ev))
|
||||
{
|
||||
sys->current_claim->count =
|
||||
statesIncrease (sys->current_claim->count);
|
||||
if (switches.output == PROOF)
|
||||
{
|
||||
indentPrint ();
|
||||
eprintf
|
||||
("Pruned: alive holds in this part of the proof tree.\n");
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -44,6 +44,8 @@ Term TERM_Data;
|
||||
|
||||
Term TERM_Claim;
|
||||
Term CLAIM_Secret;
|
||||
Term CLAIM_Alive;
|
||||
Term CLAIM_Weakagree;
|
||||
Term CLAIM_Nisynch;
|
||||
Term CLAIM_Niagree;
|
||||
Term CLAIM_Empty;
|
||||
@ -82,6 +84,8 @@ specialTermInit (const System sys)
|
||||
langcons (TERM_Data, "Data", TERM_Type);
|
||||
|
||||
langcons (CLAIM_Secret, "Secret", TERM_Claim);
|
||||
langcons (CLAIM_Alive, "Alive", TERM_Claim);
|
||||
langcons (CLAIM_Weakagree, "Weakagree", TERM_Claim);
|
||||
langcons (CLAIM_Nisynch, "Nisynch", TERM_Claim);
|
||||
langcons (CLAIM_Niagree, "Niagree", TERM_Claim);
|
||||
langcons (CLAIM_Empty, "Empty", TERM_Claim);
|
||||
@ -101,7 +105,8 @@ specialTermInit (const System sys)
|
||||
/* basically all authentication claims */
|
||||
CLAIMS_dep_prec = termlistAdd (NULL, CLAIM_Niagree);
|
||||
CLAIMS_dep_prec = termlistAdd (CLAIMS_dep_prec, CLAIM_Nisynch);
|
||||
|
||||
CLAIMS_dep_prec = termlistAdd (CLAIMS_dep_prec, CLAIM_Alive);
|
||||
CLAIMS_dep_prec = termlistAdd (CLAIMS_dep_prec, CLAIM_Weakagree);
|
||||
}
|
||||
|
||||
//! After compilation (so the user gets the first choice)
|
||||
|
@ -38,6 +38,8 @@ extern Term TERM_Data;
|
||||
|
||||
extern Term TERM_Claim;
|
||||
extern Term CLAIM_Secret;
|
||||
extern Term CLAIM_Alive;
|
||||
extern Term CLAIM_Weakagree;
|
||||
extern Term CLAIM_Nisynch;
|
||||
extern Term CLAIM_Niagree;
|
||||
extern Term CLAIM_Empty;
|
||||
|
Loading…
Reference in New Issue
Block a user