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