src/Doc/Locales/Examples.thy
author wenzelm
Sat, 05 Jan 2019 17:24:33 +0100
changeset 69597 ff784d5a5bfb
parent 69505 cc2d676d5395
child 76987 4c275405faae
permissions -rw-r--r--
isabelle update -u control_cartouches;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
     1
theory Examples
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
     2
imports Main
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
     3
begin
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
     4
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
     5
(*
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
     6
text {* The following presentation will use notation of
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
     7
  Isabelle's meta logic, hence a few sentences to explain this.
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
     8
  The logical
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
     9
  primitives are universal quantification (@{text "\<And>"}), entailment
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    10
  (@{text "\<Longrightarrow>"}) and equality (@{text "\<equiv>"}).  Variables (not bound
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    11
  variables) are sometimes preceded by a question mark.  The logic is
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    12
  typed.  Type variables are denoted by~@{text "'a"},~@{text "'b"}
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    13
  etc., and~@{text "\<Rightarrow>"} is the function type.  Double brackets~@{text
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    14
  "\<lbrakk>"} and~@{text "\<rbrakk>"} are used to abbreviate nested entailment.
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    15
*}
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    16
*)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    17
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
    18
section \<open>Introduction\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    19
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
    20
text \<open>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    21
  Locales are based on contexts.  A \emph{context} can be seen as a
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    22
  formula schema
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    23
\[
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
    24
  \<open>\<And>x\<^sub>1\<dots>x\<^sub>n. \<lbrakk> A\<^sub>1; \<dots> ;A\<^sub>m \<rbrakk> \<Longrightarrow> \<dots>\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    25
\]
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
    26
  where the variables~\<open>x\<^sub>1\<close>, \ldots,~\<open>x\<^sub>n\<close> are called
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
    27
  \emph{parameters} and the premises $\<open>A\<^sub>1\<close>, \ldots,~\<open>A\<^sub>m\<close>$ \emph{assumptions}.  A formula~\<open>C\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    28
  is a \emph{theorem} in the context if it is a conclusion
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    29
\[
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
    30
  \<open>\<And>x\<^sub>1\<dots>x\<^sub>n. \<lbrakk> A\<^sub>1; \<dots> ;A\<^sub>m \<rbrakk> \<Longrightarrow> C\<close>.
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    31
\]
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    32
  Isabelle/Isar's notion of context goes beyond this logical view.
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    33
  Its contexts record, in a consecutive order, proved
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    34
  conclusions along with \emph{attributes}, which can provide context
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    35
  specific configuration information for proof procedures and concrete
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    36
  syntax.  From a logical perspective, locales are just contexts that
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    37
  have been made persistent.  To the user, though, they provide
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    38
  powerful means for declaring and combining contexts, and for the
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    39
  reuse of theorems proved in these contexts.
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
    40
\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    41
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
    42
section \<open>Simple Locales\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    43
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
    44
text \<open>
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    45
  In its simplest form, a
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    46
  \emph{locale declaration} consists of a sequence of context elements
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    47
  declaring parameters (keyword \isakeyword{fixes}) and assumptions
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    48
  (keyword \isakeyword{assumes}).  The following is the specification of
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
    49
  partial orders, as locale \<open>partial_order\<close>.
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
    50
\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    51
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    52
  locale partial_order =
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    53
    fixes le :: "'a \<Rightarrow> 'a \<Rightarrow> bool" (infixl "\<sqsubseteq>" 50)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    54
    assumes refl [intro, simp]: "x \<sqsubseteq> x"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    55
      and anti_sym [intro]: "\<lbrakk> x \<sqsubseteq> y; y \<sqsubseteq> x \<rbrakk> \<Longrightarrow> x = y"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    56
      and trans [trans]: "\<lbrakk> x \<sqsubseteq> y; y \<sqsubseteq> z \<rbrakk> \<Longrightarrow> x \<sqsubseteq> z"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    57
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
    58
text (in partial_order) \<open>The parameter of this locale is~\<open>le\<close>,
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
    59
  which is a binary predicate with infix syntax~\<open>\<sqsubseteq>\<close>.  The
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    60
  parameter syntax is available in the subsequent
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    61
  assumptions, which are the familiar partial order axioms.
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
    62
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    63
  Isabelle recognises unbound names as free variables.  In locale
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
    64
  assumptions, these are implicitly universally quantified.  That is,
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
    65
  \<^term>\<open>\<lbrakk> x \<sqsubseteq> y; y \<sqsubseteq> z \<rbrakk> \<Longrightarrow> x \<sqsubseteq> z\<close> in fact means
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
    66
  \<^term>\<open>\<And>x y z. \<lbrakk> x \<sqsubseteq> y; y \<sqsubseteq> z \<rbrakk> \<Longrightarrow> x \<sqsubseteq> z\<close>.
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    67
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
    68
  Two commands are provided to inspect locales:
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
    69
  \isakeyword{print\_locales} lists the names of all locales of the
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
    70
  current theory; \isakeyword{print\_locale}~$n$ prints the parameters
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    71
  and assumptions of locale $n$; the variation \isakeyword{print\_locale!}~$n$
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    72
  additionally outputs the conclusions that are stored in the locale.
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    73
  We may inspect the new locale
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
    74
  by issuing \isakeyword{print\_locale!} \<^term>\<open>partial_order\<close>.  The output
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
    75
  is the following list of context elements.
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    76
\begin{small}
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
    77
\begin{alltt}
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
    78
  \isakeyword{fixes} le :: "'a \(\Rightarrow\) 'a \(\Rightarrow\)  bool" (\isakeyword{infixl} "\(\sqsubseteq\)" 50)
