src/HOL/Statespace/StateSpaceLocale.thy
author wenzelm
Sun, 06 Jan 2019 15:04:34 +0100
changeset 69605 a96320074298
parent 63167 0909deb8059b
child 69913 ca515cf61651
permissions -rw-r--r--
isabelle update -u path_cartouches;

(*  Title:      HOL/Statespace/StateSpaceLocale.thy
    Author:     Norbert Schirmer, TU Muenchen
*)

section \<open>Setup for State Space Locales \label{sec:StateSpaceLocale}\<close>

theory StateSpaceLocale imports StateFun 
keywords "statespace" :: thy_decl
begin

ML_file \<open>state_space.ML\<close>
ML_file \<open>state_fun.ML\<close>

text \<open>For every type that is to be stored in a state space, an
instance of this locale is imported in order convert the abstract and
concrete values.\<close>


locale project_inject =
 fixes project :: "'value \<Rightarrow> 'a"
  and inject :: "'a \<Rightarrow> 'value"
 assumes project_inject_cancel [statefun_simp]: "project (inject x) = x"
begin

lemma ex_project [statefun_simp]: "\<exists>v. project v = x"
proof
  show "project (inject x) = x"
    by (rule project_inject_cancel)
qed

lemma project_inject_comp_id [statefun_simp]: "project \<circ> inject = id"
  by (rule ext) (simp add: project_inject_cancel)

lemma project_inject_comp_cancel[statefun_simp]: "f \<circ> project \<circ> inject = f"
  by (rule ext) (simp add: project_inject_cancel)

end

end