src/HOL/Statespace/StateSpaceEx.thy
author haftmann
Fri, 23 Jul 2010 10:58:13 +0200
changeset 37947 844977c7abeb
parent 29509 1ff0f3f08a7b
child 38838 62f6ba39b3d4
permissions -rw-r--r--
avoid unreliable Haskell Int type
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
25171
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
     1
(*  Title:      StateSpaceEx.thy
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
     2
    ID:         $Id$
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
     3
    Author:     Norbert Schirmer, TU Muenchen
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
     4
*)
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
     5
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
     6
header {* Examples \label{sec:Examples} *}
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
     7
theory StateSpaceEx
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
     8
imports StateSpaceLocale StateSpaceSyntax
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
     9
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    10
begin
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    11
(* FIXME: Use proper keywords file *)
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    12
(*<*)
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    13
syntax
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    14
 "_statespace_updates" :: "('a \<Rightarrow> 'b) \<Rightarrow> updbinds \<Rightarrow> ('a \<Rightarrow> 'b)" ("_\<langle>_\<rangle>" [900,0] 900)
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    15
(*>*)
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    16
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    17
text {* Did you ever dream about records with multiple inheritance.
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    18
Then you should definitely have a look at statespaces. They may be
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    19
what you are dreaming of. Or at least almost...
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    20
*}
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    21
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    22
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    23
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    24
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    25
text {* Isabelle allows to add new top-level commands to the
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    26
system. Building on the locale infrastructure, we provide a command
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    27
\isacommand{statespace} like this:*}
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    28
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    29
statespace vars =
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    30
  n::nat
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    31
  b::bool
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    32
29247
95d3a82857e5 adapted statespace module to new locales;
Norbert Schirmer <norbert.schirmer@web.de>
parents: 29235
diff changeset
    33
print_locale vars_namespace
95d3a82857e5 adapted statespace module to new locales;
Norbert Schirmer <norbert.schirmer@web.de>
parents: 29235
diff changeset
    34
print_locale vars_valuetypes
95d3a82857e5 adapted statespace module to new locales;
Norbert Schirmer <norbert.schirmer@web.de>
parents: 29235
diff changeset
    35
print_locale vars
95d3a82857e5 adapted statespace module to new locales;
Norbert Schirmer <norbert.schirmer@web.de>
parents: 29235
diff changeset
    36
25171
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    37
text {* \noindent This resembles a \isacommand{record} definition, 
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    38
but introduces sophisticated locale
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    39
infrastructure instead of HOL type schemes.  The resulting context
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    40
postulates two distinct names @{term "n"} and @{term "b"} and
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    41
projection~/ injection functions that convert from abstract values to
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    42
@{typ "nat"} and @{text "bool"}. The logical content of the locale is: *}
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    43
29509
1ff0f3f08a7b migrated class package to new locale implementation
haftmann
parents: 29248
diff changeset
    44