67398
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents: 63724
diff changeset
    79
  \isakeyword{assumes} "partial_order (\(\sqsubseteq\))"
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
    80
  \isakeyword{notes} assumption
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
    81
    refl [intro, simp] = `?x \(\sqsubseteq\) ?x`
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
    82
    \isakeyword{and}
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
    83
    anti_sym [intro] = `\(\isasymlbrakk\)?x \(\sqsubseteq\) ?y; ?y \(\sqsubseteq\) ?x\(\isasymrbrakk\) \(\Longrightarrow\) ?x = ?y`
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
    84
    \isakeyword{and}
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
    85
    trans [trans] = `\(\isasymlbrakk\)?x \(\sqsubseteq\) ?y; ?y \(\sqsubseteq\) ?z\(\isasymrbrakk\) \(\Longrightarrow\) ?x \(\sqsubseteq\) ?z`
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
    86
\end{alltt}
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    87
\end{small}
51799
8fcf6e32544e Clarified confusing sentence in locales tutorial.
ballarin
parents: 48985
diff changeset
    88
8fcf6e32544e Clarified confusing sentence in locales tutorial.
ballarin
parents: 48985
diff changeset
    89
  This differs from the declaration.  The assumptions have turned into
8fcf6e32544e Clarified confusing sentence in locales tutorial.
ballarin
parents: 48985
diff changeset
    90
  conclusions, denoted by the keyword \isakeyword{notes}.  Also,
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
    91
  there is only one assumption, namely \<^term>\<open>partial_order le\<close>.
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
    92
  The locale declaration has introduced the predicate \<^term>\<open>partial_order\<close> to the theory.  This predicate is the
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    93
  \emph{locale predicate}.  Its definition may be inspected by
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    94
  issuing \isakeyword{thm} @{thm [source] partial_order_def}.
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
    95
  @{thm [display, indent=2] partial_order_def}
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    96
  In our example, this is a unary predicate over the parameter of the
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    97
  locale.  It is equivalent to the original assumptions, which have
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
    98
  been turned into conclusions and are
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
    99
  available as theorems in the context of the locale.  The names and
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   100
  attributes from the locale declaration are associated to these
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   101
  theorems and are effective in the context of the locale.
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   102
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   103
  Each conclusion has a \emph{foundational theorem} as counterpart
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   104
  in the theory.  Technically, this is simply the theorem composed
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   105
  of context and conclusion.  For the transitivity theorem, this is
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   106
  @{thm [source] partial_order.trans}:
37206
7f2a6f3143ad Typo in locales tutorial.
ballarin
parents: 37094
diff changeset
   107
  @{thm [display, indent=2] partial_order.trans}
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   108
\<close>
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   109
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   110
subsection \<open>Targets: Extending Locales\<close>
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   111
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   112
text \<open>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   113
  The specification of a locale is fixed, but its list of conclusions
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   114
  may be extended through Isar commands that take a \emph{target} argument.
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   115
  In the following, \isakeyword{definition} and 
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   116
  \isakeyword{theorem} are illustrated.
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   117
  Table~\ref{tab:commands-with-target} lists Isar commands that accept
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   118
  a target.  Isar provides various ways of specifying the target.  A
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   119
  target for a single command may be indicated with keyword
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   120
  \isakeyword{in} in the following way:
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   121
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   122
\begin{table}
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   123
\hrule
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   124
\vspace{2ex}
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   125
\begin{center}
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   126
\begin{tabular}{ll}
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   127
  \isakeyword{definition} & definition through an equation \\
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   128
  \isakeyword{inductive} & inductive definition \\
30826
a53f4872400e Improvements to the text.
ballarin
parents: 30780
diff changeset
   129
  \isakeyword{primrec} & primitive recursion \\
a53f4872400e Improvements to the text.
ballarin
parents: 30780
diff changeset
   130
  \isakeyword{fun}, \isakeyword{function} & general recursion \\
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   131
  \isakeyword{abbreviation} & syntactic abbreviation \\
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   132
  \isakeyword{theorem}, etc.\ & theorem statement with proof \\
30826
a53f4872400e Improvements to the text.
ballarin
parents: 30780
diff changeset
   133
  \isakeyword{theorems}, etc.\ & redeclaration of theorems \\
a53f4872400e Improvements to the text.
ballarin
parents: 30780
diff changeset
   134
  \isakeyword{text}, etc.\ & document markup
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   135
\end{tabular}
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   136
\end{center}
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   137
\hrule
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   138
\caption{Isar commands that accept a target.}
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   139
\label{tab:commands-with-target}
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   140
\end{table}
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   141
\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   142
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   143
  definition (in partial_order)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   144
    less :: "'a \<Rightarrow> 'a \<Rightarrow> bool" (infixl "\<sqsubset>" 50)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   145
    where "(x \<sqsubset> y) = (x \<sqsubseteq> y \<and> x \<noteq> y)"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   146
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   147
text (in partial_order) \<open>The strict order \<open>less\<close> with infix
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   148
  syntax~\<open>\<sqsubset>\<close> is
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   149
  defined in terms of the locale parameter~\<open>le\<close> and the general
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   150
  equality of the object logic we work in.  The definition generates a
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   151
  \emph{foundational constant}
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
   152
  \<^term>\<open>partial_order.less\<close> with definition @{thm [source]
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   153
  partial_order.less_def}:
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   154
  @{thm [display, indent=2] partial_order.less_def}
