TsoArabelas-MacBook-Pro:toy Bella$ ./pingpong This program should be regarded as a DEBUGGING aid, not as a certifier of correctness. Call with the -l flag or read the license file for terms and conditions of use. Run this program with "-h"for the list of options.
Bugs, questions, and comments should be directed to "melatti@di.uniroma1.it".
CMurphi compiler last modified date: Jan 262017 Include files last modified date: Nov 82016 ==========================================================================
========================================================================== Caching Murphi Release 5.4.9.1 Finite-state Concurrent System Verifier.
Caching Murphi Release 5.4.9.1 is based on various versions of Murphi. Caching Murphi Release 5.4.9.1 : Copyright (C) 2009-2012 by Sapienza University of Rome. Murphi release 3.1 : Copyright (C) 1992 - 1999 by the Board of Trustees of Leland Stanford Junior University.
Algorithm: Verification by breadth first search. with symmetry algorithm 3 -- Heuristic Small Memory Normalization with permutation trial limit 10.
Memory usage:
* The size of each state is 8 bits (rounded up to 8 bytes). * The memory allocated for the hash table and state queue is 8 Mbytes. With two words of overhead per state, the maximum size of the state space is 476219 states. * Use option "-k" or "-m" to increase this, if necessary. * Capacity in queuefor breadth-first search: 47621 states. * Change the constant gPercentActiveStates in mu_prolog.inc to increase this, if necessary.
Warning: No trace will not be printed in the case of protocol errors! Check the options if you want to have error traces.
alias array assert begin boolean by case clear constdoelse elsif end endalias endexists endfor endforall endfunction endif endprocedure endrecord endrule endruleset endstartstate endswitch endwhile enum error exists falsefor forall function if in interleaved invariant of procedure process program put record return rule ruleset startstate switch then to traceuntil true type var while
以pingpong.m为例
定义部分
1 2 3 4
Type player_t : 0..1; Var Players : Array[ player_t ] of Record hasball, gotball: boolean End;
```c Invariant "Only one ball in play." Forall p : player_t Do !(Players[p].hasball & Players[p].gotball) & (Players[p].hasball | Players[p].gotball) -> Forall q : player_t Do (Players[q].hasball | Players[q].gotball) -> p = q End End;