locale vars' =
25171
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    45
  fixes n::'name and b::'name
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    46
  assumes "distinct [n, b]" 
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    47
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    48
  fixes project_nat::"'value \<Rightarrow> nat" and inject_nat::"nat \<Rightarrow> 'value"
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    49
  assumes "\<And>n. project_nat (inject_nat n) = n" 
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    50
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    51
  fixes project_bool::"'value \<Rightarrow> bool" and inject_bool::"bool \<Rightarrow> 'value"
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    52
  assumes "\<And>b. project_bool (inject_bool b) = b"
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    53
 
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    54
text {* \noindent The HOL predicate @{const "distinct"} describes
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    55
distinctness of all names in the context.  Locale @{text "vars'"}
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    56
defines the raw logical content that is defined in the state space
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    57
locale. We also maintain non-logical context information to support
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    58
the user:
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    59
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    60
\begin{itemize}
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    61
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    62
\item Syntax for state lookup and updates that automatically inserts
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    63
the corresponding projection and injection functions.
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    64
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    65
\item Setup for the proof tools that exploit the distinctness
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    66
information and the cancellation of projections and injections in
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    67
deductions and simplifications.
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    68
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    69
\end{itemize}
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    70
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    71
This extra-logical information is added to the locale in form of
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    72
declarations, which associate the name of a variable to the
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    73
corresponding projection and injection functions to handle the syntax
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    74
transformations, and a link from the variable name to the
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    75
corresponding distinctness theorem. As state spaces are merged or
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    76
extended there are multiple distinctness theorems in the context. Our
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    77
declarations take care that the link always points to the strongest
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    78
distinctness assumption.  With these declarations in place, a lookup
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    79
can be written as @{text "s\<cdot>n"}, which is translated to @{text
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    80
"project_nat (s n)"}, and an update as @{text "s\<langle>n := 2\<rangle>"}, which is
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    81
translated to @{text "s(n := inject_nat 2)"}. We can now establish the
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    82
following lemma: *}
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    83
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    84
lemma (in vars) foo: "s<n := 2>\<cdot>b = s\<cdot>b" by simp
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    85
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    86
text {* \noindent Here the simplifier was able to refer to
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    87
distinctness of @{term "b"} and @{term "n"} to solve the equation.
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    88
The resulting lemma is also recorded in locale @{text "vars"} for
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    89
later use and is automatically propagated to all its interpretations.
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    90
Here is another example: *}
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    91
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    92
statespace 'a varsX = vars [n=N, b=B] + vars + x::'a
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    93
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    94
text {* \noindent The state space @{text "varsX"} imports two copies
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    95
of the state space @{text "vars"}, where one has the variables renamed
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    96
to upper-case letters, and adds another variable @{term "x"} of type
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    97
@{typ "'a"}. This type is fixed inside the state space but may get
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    98
instantiated later on, analogous to type parameters of an ML-functor.
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
    99
The distinctness assumption is now @{text "distinct [N, B, n, b, x]"},
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   100
from this we can derive both @{term "distinct [N,B]"} and @{term
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   101
"distinct [n,b]"}, the distinction assumptions for the two versions of
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   102
locale @{text "vars"} above.  Moreover we have all necessary
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   103
projection and injection assumptions available. These assumptions
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   104
together allow us to establish state space @{term "varsX"} as an
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   105
interpretation of both instances of locale @{term "vars"}. Hence we
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   106
inherit both variants of theorem @{text "foo"}: @{text "s\<langle>N := 2\<rangle>\<cdot>B =
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   107
s\<cdot>B"} as well as @{text "s\<langle>n := 2\<rangle>\<cdot>b = s\<cdot>b"}. These are immediate
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   108
consequences of the locale interpretation action.
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   109
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   110
The declarations for syntax and the distinctness theorems also observe
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   111
the morphisms generated by the locale package due to the renaming
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   112
@{term "n = N"}: *}
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   113
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   114
lemma (in varsX) foo: "s\<langle>N := 2\<rangle>\<cdot>x = s\<cdot>x" by simp
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   115
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   116
text {* To assure scalability towards many distinct names, the
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   117
distinctness predicate is refined to operate on balanced trees. Thus
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   118
we get logarithmic certificates for the distinctness of two names by
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   119
the distinctness of the paths in the tree. Asked for the distinctness
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   120
of two names, our tool produces the paths of the variables in the tree
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   121
(this is implemented in SML, outside the logic) and returns a
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   122
certificate corresponding to the different paths.  Merging state
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   123
spaces requires to prove that the combined distinctness assumption
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   124
implies the distinctness assumptions of the components.  Such a proof
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   125
is of the order $m \cdot \log n$, where $n$ and $m$ are the number of
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   126
nodes in the larger and smaller tree, respectively.*}
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   127
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   128
text {* We continue with more examples. *}
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   129
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   130
statespace 'a foo = 
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   131
  f::"nat\<Rightarrow>nat"
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   132
  a::int
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   133
  b::nat
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   134
  c::'a
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   135
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   136
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   137
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   138
lemma (in foo) foo1: 
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   139
  shows "s\<langle>a := i\<rangle>\<cdot>a = i"
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   140
  by simp
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   141
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   142
lemma (in foo) foo2: 
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   143
  shows "(s\<langle>a:=i\<rangle>)\<cdot>a = i"
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   144
  by simp
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   145
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   146
lemma (in foo) foo3: 
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   147
  shows "(s\<langle>a:=i\<rangle>)\<cdot>b = s\<cdot>b"
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   148
  by simp
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   149
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   150
lemma (in foo) foo4: 
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   151
  shows "(s\<langle>a:=i,b:=j,c:=k,a:=x\<rangle>) = (s\<langle>b:=j,c:=k,a:=x\<rangle>)"
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   152
  by simp
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   153
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   154
statespace bar =
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   155
  b::bool
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   156
  c::string
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   157
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   158
lemma (in bar) bar1: 
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   159
  shows "(s\<langle>b:=True\<rangle>)\<cdot>c = s\<cdot>c"
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   160
  by simp
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   161
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   162
text {* You can define a derived state space by inheriting existing state spaces, renaming
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   163
of components if you like, and by declaring new components.
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   164
*}
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   165
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   166
statespace ('a,'b) loo = 'a foo + bar [b=B,c=C] +
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   167
  X::'b
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   168
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   169
lemma (in loo) loo1: 
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   170
  shows "s\<langle>a:=i\<rangle>\<cdot>B = s\<cdot>B"
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   171
proof -
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   172
  thm foo1
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   173
  txt {* The Lemma @{thm [source] foo1} from the parent state space 
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   174
         is also available here: \begin{center}@{thm foo1}\end{center}.*}
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   175
  have "s<a:=i>\<cdot>a = i"
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   176
    by (rule foo1)
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   177
  thm bar1
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   178
  txt {* Note the renaming of the parameters in Lemma @{thm [source] bar1}: 
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   179
         \begin{center}@{thm bar1}\end{center}.*}
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   180
  have "s<B:=True>\<cdot>C = s\<cdot>C"
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   181
    by (rule bar1)
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   182
  show ?thesis
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   183
    by simp
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   184
qed
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   185
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   186
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   187
statespace 'a dup = 'a foo [f=F, a=A] + 'a foo +
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   188
  x::int
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   189
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   190
lemma (in dup)
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   191
 shows "s<a := i>\<cdot>x = s\<cdot>x"
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   192
  by simp
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   193
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   194
lemma (in dup)
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   195
 shows "s<A := i>\<cdot>a = s\<cdot>a"
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   196
  by simp
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   197
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   198
lemma (in dup)
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   199
 shows "s<A := i>\<cdot>x = s\<cdot>x"
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   200
  by simp
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   201
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   202
29247
95d3a82857e5 adapted statespace module to new locales;
Norbert Schirmer <norbert.schirmer@web.de>
parents: 29235
diff changeset
   203
text {* Hmm, I hoped this would work now...*}
95d3a82857e5 adapted statespace module to new locales;
Norbert Schirmer <norbert.schirmer@web.de>
parents: 29235
diff changeset
   204
29248
f1f1bccf2fc5 Merged.
ballarin
parents: 29247
diff changeset
   205
(*
29247
95d3a82857e5 adapted statespace module to new locales;
Norbert Schirmer <norbert.schirmer@web.de>
parents: 29235
diff changeset
   206
locale fooX = foo +
95d3a82857e5 adapted statespace module to new locales;
Norbert Schirmer <norbert.schirmer@web.de>
parents: 29235
diff changeset
   207
 assumes "s<a:=i>\<cdot>b = k"
29248
f1f1bccf2fc5 Merged.
ballarin
parents: 29247
diff changeset
   208
*)
29247
95d3a82857e5 adapted statespace module to new locales;
Norbert Schirmer <norbert.schirmer@web.de>
parents: 29235
diff changeset
   209
95d3a82857e5 adapted statespace module to new locales;
Norbert Schirmer <norbert.schirmer@web.de>
parents: 29235
diff changeset
   210
(* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *)
25171
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   211
text {* There are known problems with syntax-declarations. They currently
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   212
only work, when the context is already built. Hopefully this will be 
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   213
implemented correctly in future Isabelle versions. *}
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   214
29247
95d3a82857e5 adapted statespace module to new locales;
Norbert Schirmer <norbert.schirmer@web.de>
parents: 29235
diff changeset
   215
(*
25171
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   216
lemma 
28611
983c1855a7af More occurrences of 'includes' gone.
ballarin
parents: 25171
diff changeset
   217
  assumes "foo f a b c p1 i1 p2 i2 p3 i3 p4 i4"
983c1855a7af More occurrences of 'includes' gone.
ballarin
parents: 25171
diff changeset
   218
  shows True
983c1855a7af More occurrences of 'includes' gone.
ballarin
parents: 25171
diff changeset
   219
proof
29247
95d3a82857e5 adapted statespace module to new locales;
Norbert Schirmer <norbert.schirmer@web.de>
parents: 29235
diff changeset
   220
  interpret foo [f a b c p1 i1 p2 i2 p3 i3 p4 i4] by fact
25171
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   221
  term "s<a := i>\<cdot>a = i"
28611
983c1855a7af More occurrences of 'includes' gone.
ballarin
parents: 25171
diff changeset
   222
qed
29247
95d3a82857e5 adapted statespace module to new locales;
Norbert Schirmer <norbert.schirmer@web.de>
parents: 29235
diff changeset
   223
*)
25171
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   224
(*
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   225
lemma 
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   226
  includes foo
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   227
  shows "s<a := i>\<cdot>a = i"
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   228
*)
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   229
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   230
text {* It would be nice to have nested state spaces. This is
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   231
logically no problem. From the locale-implementation side this may be
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   232
something like an 'includes' into a locale. When there is a more
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   233
elaborate locale infrastructure in place this may be an easy exercise.
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   234
*} 
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   235
4a9c25bffc9b added Statespace library
schirmer
parents:
diff changeset
   236
end