30826
a53f4872400e Improvements to the text.
ballarin
parents: 30780
diff changeset
   155
  At the same time, the locale is extended by syntax transformations
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   156
  hiding this construction in the context of the locale.  Here, the
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   157
  abbreviation \<open>less\<close> is available for
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   158
  \<open>partial_order.less le\<close>, and it is printed
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   159
  and parsed as infix~\<open>\<sqsubset>\<close>.  Finally, the conclusion @{thm [source]
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   160
  less_def} is added to the locale:
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   161
  @{thm [display, indent=2] less_def}
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   162
\<close>
30393
aa6f42252bf6 replaced old locale option by proper "text (in locale)";
wenzelm
parents: 29567
diff changeset
   163
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   164
text \<open>The treatment of theorem statements is more straightforward.
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   165
  As an example, here is the derivation of a transitivity law for the
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   166
  strict order relation.\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   167
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   168
  lemma (in partial_order) less_le_trans [trans]:
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   169
    "\<lbrakk> x \<sqsubset> y; y \<sqsubseteq> z \<rbrakk> \<Longrightarrow> x \<sqsubset> z"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   170
    unfolding %visible less_def by %visible (blast intro: trans)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   171
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   172
text \<open>In the context of the proof, conclusions of the
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   173
  locale may be used like theorems.  Attributes are effective: \<open>anti_sym\<close> was
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   174
  declared as introduction rule, hence it is in the context's set of
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   175
  rules used by the classical reasoner by default.\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   176
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   177
subsection \<open>Context Blocks\<close>
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   178
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   179
text \<open>When working with locales, sequences of commands with the same
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   180
  target are frequent.  A block of commands, delimited by
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   181
  \isakeyword{begin} and \isakeyword{end}, makes a theory-like style
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   182
  of working possible.  All commands inside the block refer to the
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   183
  same target.  A block may immediately follow a locale
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   184
  declaration, which makes that locale the target.  Alternatively the
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   185
  target for a block may be given with the \isakeyword{context}
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   186
  command.
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   187
30580
cc5a55d7a5be Updated chapters 1-5 to locale reimplementation.
ballarin
parents: 30393
diff changeset
   188
  This style of working is illustrated in the block below, where
cc5a55d7a5be Updated chapters 1-5 to locale reimplementation.
ballarin
parents: 30393
diff changeset
   189
  notions of infimum and supremum for partial orders are introduced,
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   190
  together with theorems about their uniqueness.\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   191
46855
f72a2bedd7a9 more precise alignment of begin/end, proof/qed;
wenzelm
parents: 37206
diff changeset
   192
  context partial_order
f72a2bedd7a9 more precise alignment of begin/end, proof/qed;
wenzelm
parents: 37206
diff changeset
   193
  begin
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   194
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   195
  definition
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   196
    is_inf where "is_inf x y i =
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   197
      (i \<sqsubseteq> x \<and> i \<sqsubseteq> y \<and> (\<forall>z. z \<sqsubseteq> x \<and> z \<sqsubseteq> y \<longrightarrow> z \<sqsubseteq> i))"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   198
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   199
  definition
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   200
    is_sup where "is_sup x y s =
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   201
      (x \<sqsubseteq> s \<and> y \<sqsubseteq> s \<and> (\<forall>z. x \<sqsubseteq> z \<and> y \<sqsubseteq> z \<longrightarrow> s \<sqsubseteq> z))"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   202
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   203
  lemma %invisible is_infI [intro?]: "i \<sqsubseteq> x \<Longrightarrow> i \<sqsubseteq> y \<Longrightarrow>
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   204
      (\<And>z. z \<sqsubseteq> x \<Longrightarrow> z \<sqsubseteq> y \<Longrightarrow> z \<sqsubseteq> i) \<Longrightarrow> is_inf x y i"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   205
    by (unfold is_inf_def) blast
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   206
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   207
  lemma %invisible is_inf_lower [elim?]:
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   208
    "is_inf x y i \<Longrightarrow> (i \<sqsubseteq> x \<Longrightarrow> i \<sqsubseteq> y \<Longrightarrow> C) \<Longrightarrow> C"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   209
    by (unfold is_inf_def) blast
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   210
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   211
  lemma %invisible is_inf_greatest [elim?]:
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   212
      "is_inf x y i \<Longrightarrow> z \<sqsubseteq> x \<Longrightarrow> z \<sqsubseteq> y \<Longrightarrow> z \<sqsubseteq> i"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   213
    by (unfold is_inf_def) blast
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   214
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   215
  theorem is_inf_uniq: "\<lbrakk>is_inf x y i; is_inf x y i'\<rbrakk> \<Longrightarrow> i = i'"
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   216
    proof -
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   217
    assume inf: "is_inf x y i"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   218
    assume inf': "is_inf x y i'"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   219
    show ?thesis
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   220
    proof (rule anti_sym)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   221
      from inf' show "i \<sqsubseteq> i'"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   222
      proof (rule is_inf_greatest)
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   223
        from inf show "i \<sqsubseteq> x" ..
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   224
        from inf show "i \<sqsubseteq> y" ..
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   225
      qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   226
      from inf show "i' \<sqsubseteq> i"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   227
      proof (rule is_inf_greatest)
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   228
        from inf' show "i' \<sqsubseteq> x" ..
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   229
        from inf' show "i' \<sqsubseteq> y" ..
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   230
      qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   231
    qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   232
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   233
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   234
  theorem %invisible is_inf_related [elim?]: "x \<sqsubseteq> y \<Longrightarrow> is_inf x y x"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   235
  proof -
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   236
    assume "x \<sqsubseteq> y"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   237
    show ?thesis
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   238
    proof
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   239
      show "x \<sqsubseteq> x" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   240
      show "x \<sqsubseteq> y" by fact
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   241
      fix z assume "z \<sqsubseteq> x" and "z \<sqsubseteq> y" show "z \<sqsubseteq> x" by fact
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   242
    qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   243
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   244
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   245
  lemma %invisible is_supI [intro?]: "x \<sqsubseteq> s \<Longrightarrow> y \<sqsubseteq> s \<Longrightarrow>
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   246
      (\<And>z. x \<sqsubseteq> z \<Longrightarrow> y \<sqsubseteq> z \<Longrightarrow> s \<sqsubseteq> z) \<Longrightarrow> is_sup x y s"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   247
    by (unfold is_sup_def) blast
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   248
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   249
  lemma %invisible is_sup_least [elim?]:
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   250
      "is_sup x y s \<Longrightarrow> x \<sqsubseteq> z \<Longrightarrow> y \<sqsubseteq> z \<Longrightarrow> s \<sqsubseteq> z"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   251
    by (unfold is_sup_def) blast
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   252
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   253
  lemma %invisible is_sup_upper [elim?]:
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   254
      "is_sup x y s \<Longrightarrow> (x \<sqsubseteq> s \<Longrightarrow> y \<sqsubseteq> s \<Longrightarrow> C) \<Longrightarrow> C"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   255
    by (unfold is_sup_def) blast
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   256
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   257
  theorem is_sup_uniq: "\<lbrakk>is_sup x y s; is_sup x y s'\<rbrakk> \<Longrightarrow> s = s'"
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   258
    proof -
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   259
    assume sup: "is_sup x y s"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   260
    assume sup': "is_sup x y s'"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   261
    show ?thesis
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   262
    proof (rule anti_sym)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   263
      from sup show "s \<sqsubseteq> s'"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   264
      proof (rule is_sup_least)
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   265
        from sup' show "x \<sqsubseteq> s'" ..
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   266
        from sup' show "y \<sqsubseteq> s'" ..
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   267
      qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   268
      from sup' show "s' \<sqsubseteq> s"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   269
      proof (rule is_sup_least)
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   270
        from sup show "x \<sqsubseteq> s" ..
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   271
        from sup show "y \<sqsubseteq> s" ..
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   272
      qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   273
    qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   274
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   275
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   276
  theorem %invisible is_sup_related [elim?]: "x \<sqsubseteq> y \<Longrightarrow> is_sup x y y"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   277
  proof -
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   278
    assume "x \<sqsubseteq> y"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   279
    show ?thesis
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   280
    proof
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   281
      show "x \<sqsubseteq> y" by fact
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   282
      show "y \<sqsubseteq> y" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   283
      fix z assume "x \<sqsubseteq> z" and "y \<sqsubseteq> z"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   284
      show "y \<sqsubseteq> z" by fact
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   285
    qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   286
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   287
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   288
  end
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   289
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   290
text \<open>The syntax of the locale commands discussed in this tutorial is
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   291
  shown in Table~\ref{tab:commands}.  The grammar is complete with the
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   292
  exception of the context elements \isakeyword{constrains} and
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   293
  \isakeyword{defines}, which are provided for backward
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   294
  compatibility.  See the Isabelle/Isar Reference
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   295
  Manual @{cite IsarRef} for full documentation.\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   296
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   297
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   298
section \<open>Import \label{sec:import}\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   299
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   300
text \<open>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   301
  Algebraic structures are commonly defined by adding operations and
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   302
  properties to existing structures.  For example, partial orders
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   303
  are extended to lattices and total orders.  Lattices are extended to
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   304
  distributive lattices.\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   305
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   306
text \<open>
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   307
  With locales, this kind of inheritance is achieved through
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   308
  \emph{import} of locales.  The import part of a locale declaration,
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   309
  if present, precedes the context elements.  Here is an example,
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   310
  where partial orders are extended to lattices.
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   311
\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   312
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   313
  locale lattice = partial_order +
