|
7186
|
1 |
(* Title: HOL/UNITY/Lift_prog.thy
|
|
|
2 |
ID: $Id$
|
|
|
3 |
Author: Lawrence C Paulson, Cambridge University Computer Laboratory
|
|
|
4 |
Copyright 1999 University of Cambridge
|
|
|
5 |
|
|
|
6 |
lift_prog, etc: replication of components
|
|
|
7 |
*)
|
|
|
8 |
|
|
7630
|
9 |
Lift_prog = Project +
|
|
7186
|
10 |
|
|
|
11 |
constdefs
|
|
|
12 |
|
|
7482
|
13 |
lift_map :: "['a, 'b * ('a => 'b)] => ('a => 'b)"
|
|
|
14 |
"lift_map i == %(s,f). f(i := s)"
|
|
|
15 |
|
|
7186
|
16 |
lift_set :: "['a, 'b set] => ('a => 'b) set"
|
|
|
17 |
"lift_set i A == {f. f i : A}"
|
|
|
18 |
|
|
|
19 |
drop_set :: "['a, ('a=>'b) set] => 'b set"
|
|
|
20 |
"drop_set i A == (%f. f i) `` A"
|
|
|
21 |
|
|
|
22 |
lift_act :: "['a, ('b*'b) set] => (('a=>'b) * ('a=>'b)) set"
|
|
|
23 |
"lift_act i act == {(f,f'). f(i:= f' i) = f' & (f i, f' i) : act}"
|
|
|
24 |
|
|
7688
|
25 |
(*Argument C allows weak safety laws to be projected*)
|
|
|
26 |
drop_act :: "[('a=>'b) set, 'a, (('a=>'b) * ('a=>'b)) set] => ('b*'b) set"
|
|
|
27 |
"drop_act C i act == {(f i, f' i) | f f'. (f,f'): act & f: C}"
|
|
7186
|
28 |
|
|
|
29 |
lift_prog :: "['a, 'b program] => ('a => 'b) program"
|
|
|
30 |
"lift_prog i F ==
|
|
|
31 |
mk_program (lift_set i (Init F),
|
|
|
32 |
lift_act i `` Acts F)"
|
|
|
33 |
|
|
7688
|
34 |
drop_prog :: "[('a=>'b) set, 'a, ('a=>'b) program] => 'b program"
|
|
|
35 |
"drop_prog C i F ==
|
|
7186
|
36 |
mk_program (drop_set i (Init F),
|
|
7688
|
37 |
drop_act C i `` (Acts F))"
|
|
7186
|
38 |
|
|
|
39 |
(*simplifies the expression of specifications*)
|
|
|
40 |
constdefs
|
|
|
41 |
sub :: ['a, 'a=>'b] => 'b
|
|
|
42 |
"sub i f == f i"
|
|
|
43 |
|
|
|
44 |
|
|
|
45 |
end
|