theory OO imports Main begin subsection "Towards an OO Language: A Language of Records" (* FIXME: move to HOL/Fun *) abbreviation fun_upd2 :: "('a ⇒ 'b ⇒ 'c) ⇒ 'a ⇒ 'b ⇒ 'c ⇒ 'a ⇒ 'b ⇒ 'c" ("_/'((2_,_ :=/ _)')" [1000,0,0,0] 900) where "f(x,y := z) == f(x := (f x)(y := z))" type_synonym addr = nat datatype ref = null | Ref addr type_synonym obj = "string ⇒ ref" type_synonym venv = "string ⇒ ref" type_synonym store = "addr ⇒ obj"