30580
cc5a55d7a5be Updated chapters 1-5 to locale reimplementation.
ballarin
parents: 30393
diff changeset
   314
    assumes ex_inf: "\<exists>inf. is_inf x y inf"
cc5a55d7a5be Updated chapters 1-5 to locale reimplementation.
ballarin
parents: 30393
diff changeset
   315
      and ex_sup: "\<exists>sup. is_sup x y sup"
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   316
  begin
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   317
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   318
text \<open>These assumptions refer to the predicates for infimum
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   319
  and supremum defined for \<open>partial_order\<close> in the previous
63724
e7df93d4d9b8 Back to original example theorem.
ballarin
parents: 61419
diff changeset
   320
  section.  We now introduce the notions of meet and join,
e7df93d4d9b8 Back to original example theorem.
ballarin
parents: 61419
diff changeset
   321
  together with an example theorem.\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   322
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   323
  definition
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   324
    meet (infixl "\<sqinter>" 70) where "x \<sqinter> y = (THE inf. is_inf x y inf)"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   325
  definition
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   326
    join (infixl "\<squnion>" 65) where "x \<squnion> y = (THE sup. is_sup x y sup)"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   327
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   328
  lemma %invisible meet_equality [elim?]: "is_inf x y i \<Longrightarrow> x \<sqinter> y = i"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   329
  proof (unfold meet_def)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   330
    assume "is_inf x y i"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   331
    then show "(THE i. is_inf x y i) = i"
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   332
      by (rule the_equality) (rule is_inf_uniq [OF _ \<open>is_inf x y i\<close>])
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   333
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   334
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   335
  lemma %invisible meetI [intro?]:
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   336
      "i \<sqsubseteq> x \<Longrightarrow> i \<sqsubseteq> y \<Longrightarrow> (\<And>z. z \<sqsubseteq> x \<Longrightarrow> z \<sqsubseteq> y \<Longrightarrow> z \<sqsubseteq> i) \<Longrightarrow> x \<sqinter> y = i"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   337
    by (rule meet_equality, rule is_infI) blast+
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   338
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   339
  lemma %invisible is_inf_meet [intro?]: "is_inf x y (x \<sqinter> y)"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   340
  proof (unfold meet_def)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   341
    from ex_inf obtain i where "is_inf x y i" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   342
    then show "is_inf x y (THE i. is_inf x y i)"
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   343
      by (rule theI) (rule is_inf_uniq [OF _ \<open>is_inf x y i\<close>])
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   344
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   345
63724
e7df93d4d9b8 Back to original example theorem.
ballarin
parents: 61419
diff changeset
   346
  lemma meet_left(*<*)[intro?](*>*): "x \<sqinter> y \<sqsubseteq> x"
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   347
    by (rule is_inf_lower) (rule is_inf_meet)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   348
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   349
  lemma %invisible meet_right [intro?]:
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   350
    "x \<sqinter> y \<sqsubseteq> y"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   351
    by (rule is_inf_lower) (rule is_inf_meet)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   352
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   353
  lemma %invisible meet_le [intro?]:
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   354
    "\<lbrakk> z \<sqsubseteq> x; z \<sqsubseteq> y \<rbrakk> \<Longrightarrow> z \<sqsubseteq> x \<sqinter> y"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   355
    by (rule is_inf_greatest) (rule is_inf_meet)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   356
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   357
  lemma %invisible join_equality [elim?]: "is_sup x y s \<Longrightarrow> x \<squnion> y = s"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   358
  proof (unfold join_def)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   359
    assume "is_sup x y s"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   360
    then show "(THE s. is_sup x y s) = s"
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   361
      by (rule the_equality) (rule is_sup_uniq [OF _ \<open>is_sup x y s\<close>])
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   362
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   363
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   364
  lemma %invisible joinI [intro?]: "x \<sqsubseteq> s \<Longrightarrow> y \<sqsubseteq> s \<Longrightarrow>
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   365
      (\<And>z. x \<sqsubseteq> z \<Longrightarrow> y \<sqsubseteq> z \<Longrightarrow> s \<sqsubseteq> z) \<Longrightarrow> x \<squnion> y = s"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   366
    by (rule join_equality, rule is_supI) blast+
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   367
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   368
  lemma %invisible is_sup_join [intro?]: "is_sup x y (x \<squnion> y)"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   369
  proof (unfold join_def)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   370
    from ex_sup obtain s where "is_sup x y s" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   371
    then show "is_sup x y (THE s. is_sup x y s)"
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   372
      by (rule theI) (rule is_sup_uniq [OF _ \<open>is_sup x y s\<close>])
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   373
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   374
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   375
  lemma %invisible join_left [intro?]:
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   376
    "x \<sqsubseteq> x \<squnion> y"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   377
    by (rule is_sup_upper) (rule is_sup_join)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   378
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   379
  lemma %invisible join_right [intro?]:
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   380
    "y \<sqsubseteq> x \<squnion> y"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   381
    by (rule is_sup_upper) (rule is_sup_join)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   382
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   383
  lemma %invisible join_le [intro?]:
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   384
    "\<lbrakk> x \<sqsubseteq> z; y \<sqsubseteq> z \<rbrakk> \<Longrightarrow> x \<squnion> y \<sqsubseteq> z"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   385
    by (rule is_sup_least) (rule is_sup_join)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   386
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   387
  theorem %invisible meet_assoc: "(x \<sqinter> y) \<sqinter> z = x \<sqinter> (y \<sqinter> z)"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   388
  proof (rule meetI)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   389
    show "x \<sqinter> (y \<sqinter> z) \<sqsubseteq> x \<sqinter> y"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   390
    proof
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   391
      show "x \<sqinter> (y \<sqinter> z) \<sqsubseteq> x" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   392
      show "x \<sqinter> (y \<sqinter> z) \<sqsubseteq> y"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   393
      proof -
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   394
        have "x \<sqinter> (y \<sqinter> z) \<sqsubseteq> y \<sqinter> z" ..
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   395
        also have "\<dots> \<sqsubseteq> y" ..
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   396
        finally show ?thesis .
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   397
      qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   398
    qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   399
    show "x \<sqinter> (y \<sqinter> z) \<sqsubseteq> z"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   400
    proof -
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   401
      have "x \<sqinter> (y \<sqinter> z) \<sqsubseteq> y \<sqinter> z" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   402
      also have "\<dots> \<sqsubseteq> z" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   403
      finally show ?thesis .
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   404
    qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   405
    fix w assume "w \<sqsubseteq> x \<sqinter> y" and "w \<sqsubseteq> z"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   406
    show "w \<sqsubseteq> x \<sqinter> (y \<sqinter> z)"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   407
    proof
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   408
      show "w \<sqsubseteq> x"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   409
      proof -
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   410
        have "w \<sqsubseteq> x \<sqinter> y" by fact
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   411
        also have "\<dots> \<sqsubseteq> x" ..
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   412
        finally show ?thesis .
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   413
      qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   414
      show "w \<sqsubseteq> y \<sqinter> z"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   415
      proof
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   416
        show "w \<sqsubseteq> y"
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   417
        proof -
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   418
          have "w \<sqsubseteq> x \<sqinter> y" by fact
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   419
          also have "\<dots> \<sqsubseteq> y" ..
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   420
          finally show ?thesis .
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   421
        qed
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   422
        show "w \<sqsubseteq> z" by fact
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   423
      qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   424
    qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   425
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   426
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   427
  theorem %invisible meet_commute: "x \<sqinter> y = y \<sqinter> x"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   428
  proof (rule meetI)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   429
    show "y \<sqinter> x \<sqsubseteq> x" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   430
    show "y \<sqinter> x \<sqsubseteq> y" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   431
    fix z assume "z \<sqsubseteq> y" and "z \<sqsubseteq> x"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   432
    then show "z \<sqsubseteq> y \<sqinter> x" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   433
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   434
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   435
  theorem %invisible meet_join_absorb: "x \<sqinter> (x \<squnion> y) = x"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   436
  proof (rule meetI)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   437
    show "x \<sqsubseteq> x" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   438
    show "x \<sqsubseteq> x \<squnion> y" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   439
    fix z assume "z \<sqsubseteq> x" and "z \<sqsubseteq> x \<squnion> y"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   440
    show "z \<sqsubseteq> x" by fact
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   441
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   442
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   443
  theorem %invisible join_assoc: "(x \<squnion> y) \<squnion> z = x \<squnion> (y \<squnion> z)"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   444
  proof (rule joinI)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   445
    show "x \<squnion> y \<sqsubseteq> x \<squnion> (y \<squnion> z)"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   446
    proof
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   447
      show "x \<sqsubseteq> x \<squnion> (y \<squnion> z)" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   448
      show "y \<sqsubseteq> x \<squnion> (y \<squnion> z)"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   449
      proof -
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   450
        have "y \<sqsubseteq> y \<squnion> z" ..
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   451
        also have "... \<sqsubseteq> x \<squnion> (y \<squnion> z)" ..
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   452
        finally show ?thesis .
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   453
      qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   454
    qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   455
    show "z \<sqsubseteq> x \<squnion> (y \<squnion> z)"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   456
    proof -
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   457
      have "z \<sqsubseteq> y \<squnion> z"  ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   458
      also have "... \<sqsubseteq> x \<squnion> (y \<squnion> z)" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   459
      finally show ?thesis .
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   460
    qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   461
    fix w assume "x \<squnion> y \<sqsubseteq> w" and "z \<sqsubseteq> w"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   462
    show "x \<squnion> (y \<squnion> z) \<sqsubseteq> w"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   463
    proof
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   464
      show "x \<sqsubseteq> w"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   465
      proof -
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   466
        have "x \<sqsubseteq> x \<squnion> y" ..
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   467
        also have "\<dots> \<sqsubseteq> w" by fact
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   468
        finally show ?thesis .
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   469
      qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   470
      show "y \<squnion> z \<sqsubseteq> w"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   471
      proof
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   472
        show "y \<sqsubseteq> w"
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   473
        proof -
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   474
          have "y \<sqsubseteq> x \<squnion> y" ..
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   475
          also have "... \<sqsubseteq> w" by fact
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   476
          finally show ?thesis .
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   477
        qed
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   478
        show "z \<sqsubseteq> w" by fact
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   479
      qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   480
    qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   481
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   482
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   483
  theorem %invisible join_commute: "x \<squnion> y = y \<squnion> x"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   484
  proof (rule joinI)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   485
    show "x \<sqsubseteq> y \<squnion> x" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   486
    show "y \<sqsubseteq> y \<squnion> x" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   487
    fix z assume "y \<sqsubseteq> z" and "x \<sqsubseteq> z"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   488
    then show "y \<squnion> x \<sqsubseteq> z" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   489
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   490
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   491
  theorem %invisible join_meet_absorb: "x \<squnion> (x \<sqinter> y) = x"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   492
  proof (rule joinI)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   493
    show "x \<sqsubseteq> x" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   494
    show "x \<sqinter> y \<sqsubseteq> x" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   495
    fix z assume "x \<sqsubseteq> z" and "x \<sqinter> y \<sqsubseteq> z"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   496
    show "x \<sqsubseteq> z" by fact
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   497
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   498
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   499
  theorem %invisible meet_idem: "x \<sqinter> x = x"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   500
  proof -
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   501
    have "x \<sqinter> (x \<squnion> (x \<sqinter> x)) = x" by (rule meet_join_absorb)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   502
    also have "x \<squnion> (x \<sqinter> x) = x" by (rule join_meet_absorb)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   503
    finally show ?thesis .
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   504
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   505
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   506
  theorem %invisible meet_related [elim?]: "x \<sqsubseteq> y \<Longrightarrow> x \<sqinter> y = x"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   507
  proof (rule meetI)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   508
    assume "x \<sqsubseteq> y"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   509
    show "x \<sqsubseteq> x" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   510
    show "x \<sqsubseteq> y" by fact
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   511
    fix z assume "z \<sqsubseteq> x" and "z \<sqsubseteq> y"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   512
    show "z \<sqsubseteq> x" by fact
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   513
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   514
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   515
  theorem %invisible meet_related2 [elim?]: "y \<sqsubseteq> x \<Longrightarrow> x \<sqinter> y = y"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   516
    by (drule meet_related) (simp add: meet_commute)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   517
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   518
  theorem %invisible join_related [elim?]: "x \<sqsubseteq> y \<Longrightarrow> x \<squnion> y = y"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   519
  proof (rule joinI)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   520
    assume "x \<sqsubseteq> y"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   521
    show "y \<sqsubseteq> y" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   522
    show "x \<sqsubseteq> y" by fact
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   523
    fix z assume "x \<sqsubseteq> z" and "y \<sqsubseteq> z"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   524
    show "y \<sqsubseteq> z" by fact
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   525
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   526
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   527
  theorem %invisible join_related2 [elim?]: "y \<sqsubseteq> x \<Longrightarrow> x \<squnion> y = x"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   528
    by (drule join_related) (simp add: join_commute)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   529
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   530
  theorem %invisible meet_connection: "(x \<sqsubseteq> y) = (x \<sqinter> y = x)"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   531
  proof
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   532
    assume "x \<sqsubseteq> y"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   533
    then have "is_inf x y x" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   534
    then show "x \<sqinter> y = x" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   535
  next
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   536
    have "x \<sqinter> y \<sqsubseteq> y" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   537
    also assume "x \<sqinter> y = x"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   538
    finally show "x \<sqsubseteq> y" .
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   539
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   540
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   541
  theorem %invisible join_connection: "(x \<sqsubseteq> y) = (x \<squnion> y = y)"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   542
  proof
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   543
    assume "x \<sqsubseteq> y"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   544
    then have "is_sup x y y" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   545
    then show "x \<squnion> y = y" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   546
  next
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   547
    have "x \<sqsubseteq> x \<squnion> y" ..
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   548
    also assume "x \<squnion> y = y"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   549
    finally show "x \<sqsubseteq> y" .
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   550
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   551
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   552
  theorem %invisible meet_connection2: "(x \<sqsubseteq> y) = (y \<sqinter> x = x)"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   553
    using meet_commute meet_connection by simp
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   554
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   555
  theorem %invisible join_connection2: "(x \<sqsubseteq> y) = (x \<squnion> y = y)"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   556
    using join_commute join_connection by simp
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   557
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   558
  text %invisible \<open>Naming according to Jacobson I, p.\ 459.\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   559
  lemmas %invisible L1 = join_commute meet_commute
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   560
  lemmas %invisible L2 = join_assoc meet_assoc
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   561
  (* lemmas L3 = join_idem meet_idem *)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   562
  lemmas %invisible L4 = join_meet_absorb meet_join_absorb
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   563
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   564
  end
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   565
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   566
text \<open>Locales for total orders and distributive lattices follow to
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   567
  establish a sufficiently rich landscape of locales for
