src/ZF/UNITY/Distributor.thy
author paulson
Thu, 12 Jun 2003 16:40:59 +0200
changeset 14057 57de6d68389e
parent 14052 e9c9f69e4f63
child 14072 f932be305381
permissions -rw-r--r--
x-symbols (mostly)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14052
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
     1
(*  Title: ZF/UNITY/Distributor
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
     2
    ID:         $Id$
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
     3
    Author:     Sidi O Ehmety, Cambridge University Computer Laboratory
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
     4
    Copyright   2002  University of Cambridge
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
     5
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
     6
A multiple-client allocator from a single-client allocator:
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
     7
Distributor specification
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
     8
*)
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
     9
Distributor = AllocBase + Follows +  Guar + GenPrefix +
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    10
(** Distributor specification (the number of outputs is Nclients) ***)
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    11
 (*spec (14)*)
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    12
constdefs  
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    13
  distr_follows :: [i, i, i, i =>i] =>i
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    14
    "distr_follows(A, In, iIn, Out) ==
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    15
     (lift(In) IncreasingWrt prefix(A)/list(A)) Int
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    16
     (lift(iIn) IncreasingWrt prefix(nat)/list(nat)) Int
14057
57de6d68389e x-symbols (mostly)
paulson
parents: 14052
diff changeset
    17
     Always({s:state. \\<forall>elt \\<in> set_of_list(s`iIn). elt < Nclients})
14052
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    18
         guarantees
14057
57de6d68389e x-symbols (mostly)
paulson
parents: 14052
diff changeset
    19
         (\\<Inter>n \\<in> Nclients.
14052
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    20
          lift(Out(n))
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    21
              Fols
14057
57de6d68389e x-symbols (mostly)
paulson
parents: 14052
diff changeset
    22
          (%s. sublist(s`In, {k \\<in> nat. k<length(s`iIn) & nth(k, s`iIn) = n}))
14052
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    23
	  Wrt prefix(A)/list(A))"
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    24
  
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    25
 distr_allowed_acts :: [i=>i]=>i
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    26
  "distr_allowed_acts(Out) ==
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    27
   {D:program. AllowedActs(D) =
14057
57de6d68389e x-symbols (mostly)
paulson
parents: 14052
diff changeset
    28
   cons(id(state), \\<Union>G \\<in> (\\<Inter>n\\<in>nat. preserves(lift(Out(n)))). Acts(G))}"
14052
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    29
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    30
  distr_spec :: [i, i, i, i =>i]=>i
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    31
  "distr_spec(A, In, iIn, Out) ==
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    32
   distr_follows(A, In, iIn, Out) Int distr_allowed_acts(Out)"
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    33
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    34
locale Distributor =
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    35
  fixes In :: i  (*items to distribute*)
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    36
        iIn :: i (*destinations of items to distribute*)
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    37
        Out :: i=>i  (*distributed items*)
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    38
        A :: i   (*the type of items being distributed *)
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    39
        D :: i
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    40
 assumes
14057
57de6d68389e x-symbols (mostly)
paulson
parents: 14052
diff changeset
    41
    var_assumes       "In:var & iIn:var & (\\<forall>n. Out(n):var)"
57de6d68389e x-symbols (mostly)
paulson
parents: 14052
diff changeset
    42
    all_distinct_vars "\\<forall>n. all_distinct([In, iIn, iOut(n)])"
14052
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    43
    type_assumes      "type_of(In)=list(A) &  type_of(iIn)=list(nat) &
14057
57de6d68389e x-symbols (mostly)
paulson
parents: 14052
diff changeset
    44
                       (\\<forall>n. type_of(Out(n))=list(A))"
14052
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    45
   default_val_assumes "default_val(In)=Nil &
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    46
                        default_val(iIn)=Nil &
14057
57de6d68389e x-symbols (mostly)
paulson
parents: 14052
diff changeset
    47
                        (\\<forall>n. default_val(Out(n))=Nil)"
14052
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    48
   distr_spec  "D:distr_spec(A, In, iIn, Out)"
e9c9f69e4f63 some new ZF/UNITY material from Sidi Ehmety
paulson
parents:
diff changeset
    49
end