src/HOL/UNITY/Priority.thy
author paulson
Fri, 05 Jan 2001 10:15:48 +0100
changeset 10782 ddb433987557
permissions -rw-r--r--
new examples by Sidi Ehmety
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10782
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
     1
(*  Title:      HOL/UNITY/Priority
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
     2
    ID:         $Id$
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
     3
    Author:     Sidi O Ehmety, Cambridge University Computer Laboratory
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
     4
    Copyright   2001  University of Cambridge
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
     5
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
     6
The priority system
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
     7
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
     8
From Charpentier and Chandy,
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
     9
Examples of Program Composition Illustrating the Use of Universal Properties
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    10
   In J. Rolim (editor), Parallel and Distributed Processing,
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    11
   Spriner LNCS 1586 (1999), pages 1215-1227.
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    12
*)
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    13
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    14
Priority = PriorityAux + Comp + SubstAx +
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    15
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    16
types state = "(vertex*vertex)set"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    17
types command = "vertex=>(state*state)set"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    18
  
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    19
consts
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    20
  (* the initial state *)
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    21
  init :: "(vertex*vertex)set"  
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    22
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    23
constdefs
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    24
  (* from the definitions given in section 4.4 *)
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    25
  (* i has highest priority in r *)
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    26
  highest :: "[vertex, (vertex*vertex)set]=>bool"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    27
  "highest i r == A i r = {}"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    28
  
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    29
  (* i has lowest priority in r *)
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    30
  lowest :: "[vertex, (vertex*vertex)set]=>bool"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    31
  "lowest i r == R i r = {}"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    32
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    33
  act :: command
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    34
  "act i == {(s, s'). s'=reverse i s & highest i s}"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    35
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    36
  (* All components start with the same initial state *)
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    37
  Component :: "vertex=>state program"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    38
  "Component i == mk_program({init}, {act i}, UNIV)"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    39
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    40
  (* Abbreviations *)
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    41
  Highest :: "vertex=>state set"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    42
  "Highest i == {s. highest i s}"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    43
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    44
  Lowest :: "vertex=>state set"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    45
  "Lowest i == {s. lowest i s}"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    46
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    47
  Acyclic :: "state set"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    48
  "Acyclic == {s. acyclic s}"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    49
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    50
  (* Every above set has a maximal vertex: two equivalent defs. *)
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    51
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    52
  Maximal :: "state set"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    53
  "Maximal == INT i. {s. ~highest i s-->(EX j:above i  s. highest j s)}"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    54
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    55
  Maximal' :: "state set"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    56
  "Maximal' == INT i. Highest i Un (UN j. {s. j:above i s} Int Highest j)"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    57
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    58
  
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    59
  Safety :: "state set"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    60
  "Safety == INT i. {s. highest i s --> (ALL j:neighbors i s. ~highest j s)}"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    61
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    62
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    63
  (* Composition of a finite set of component;
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    64
     the vertex 'UNIV' is finite by assumption *)
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    65
  
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    66
  system :: "state program"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    67
  "system == JN i. Component i"
ddb433987557 new examples by Sidi Ehmety
paulson
parents:
diff changeset
    68
end