63724
e7df93d4d9b8 Back to original example theorem.
ballarin
parents: 61419
diff changeset
   568
  further examples in this tutorial.\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   569
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   570
  locale total_order = partial_order +
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   571
    assumes total: "x \<sqsubseteq> y \<or> y \<sqsubseteq> x"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   572
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   573
  lemma (in total_order) less_total: "x \<sqsubset> y \<or> x = y \<or> y \<sqsubset> x"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   574
    using total
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   575
    by (unfold less_def) blast
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   576
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   577
  locale distrib_lattice = lattice +
30580
cc5a55d7a5be Updated chapters 1-5 to locale reimplementation.
ballarin
parents: 30393
diff changeset
   578
    assumes meet_distr: "x \<sqinter> (y \<squnion> z) = x \<sqinter> y \<squnion> x \<sqinter> z"
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   579
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   580
  lemma (in distrib_lattice) join_distr:
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   581
    "x \<squnion> (y \<sqinter> z) = (x \<squnion> y) \<sqinter> (x \<squnion> z)"  (* txt {* Jacobson I, p.\ 462 *} *)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   582
    proof -
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   583
    have "x \<squnion> (y \<sqinter> z) = (x \<squnion> (x \<sqinter> z)) \<squnion> (y \<sqinter> z)" by (simp add: L4)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   584
    also have "... = x \<squnion> ((x \<sqinter> z) \<squnion> (y \<sqinter> z))" by (simp add: L2)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   585
    also have "... = x \<squnion> ((x \<squnion> y) \<sqinter> z)" by (simp add: L1 meet_distr)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   586
    also have "... = ((x \<squnion> y) \<sqinter> x) \<squnion> ((x \<squnion> y) \<sqinter> z)" by (simp add: L1 L4)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   587
    also have "... = (x \<squnion> y) \<sqinter> (x \<squnion> z)" by (simp add: meet_distr)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   588
    finally show ?thesis .
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   589
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   590
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   591
text \<open>
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   592
  The locale hierarchy obtained through these declarations is shown in
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   593
  Figure~\ref{fig:lattices}(a).
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   594
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   595
\begin{figure}
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   596
\hrule \vspace{2ex}
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   597
\begin{center}
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   598
\subfigure[Declared hierarchy]{
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   599
\begin{tikzpicture}
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   600
  \node (po) at (0,0) {\<open>partial_order\<close>};
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   601
  \node (lat) at (-1.5,-1) {\<open>lattice\<close>};
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   602
  \node (dlat) at (-1.5,-2) {\<open>distrib_lattice\<close>};
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   603
  \node (to) at (1.5,-1) {\<open>total_order\<close>};
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   604
  \draw (po) -- (lat);
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   605
  \draw (lat) -- (dlat);
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   606
  \draw (po) -- (to);
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   607
%  \draw[->, dashed] (lat) -- (to);
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   608
\end{tikzpicture}
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   609
} \\
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   610
\subfigure[Total orders are lattices]{
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   611
\begin{tikzpicture}
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   612
  \node (po) at (0,0) {\<open>partial_order\<close>};
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   613
  \node (lat) at (0,-1) {\<open>lattice\<close>};
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   614
  \node (dlat) at (-1.5,-2) {\<open>distrib_lattice\<close>};
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   615
  \node (to) at (1.5,-2) {\<open>total_order\<close>};
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   616
  \draw (po) -- (lat);
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   617
  \draw (lat) -- (dlat);
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   618
  \draw (lat) -- (to);
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   619
%  \draw[->, dashed] (dlat) -- (to);
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   620
\end{tikzpicture}
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   621
} \quad
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   622
\subfigure[Total orders are distributive lattices]{
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   623
\begin{tikzpicture}
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   624
  \node (po) at (0,0) {\<open>partial_order\<close>};
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   625
  \node (lat) at (0,-1) {\<open>lattice\<close>};
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   626
  \node (dlat) at (0,-2) {\<open>distrib_lattice\<close>};
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   627
  \node (to) at (0,-3) {\<open>total_order\<close>};
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   628
  \draw (po) -- (lat);
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   629
  \draw (lat) -- (dlat);
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   630
  \draw (dlat) -- (to);
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   631
\end{tikzpicture}
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   632
}
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   633
\end{center}
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   634
\hrule
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   635
\caption{Hierarchy of Lattice Locales.}
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   636
\label{fig:lattices}
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   637
\end{figure}
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   638
\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   639
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   640
section \<open>Changing the Locale Hierarchy
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   641
  \label{sec:changing-the-hierarchy}\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   642
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   643
text \<open>
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   644
  Locales enable to prove theorems abstractly, relative to
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   645
  sets of assumptions.  These theorems can then be used in other
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   646
  contexts where the assumptions themselves, or
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   647
  instances of the assumptions, are theorems.  This form of theorem
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   648
  reuse is called \emph{interpretation}.  Locales generalise
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   649
  interpretation from theorems to conclusions, enabling the reuse of
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   650
  definitions and other constructs that are not part of the
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   651
  specifications of the locales.
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   652
37094
2e93e29a809a Typo fixed.
webertj
parents: 36691
diff changeset
   653
  The first form of interpretation we will consider in this tutorial
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   654
  is provided by the \isakeyword{sublocale} command.  It enables to
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   655
  modify the import hierarchy to reflect the \emph{logical} relation
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   656
  between locales.
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   657
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   658
  Consider the locale hierarchy from Figure~\ref{fig:lattices}(a).
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   659
  Total orders are lattices, although this is not reflected here, and
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   660
  definitions, theorems and other conclusions
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 69505
diff changeset
   661
  from \<^term>\<open>lattice\<close> are not available in \<^term>\<open>total_order\<close>.  To
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   662
  obtain the situation in Figure~\ref{fig:lattices}(b), it is
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   663
  sufficient to add the conclusions of the latter locale to the former.
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   664
  The \isakeyword{sublocale} command does exactly this.
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   665
  The declaration \isakeyword{sublocale} $l_1
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   666
  \subseteq l_2$ causes locale $l_2$ to be \emph{interpreted} in the
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   667
  context of $l_1$.  This means that all conclusions of $l_2$ are made
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   668
  available in $l_1$.
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   669
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   670
  Of course, the change of hierarchy must be supported by a theorem
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   671
  that reflects, in our example, that total orders are indeed
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   672
  lattices.  Therefore the \isakeyword{sublocale} command generates a
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   673
  goal, which must be discharged by the user.  This is illustrated in
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   674
  the following paragraphs.  First the sublocale relation is stated.
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   675
\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   676
29566
937baa077df2 Fixed tutorial to compile with new locales; grammar of new locale commands.
ballarin
parents: 27375
diff changeset
   677
  sublocale %visible total_order \<subseteq> lattice
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   678
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   679
txt \<open>\normalsize
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   680
  This enters the context of locale \<open>total_order\<close>, in
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   681
  which the goal @{subgoals [display]} must be shown.
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   682
  Now the
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   683
  locale predicate needs to be unfolded --- for example, using its
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   684
  definition or by introduction rules
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   685
  provided by the locale package.  For automation, the locale package
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   686
  provides the methods \<open>intro_locales\<close> and \<open>unfold_locales\<close>.  They are aware of the
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   687
  current context and dependencies between locales and automatically
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   688
  discharge goals implied by these.  While \<open>unfold_locales\<close>
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   689
  always unfolds locale predicates to assumptions, \<open>intro_locales\<close> only unfolds definitions along the locale
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   690
  hierarchy, leaving a goal consisting of predicates defined by the
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   691
  locale package.  Occasionally the latter is of advantage since the goal
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   692
  is smaller.
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   693
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   694
  For the current goal, we would like to get hold of
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   695
  the assumptions of \<open>lattice\<close>, which need to be shown, hence
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   696
  \<open>unfold_locales\<close> is appropriate.\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   697
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   698
  proof unfold_locales
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   699
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   700
txt \<open>\normalsize
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   701
  Since the fact that both lattices and total orders are partial
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   702
  orders is already reflected in the locale hierarchy, the assumptions
