src/HOL/UNITY/Comp/Counterc.thy
changeset 35416 d8d7d1b785af
parent 32960 69916a850301
child 36866 426d5781bb25
equal deleted inserted replaced
35342:4dc65845eab3 35416:d8d7d1b785af
    19 
    19 
    20 consts
    20 consts
    21   C :: "state=>int"
    21   C :: "state=>int"
    22   c :: "state=>nat=>int"
    22   c :: "state=>nat=>int"
    23 
    23 
    24 consts  
    24 primrec sum  :: "[nat,state]=>int" where
    25   sum  :: "[nat,state]=>int"
    25   (* sum I s = sigma_{i<I}. c s i *)
    26   sumj :: "[nat, nat, state]=>int"
    26   "sum 0 s = 0"
       
    27 | "sum (Suc i) s = (c s) i + sum i s"
    27 
    28 
    28 primrec (* sum I s = sigma_{i<I}. c s i *)
    29 primrec sumj :: "[nat, nat, state]=>int" where
    29   "sum 0 s = 0"
       
    30   "sum (Suc i) s = (c s) i + sum i s"
       
    31 
       
    32 primrec
       
    33   "sumj 0 i s = 0"
    30   "sumj 0 i s = 0"
    34   "sumj (Suc n) i s = (if n=i then sum n s else (c s) n + sumj n i s)"
    31 | "sumj (Suc n) i s = (if n=i then sum n s else (c s) n + sumj n i s)"
    35   
    32   
    36 types command = "(state*state)set"
    33 types command = "(state*state)set"
    37 
    34 
    38 constdefs
    35 definition a :: "nat=>command" where
    39   a :: "nat=>command"
       
    40  "a i == {(s, s'). (c s') i = (c s) i + 1 & (C s') = (C s) + 1}"
    36  "a i == {(s, s'). (c s') i = (c s) i + 1 & (C s') = (C s) + 1}"
    41  
    37  
    42   Component :: "nat => state program"
    38 definition Component :: "nat => state program" where
    43   "Component i == mk_total_program({s. C s = 0 & (c s) i = 0},
    39   "Component i == mk_total_program({s. C s = 0 & (c s) i = 0},
    44                                    {a i},
    40                                    {a i},
    45                                    \<Union>G \<in> preserves (%s. (c s) i). Acts G)"
    41                                    \<Union>G \<in> preserves (%s. (c s) i). Acts G)"
    46 
    42 
    47 
    43 
   125       ==> (\<Squnion>i\<in>{i. i<I}. (Component i)) \<in> invariant {s. C s = sum I s}"
   121       ==> (\<Squnion>i\<in>{i. i<I}. (Component i)) \<in> invariant {s. C s = sum I s}"
   126 apply (simp (no_asm) add: invariant_def JN_stable sum_sumj_eq2)
   122 apply (simp (no_asm) add: invariant_def JN_stable sum_sumj_eq2)
   127 apply (auto intro!: sum0 p2_p3)
   123 apply (auto intro!: sum0 p2_p3)
   128 done
   124 done
   129 
   125 
   130 end  
   126 end