12 |
12 |
13 |
13 |
14 typedef (Program) |
14 typedef (Program) |
15 'a program = "{(init:: 'a set, acts :: ('a * 'a)set set). Id:acts}" |
15 'a program = "{(init:: 'a set, acts :: ('a * 'a)set set). Id:acts}" |
16 |
16 |
|
17 consts |
|
18 co, unless :: "['a set, 'a set] => 'a program set" (infixl 60) |
|
19 |
17 constdefs |
20 constdefs |
18 mk_program :: "('a set * ('a * 'a)set set) => 'a program" |
21 mk_program :: "('a set * ('a * 'a)set set) => 'a program" |
19 "mk_program == %(init, acts). Abs_Program (init, insert Id acts)" |
22 "mk_program == %(init, acts). Abs_Program (init, insert Id acts)" |
20 |
23 |
21 Init :: "'a program => 'a set" |
24 Init :: "'a program => 'a set" |
22 "Init F == (%(init, acts). init) (Rep_Program F)" |
25 "Init F == (%(init, acts). init) (Rep_Program F)" |
23 |
26 |
24 Acts :: "'a program => ('a * 'a)set set" |
27 Acts :: "'a program => ('a * 'a)set set" |
25 "Acts F == (%(init, acts). acts) (Rep_Program F)" |
28 "Acts F == (%(init, acts). acts) (Rep_Program F)" |
26 |
29 |
27 constrains :: "['a set, 'a set] => 'a program set" |
|
28 "constrains A B == {F. ALL act: Acts F. act^^A <= B}" |
|
29 |
|
30 stable :: "'a set => 'a program set" |
30 stable :: "'a set => 'a program set" |
31 "stable A == constrains A A" |
31 "stable A == A co A" |
32 |
32 |
33 strongest_rhs :: "['a program, 'a set] => 'a set" |
33 strongest_rhs :: "['a program, 'a set] => 'a set" |
34 "strongest_rhs F A == Inter {B. F : constrains A B}" |
34 "strongest_rhs F A == Inter {B. F : A co B}" |
35 |
|
36 unless :: "['a set, 'a set] => 'a program set" |
|
37 "unless A B == constrains (A-B) (A Un B)" |
|
38 |
35 |
39 invariant :: "'a set => 'a program set" |
36 invariant :: "'a set => 'a program set" |
40 "invariant A == {F. Init F <= A} Int stable A" |
37 "invariant A == {F. Init F <= A} Int stable A" |
41 |
38 |
42 (*Polymorphic in both states and the meaning of <= *) |
39 (*Polymorphic in both states and the meaning of <= *) |
43 increasing :: "['a => 'b::{ord}] => 'a program set" |
40 increasing :: "['a => 'b::{ord}] => 'a program set" |
44 "increasing f == INT z. stable {s. z <= f s}" |
41 "increasing f == INT z. stable {s. z <= f s}" |
45 |
42 |
|
43 |
|
44 defs |
|
45 constrains_def "A co B == {F. ALL act: Acts F. act^^A <= B}" |
|
46 |
|
47 unless_def "A unless B == (A-B) co (A Un B)" |
|
48 |
46 end |
49 end |