src/HOL/UNITY/UNITY.thy
changeset 6536 281d44905cab
parent 6535 880f31a62784
child 6713 614a76ce9bc6
equal deleted inserted replaced
6535:880f31a62784 6536:281d44905cab
    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