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