src/HOL/UNITY/Union.thy
author paulson
Fri, 06 Nov 1998 13:20:29 +0100
changeset 5804 8e0a4c4fd67b
parent 5648 fe887910e32e
child 6012 1894bfc4aee9
permissions -rw-r--r--
Revising the Client proof as suggested by Michel Charpentier. New lemmas about composition (in Union.ML), etc. Also changed "length" to "size" because it is displayed as "size" in any event.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5252
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
     1
(*  Title:      HOL/UNITY/Union.thy
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
     2
    ID:         $Id$
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
     4
    Copyright   1998  University of Cambridge
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
     5
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
     6
Unions of programs
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
     7
5804
8e0a4c4fd67b Revising the Client proof as suggested by Michel Charpentier. New lemmas
paulson
parents: 5648
diff changeset
     8
Partly from Misra's Chapter 5: Asynchronous Compositions of Programs
5252
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
     9
*)
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    10
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    11
Union = SubstAx + FP +
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    12
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    13
constdefs
5648
fe887910e32e specifications as sets of programs
paulson
parents: 5611
diff changeset
    14
  JOIN  :: ['a set, 'a => 'b program] => 'b program
5611
6957f124ca97 Join now an infix operator
paulson
parents: 5596
diff changeset
    15
    "JOIN I F == mk_program (INT i:I. Init (F i), UN i:I. Acts (F i))"
5252
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    16
5648
fe887910e32e specifications as sets of programs
paulson
parents: 5611
diff changeset
    17
  Join :: ['a program, 'a program] => 'a program      (infixl 65)
5611
6957f124ca97 Join now an infix operator
paulson
parents: 5596
diff changeset
    18
    "F Join G == mk_program (Init F Int Init G, Acts F Un Acts G)"
5252
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    19
5648
fe887910e32e specifications as sets of programs
paulson
parents: 5611
diff changeset
    20
  SKIP :: 'a program
5596
b29d18d8c4d2 abstype of programs
paulson
parents: 5584
diff changeset
    21
    "SKIP == mk_program (UNIV, {})"
5259
86d80749453f Null program and a few new results
paulson
parents: 5252
diff changeset
    22
5648
fe887910e32e specifications as sets of programs
paulson
parents: 5611
diff changeset
    23
  Diff :: "['a program, ('a * 'a)set set] => 'a program"
fe887910e32e specifications as sets of programs
paulson
parents: 5611
diff changeset
    24
    "Diff F acts == mk_program (Init F, Acts F - acts)"
fe887910e32e specifications as sets of programs
paulson
parents: 5611
diff changeset
    25
5804
8e0a4c4fd67b Revising the Client proof as suggested by Michel Charpentier. New lemmas
paulson
parents: 5648
diff changeset
    26
  (*The set of systems that regard "v" as local to F*)
5648
fe887910e32e specifications as sets of programs
paulson
parents: 5611
diff changeset
    27
  localTo :: ['a => 'b, 'a program] => 'a program set  (infixl 80)
5804
8e0a4c4fd67b Revising the Client proof as suggested by Michel Charpentier. New lemmas
paulson
parents: 5648
diff changeset
    28
    "v localTo F == {G. ALL z. Diff G (Acts F) : stable {s. v s = z}}"
8e0a4c4fd67b Revising the Client proof as suggested by Michel Charpentier. New lemmas
paulson
parents: 5648
diff changeset
    29
8e0a4c4fd67b Revising the Client proof as suggested by Michel Charpentier. New lemmas
paulson
parents: 5648
diff changeset
    30
  (*Two programs with disjoint actions, except for Id (idling)*)
8e0a4c4fd67b Revising the Client proof as suggested by Michel Charpentier. New lemmas
paulson
parents: 5648
diff changeset
    31
  Disjoint :: ['a program, 'a program] => bool
8e0a4c4fd67b Revising the Client proof as suggested by Michel Charpentier. New lemmas
paulson
parents: 5648
diff changeset
    32
    "Disjoint F G == Acts F Int Acts G <= {Id}"
5648
fe887910e32e specifications as sets of programs
paulson
parents: 5611
diff changeset
    33
5313
1861a564d7e2 Constrains, Stable, Invariant...more of the substitution axiom, but Union
paulson
parents: 5259
diff changeset
    34
syntax
1861a564d7e2 Constrains, Stable, Invariant...more of the substitution axiom, but Union
paulson
parents: 5259
diff changeset
    35
  "@JOIN"      :: [pttrn, 'a set, 'b set] => 'b set  ("(3JN _:_./ _)" 10)
1861a564d7e2 Constrains, Stable, Invariant...more of the substitution axiom, but Union
paulson
parents: 5259
diff changeset
    36
1861a564d7e2 Constrains, Stable, Invariant...more of the substitution axiom, but Union
paulson
parents: 5259
diff changeset
    37
translations
1861a564d7e2 Constrains, Stable, Invariant...more of the substitution axiom, but Union
paulson
parents: 5259
diff changeset
    38
  "JN x:A. B"   == "JOIN A (%x. B)"
1861a564d7e2 Constrains, Stable, Invariant...more of the substitution axiom, but Union
paulson
parents: 5259
diff changeset
    39
5252
1b0f14d11142 Union primitives and examples
paulson
parents:
diff changeset
    40
end