src/HOLCF/IOA/Modelcheck/Ring3.thy
author wenzelm
Wed, 02 Dec 2009 12:04:07 +0100
changeset 33930 6a973bd43949
parent 32960 69916a850301
permissions -rw-r--r--
slightly less ambitious settings, to avoid potential out-of-memory problem;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17244
0b2ff9541727 converted to Isar theory format;
wenzelm
parents: 7299
diff changeset
     1
theory Ring3
0b2ff9541727 converted to Isar theory format;
wenzelm
parents: 7299
diff changeset
     2
imports MuIOAOracle
0b2ff9541727 converted to Isar theory format;
wenzelm
parents: 7299
diff changeset
     3
begin
6471
08d12ef5fc19 added translation from IOA to mucalculus and corresponding modelchecker examples;
mueller
parents:
diff changeset
     4
08d12ef5fc19 added translation from IOA to mucalculus and corresponding modelchecker examples;
mueller
parents:
diff changeset
     5
datatype token = Leader | id0 | id1 | id2 | id3 | id4
08d12ef5fc19 added translation from IOA to mucalculus and corresponding modelchecker examples;
mueller
parents:
diff changeset
     6
7299
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
     7
datatype Comm =
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
     8
  Zero_One token | One_Two token | Two_Zero token |
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
     9
  Leader_Zero | Leader_One | Leader_Two
6471
08d12ef5fc19 added translation from IOA to mucalculus and corresponding modelchecker examples;
mueller
parents:
diff changeset
    10
25131
2c8caac48ade modernized specifications ('definition', 'abbreviation', 'notation');
wenzelm
parents: 19764
diff changeset
    11
definition
2c8caac48ade modernized specifications ('definition', 'abbreviation', 'notation');
wenzelm
parents: 19764
diff changeset
    12
  Greater :: "[token, token] => bool" where
2c8caac48ade modernized specifications ('definition', 'abbreviation', 'notation');
wenzelm
parents: 19764
diff changeset
    13
  "Greater x y =
7299
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    14
    (x~=Leader & x~=id0 & y=id0) | (x=id4 & y~=id4 & y~=Leader) |
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    15
    (x=id2 & y=id1) | (x=id3 & y=id1) | (x=id3 & y=id2)"
6471
08d12ef5fc19 added translation from IOA to mucalculus and corresponding modelchecker examples;
mueller
parents:
diff changeset
    16
7299
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    17
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    18
(*the ring is the composition of aut0, aut1 and aut2*)
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    19
6471
08d12ef5fc19 added translation from IOA to mucalculus and corresponding modelchecker examples;
mueller
parents:
diff changeset
    20
automaton aut0 =
7299
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    21
  signature
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    22
    actions Comm
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    23
    inputs "Two_Zero t"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    24
    outputs "Zero_One t","Leader_Zero"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    25
  states
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    26
    idf :: token
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    27
  initially "idf=id0 | idf = id3"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    28
  transitions
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    29
    "Two_Zero t"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    30
      transrel
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    31
        "if (t=id0 | t=id3) then (idf'=Leader) else
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    32
        (if (Greater t idf) then (idf'=t) else (idf'=idf))"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    33
    "Zero_One t"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    34
      pre "t=idf"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    35
    "Leader_Zero"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    36
      pre "idf=Leader"
6471
08d12ef5fc19 added translation from IOA to mucalculus and corresponding modelchecker examples;
mueller
parents:
diff changeset
    37
08d12ef5fc19 added translation from IOA to mucalculus and corresponding modelchecker examples;
mueller
parents:
diff changeset
    38
automaton aut1 =
7299
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    39
  signature
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    40
    actions Comm
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    41
    inputs "Zero_One t"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    42
    outputs "One_Two t","Leader_One"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    43
  states
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    44
    idf :: token
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    45
  initially "idf=id1 | idf=id4"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    46
  transitions
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    47
    "Zero_One t"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    48
      transrel
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    49
        "if (t=id1 | t=id4) then (idf'=Leader) else
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    50
        (if (Greater t idf) then (idf'=t) else (idf'=idf))"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    51
    "One_Two t"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    52
      pre "t=idf"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    53
    "Leader_One"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    54
      pre "idf=Leader"
6471
08d12ef5fc19 added translation from IOA to mucalculus and corresponding modelchecker examples;
mueller
parents:
diff changeset
    55
08d12ef5fc19 added translation from IOA to mucalculus and corresponding modelchecker examples;
mueller
parents:
diff changeset
    56
