src/HOL/IMP/Collecting_Examples.thy
changeset 48765 fb1ed5230abc
child 49138 53f954510a8c
equal deleted inserted replaced
48764:4fe0920d5049 48765:fb1ed5230abc
       
     1 theory Collecting_Examples
       
     2 imports Collecting
       
     3 begin
       
     4 
       
     5 text{* Tweak code generation to work with sets of non-equality types: *}
       
     6 declare insert_code[code del] union_coset_filter[code del]
       
     7 lemma insert_code [code]:  "insert x (set xs) = set (x#xs)"
       
     8 by simp
       
     9 
       
    10 text{* Make assignment rule executable: *}
       
    11 declare step.simps(2)[code del]
       
    12 lemma [code]: "step S (x ::= e {P}) = (x ::= e {(%s. s(x := aval e s)) ` S})"
       
    13 by auto
       
    14 declare step.simps(1,3-)[code]
       
    15 
       
    16 text{* The example: *}
       
    17 definition "c = WHILE Less (V ''x'') (N 3)
       
    18                 DO ''x'' ::= Plus (V ''x'') (N 2)"
       
    19 definition c0 :: "state set acom" where "c0 = anno {} c"
       
    20 
       
    21 definition "show_acom xs = map_acom (\<lambda>S. show_state xs ` S)"
       
    22 
       
    23 text{* Collecting semantics: *}
       
    24 value "show_acom [''x''] (((step {%x. 0}) ^^ 1) c0)"
       
    25 value "show_acom [''x''] (((step {%x. 0}) ^^ 2) c0)"
       
    26 value "show_acom [''x''] (((step {%x. 0}) ^^ 3) c0)"
       
    27 value "show_acom [''x''] (((step {%x. 0}) ^^ 4) c0)"
       
    28 value "show_acom [''x''] (((step {%x. 0}) ^^ 5) c0)"
       
    29 value "show_acom [''x''] (((step {%x. 0}) ^^ 6) c0)"
       
    30 
       
    31 text{* Small-step semantics: *}
       
    32 value "show_acom [''x''] (((step {}) ^^ 0) (step {%x. 0} c0))"
       
    33 value "show_acom [''x''] (((step {}) ^^ 1) (step {%x. 0} c0))"
       
    34 value "show_acom [''x''] (((step {}) ^^ 2) (step {%x. 0} c0))"
       
    35 value "show_acom [''x''] (((step {}) ^^ 3) (step {%x. 0} c0))"
       
    36 value "show_acom [''x''] (((step {}) ^^ 4) (step {%x. 0} c0))"
       
    37 value "show_acom [''x''] (((step {}) ^^ 5) (step {%x. 0} c0))"
       
    38 
       
    39 
       
    40 end