diff -r f1ded3cea58d -r f2ec28292479 src/HOL/IMP/Abs_State.thy --- a/src/HOL/IMP/Abs_State.thy Fri Jan 03 22:04:44 2014 +0100 +++ b/src/HOL/IMP/Abs_State.thy Sun Jan 05 18:59:29 2014 +0100 @@ -6,7 +6,7 @@ type_synonym 'a st_rep = "(vname * 'a) list" -fun fun_rep :: "('a::order_top) st_rep \ vname \ 'a" where +fun fun_rep :: "('a::top) st_rep \ vname \ 'a" where "fun_rep [] = (\x. \)" | "fun_rep ((x,a)#ps) = (fun_rep ps) (x := a)" @@ -14,23 +14,23 @@ "fun_rep ps = (%x. case map_of ps x of None \ \ | Some a \ a)" by(induction ps rule: fun_rep.induct) auto -definition eq_st :: "('a::order_top) st_rep \ 'a st_rep \ bool" where +definition eq_st :: "('a::top) st_rep \ 'a st_rep \ bool" where "eq_st S1 S2 = (fun_rep S1 = fun_rep S2)" hide_type st --"hide previous def to avoid long names" -quotient_type 'a st = "('a::order_top) st_rep" / eq_st +quotient_type 'a st = "('a::top) st_rep" / eq_st morphisms rep_st St by (metis eq_st_def equivpI reflpI sympI transpI) -lift_definition update :: "('a::order_top) st \ vname \ 'a \ 'a st" +lift_definition update :: "('a::top) st \ vname \ 'a \ 'a st" is "\ps x a. (x,a)#ps" by(auto simp: eq_st_def) -lift_definition "fun" :: "('a::order_top) st \ vname \ 'a" is fun_rep +lift_definition "fun" :: "('a::top) st \ vname \ 'a" is fun_rep by(simp add: eq_st_def) -definition show_st :: "vname set \ ('a::order_top) st \ (vname * 'a)set" where +definition show_st :: "vname set \ ('a::top) st \ (vname * 'a)set" where "show_st X S = (\x. (x, fun S x)) ` X" definition "show_acom C = map_acom (Option.map (show_st (vars(strip C)))) C" @@ -39,10 +39,10 @@ lemma fun_update[simp]: "fun (update S x y) = (fun S)(x:=y)" by transfer auto -definition \_st :: "(('a::order_top) \ 'b set) \ 'a st \ (vname \ 'b) set" where +definition \_st :: "(('a::top) \ 'b set) \ 'a st \ (vname \ 'b) set" where "\_st \ F = {f. \x. f x \ \(fun F x)}" -instantiation st :: ("{order,order_top}") order +instantiation st :: (order_top) order begin definition less_eq_st_rep :: "'a st_rep \ 'a st_rep \ bool" where @@ -83,7 +83,7 @@ lemma le_st_iff: "(F \ G) = (\x. fun F x \ fun G x)" by transfer (rule less_eq_st_rep_iff) -fun map2_st_rep :: "('a::order_top \ 'a \ 'a) \ 'a st_rep \ 'a st_rep \ 'a st_rep" where +fun map2_st_rep :: "('a::top \ 'a \ 'a) \ 'a st_rep \ 'a st_rep \ 'a st_rep" where "map2_st_rep f [] ps2 = map (%(x,y). (x, f \ y)) ps2" | "map2_st_rep f ((x,y)#ps1) ps2 = (let y2 = fun_rep ps2 x