src/HOL/Code_Message.thy
author huffman
Thu, 26 Feb 2009 08:44:12 -0800
changeset 30128 365ee7319b86
parent 28952 15a4b2cf8c34
child 31032 38901ed00ec3
permissions -rw-r--r--
revert some Suc 0 lemmas back to their original forms; added some simp rules for (1::nat)

(*  ID:         $Id$
    Author:     Florian Haftmann, TU Muenchen
*)

header {* Monolithic strings (message strings) for code generation *}

theory Code_Message
imports Plain "~~/src/HOL/List"
begin

subsection {* Datatype of messages *}

datatype message_string = STR string

lemmas [code del] = message_string.recs message_string.cases

lemma [code]: "size (s\<Colon>message_string) = 0"
  by (cases s) simp_all

lemma [code]: "message_string_size (s\<Colon>message_string) = 0"
  by (cases s) simp_all

subsection {* ML interface *}

ML {*
structure Message_String =
struct

fun mk s = @{term STR} $ HOLogic.mk_string s;

end;
*}


subsection {* Code serialization *}

code_type message_string
  (SML "string")
  (OCaml "string")
  (Haskell "String")

setup {*
  fold (fn target => add_literal_message @{const_name STR} target)
    ["SML", "OCaml", "Haskell"]
*}

code_reserved SML string
code_reserved OCaml string

code_instance message_string :: eq
  (Haskell -)

code_const "eq_class.eq \<Colon> message_string \<Rightarrow> message_string \<Rightarrow> bool"
  (SML "!((_ : string) = _)")
  (OCaml "!((_ : string) = _)")
  (Haskell infixl 4 "==")

end