automaton aut2 =
7299
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    57
  signature
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    58
    actions Comm
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    59
    inputs "One_Two t"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    60
    outputs "Two_Zero t","Leader_Two"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    61
  states
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    62
    idf :: token
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    63
  initially "idf=id2"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    64
  transitions
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    65
    "One_Two t"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    66
      transrel
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    67
        "if (t=id2) then (idf'=Leader) else
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    68
        (if (Greater t idf) then (idf'=t) else (idf'=idf))"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    69
    "Two_Zero t"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    70
      pre "t=idf"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    71
    "Leader_Two"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    72
      pre "idf=Leader"
6471
08d12ef5fc19 added translation from IOA to mucalculus and corresponding modelchecker examples;
mueller
parents:
diff changeset
    73
7299
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    74
automaton ring = compose aut0, aut1, aut2
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    75
6471
08d12ef5fc19 added translation from IOA to mucalculus and corresponding modelchecker examples;
mueller
parents:
diff changeset
    76
7299
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    77
(*one_leader expresses property that at most one component declares
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    78
  itself to leader*)
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    79
6471
08d12ef5fc19 added translation from IOA to mucalculus and corresponding modelchecker examples;
mueller
parents:
diff changeset
    80
automaton one_leader =
7299
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    81
  signature
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    82
    actions Comm
17244
0b2ff9541727 converted to Isar theory format;
wenzelm
parents: 7299
diff changeset
    83
    outputs "Zero_One t","One_Two t","Two_Zero t","Leader_Zero","Leader_One","Leader_Two"
7299
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    84
  states
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    85
    leader :: token
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    86
  initially "leader=Leader"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    87
  transitions
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    88
    "Zero_One t"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    89
      pre "True"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    90
    "One_Two t"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    91
      pre "True"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    92
    "Two_Zero t"
17244
0b2ff9541727 converted to Isar theory format;
wenzelm
parents: 7299
diff changeset
    93
      pre "True"
7299
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    94
    "Leader_Zero"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    95
      pre "leader=id0 | leader=Leader"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    96
      post leader:="id0"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    97
    "Leader_One"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
    98
      pre "leader=id1 | leader=Leader"
17244
0b2ff9541727 converted to Isar theory format;
wenzelm
parents: 7299
diff changeset
    99
      post leader:="id1"
7299
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
   100
    "Leader_Two"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
   101
      pre "leader=id2 | leader=Leader"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
   102
      post leader:="id2"
743b22579a2f quite a lot of tuning and cleanup;
wenzelm
parents: 6471
diff changeset
   103
19764
372065f34795 removed obsolete ML files;
wenzelm
parents: 17244
diff changeset
   104
lemmas aut_simps =
372065f34795 removed obsolete ML files;
wenzelm
parents: 17244
diff changeset
   105
  Greater_def one_leader_def
372065f34795 removed obsolete ML files;
wenzelm
parents: 17244
diff changeset
   106
  one_leader_asig_def one_leader_trans_def one_leader_initial_def
372065f34795 removed obsolete ML files;
wenzelm
parents: 17244
diff changeset
   107
  ring_def aut0_asig_def aut0_trans_def aut0_initial_def aut0_def
372065f34795 removed obsolete ML files;
wenzelm
parents: 17244
diff changeset
   108
  aut1_asig_def aut1_trans_def aut1_initial_def aut1_def
372065f34795 removed obsolete ML files;
wenzelm
parents: 17244
diff changeset
   109
  aut2_asig_def aut2_trans_def aut2_initial_def aut2_def
372065f34795 removed obsolete ML files;
wenzelm
parents: 17244
diff changeset
   110
372065f34795 removed obsolete ML files;
wenzelm
parents: 17244
diff changeset
   111
(* property to prove: at most one (of 3) members of the ring will
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30609
diff changeset
   112
   declare itself to leader *)
19764
372065f34795 removed obsolete ML files;
wenzelm
parents: 17244
diff changeset
   113
lemma at_most_one_leader: "ring =<| one_leader"
30609
983e8b6e4e69 Disposed old declarations, tactics, tactic combinators that refer to the simpset or claset of an implicit theory;
wenzelm
parents: 25131
diff changeset
   114
apply (tactic {* is_sim_tac @{simpset} (thms "aut_simps") 1 *})
19764
372065f34795 removed obsolete ML files;
wenzelm
parents: 17244
diff changeset
   115
apply auto
372065f34795 removed obsolete ML files;
wenzelm
parents: 17244
diff changeset
   116
done
6471
08d12ef5fc19 added translation from IOA to mucalculus and corresponding modelchecker examples;
mueller
parents:
diff changeset
   117
08d12ef5fc19 added translation from IOA to mucalculus and corresponding modelchecker examples;
mueller
parents:
diff changeset
   118
end