69505
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   703
  of \<open>partial_order\<close> are discharged automatically, and only the
cc2d676d5395 isabelle update_cartouches -t;
wenzelm
parents: 67398
diff changeset
   704
  assumptions introduced in \<open>lattice\<close> remain as subgoals
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   705
  @{subgoals [display]}
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   706
  The proof for the first subgoal is obtained by constructing an
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   707
  infimum, whose existence is implied by totality.\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   708
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   709
    fix x y
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   710
    from total have "is_inf x y (if x \<sqsubseteq> y then x else y)"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   711
      by (auto simp: is_inf_def)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   712
    then show "\<exists>inf. is_inf x y inf" ..
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   713
txt \<open>\normalsize
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   714
   The proof for the second subgoal is analogous and not
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   715
  reproduced here.\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   716
  next %invisible
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   717
    fix x y
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   718
    from total have "is_sup x y (if x \<sqsubseteq> y then y else x)"
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   719
      by (auto simp: is_sup_def)
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   720
    then show "\<exists>sup. is_sup x y sup" .. qed %visible
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   721
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   722
text \<open>Similarly, we may establish that total orders are distributive
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   723
  lattices with a second \isakeyword{sublocale} statement.\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   724
29566
937baa077df2 Fixed tutorial to compile with new locales; grammar of new locale commands.
ballarin
parents: 27375
diff changeset
   725
  sublocale total_order \<subseteq> distrib_lattice
32983
a6914429005b Finished revisions of locales tutorial.
ballarin
parents: 32981
diff changeset
   726
    proof unfold_locales
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   727
    fix %"proof" x y z
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   728
    show "x \<sqinter> (y \<squnion> z) = x \<sqinter> y \<squnion> x \<sqinter> z" (is "?l = ?r")
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   729
      txt \<open>Jacobson I, p.\ 462\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   730
    proof -
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   731
      { assume c: "y \<sqsubseteq> x" "z \<sqsubseteq> x"
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   732
        from c have "?l = y \<squnion> z"
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   733
          by (metis c join_connection2 join_related2 meet_related2 total)
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   734
        also from c have "... = ?r" by (metis meet_related2)
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   735
        finally have "?l = ?r" . }
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   736
      moreover
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   737
      { assume c: "x \<sqsubseteq> y \<or> x \<sqsubseteq> z"
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   738
        from c have "?l = x"
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   739
          by (metis join_connection2 join_related2 meet_connection total trans)
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   740
        also from c have "... = ?r"
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   741
          by (metis join_commute join_related2 meet_connection meet_related2 total)
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30826
diff changeset
   742
        finally have "?l = ?r" . }
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   743
      moreover note total
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   744
      ultimately show ?thesis by blast
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   745
    qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   746
  qed
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   747
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   748
text \<open>The locale hierarchy is now as shown in
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   749
  Figure~\ref{fig:lattices}(c).\<close>
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   750
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   751
text \<open>
32981
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   752
  Locale interpretation is \emph{dynamic}.  The statement
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   753
  \isakeyword{sublocale} $l_1 \subseteq l_2$ will not just add the
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   754
  current conclusions of $l_2$ to $l_1$.  Rather the dependency is
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   755
  stored, and conclusions that will be
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   756
  added to $l_2$ in future are automatically propagated to $l_1$.
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   757
  The sublocale relation is transitive --- that is, propagation takes
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   758
  effect along chains of sublocales.  Even cycles in the sublocale relation are
0114e04a0d64 Save current state of locales tutorial.
ballarin
parents: 30826
diff changeset
   759
  supported, as long as these cycles do not lead to infinite chains.
58620
7435b6a3f72e more antiquotations;
wenzelm
parents: 51799
diff changeset
   760
  Details are discussed in the technical report @{cite Ballarin2006a}.
61419
3c3f8b182e4b isabelle update_cartouches;
wenzelm
parents: 58620
diff changeset
   761
  See also Section~\ref{sec:infinite-chains} of this tutorial.\<close>
27063
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   762
d1d35284542f New version covering interpretation.
ballarin
parents:
diff changeset
   763
end