# HG changeset patch # User ballarin # Date 1238340306 -7200 # Node ID 38e477e8524fc55702120b4f33cdaf05840940dd # Parent 7fb900cad123e3975db20039a33ae728816fd300 In interpretation: equations are not propagated through the hierarchy automatically. diff -r 7fb900cad123 -r 38e477e8524f doc-src/Locales/Locales/Examples3.thy --- a/doc-src/Locales/Locales/Examples3.thy Sun Mar 29 17:22:17 2009 +0200 +++ b/doc-src/Locales/Locales/Examples3.thy Sun Mar 29 17:25:06 2009 +0200 @@ -15,7 +15,7 @@ interpretation. The third revision of the example illustrates this. *} interpretation %visible nat: partial_order "op \ :: nat \ nat \ bool" - where "partial_order.less op \ (x::nat) y = (x < y)" + where nat_less_eq: "partial_order.less op \ (x::nat) y = (x < y)" proof - show "partial_order (op \ :: nat \ nat \ bool)" by unfold_locales auto @@ -49,10 +49,11 @@ elaborate interpretation proof. *} interpretation %visible nat: lattice "op \ :: nat \ nat \ bool" - where "lattice.meet op \ (x::nat) y = min x y" - and "lattice.join op \ (x::nat) y = max x y" + where "partial_order.less op \ (x::nat) y = (x < y)" + and nat_meet_eq: "lattice.meet op \ (x::nat) y = min x y" + and nat_join_eq: "lattice.join op \ (x::nat) y = max x y" proof - - show "lattice (op \ :: nat \ nat \ bool)" + show lattice: "lattice (op \ :: nat \ nat \ bool)" txt {* We have already shown that this is a partial order, *} apply unfold_locales txt {* hence only the lattice axioms remain to be shown: @{subgoals @@ -61,20 +62,41 @@ txt {* the goals become @{subgoals [display]} which can be solved by Presburger arithmetic. *} by arith+ - txt {* In order to show the equations, we put ourselves in a + txt {* For the first of the equations, we refer to the theorem + generated in the previous interpretation. *} + show "partial_order.less op \ (x::nat) y = (x < y)" + by (rule nat_less_eq) + txt {* In order to show the remaining equations, we put ourselves in a situation where the lattice theorems can be used in a convenient way. *} - then interpret nat: lattice "op \ :: nat \ nat \ bool" . + from lattice interpret nat: lattice "op \ :: nat \ nat \ bool" . show "lattice.meet op \ (x::nat) y = min x y" by (bestsimp simp: nat.meet_def nat.is_inf_def) show "lattice.join op \ (x::nat) y = max x y" by (bestsimp simp: nat.join_def nat.is_sup_def) qed -text {* That the relation @{text \} is a total order completes this - sequence of interpretations. *} +text {* The interpretation that the relation @{text \} is a total + order follows next. *} interpretation %visible nat: total_order "op \ :: nat \ nat \ bool" - by unfold_locales arith + where "partial_order.less op \ (x::nat) y = (x < y)" + and "lattice.meet op \ (x::nat) y = min x y" + and "lattice.join op \ (x::nat) y = max x y" +proof - + show "total_order (op \ :: nat \ nat \ bool)" by unfold_locales arith +qed (rule nat_less_eq nat_meet_eq nat_join_eq)+ + +text {* Note that since the locale hierarchy reflects that total + orders are distributive lattices, an explicit interpretation of + distributive lattices for the order relation on natural numbers is + only necessary for mapping the definitions to the right operators on + @{typ nat}. *} + +interpretation %visible nat: distrib_lattice "op \ :: nat \ nat \ bool" + where "partial_order.less op \ (x::nat) y = (x < y)" + and "lattice.meet op \ (x::nat) y = min x y" + and "lattice.join op \ (x::nat) y = max x y" + by unfold_locales [1] (rule nat_less_eq nat_meet_eq nat_join_eq)+ text {* Theorems that are available in the theory at this point are shown in Table~\ref{tab:nat-lattice}. @@ -98,29 +120,6 @@ \caption{Interpreted theorems for @{text \} on the natural numbers.} \label{tab:nat-lattice} \end{table} - - Note that since the locale hierarchy reflects that total orders are - distributive lattices, an explicit interpretation of distributive - lattices for the order relation on natural numbers is not neccessary. - - Why not push this idea further and just give the last interpretation - as a single interpretation instead of the sequence of three? The - reasons for this are twofold: -\begin{itemize} -\item - Often it is easier to work in an incremental fashion, because later - interpretations require theorems provided by earlier - interpretations. -\item - Assume that a definition is made in some locale $l_1$, and that $l_2$ - imports $l_1$. Let an equation for the definition be - proved in an interpretation of $l_2$. The equation will be unfolded - in interpretations of theorems added to $l_2$ or below in the import - hierarchy, but not for theorems added above $l_2$. - Hence, an equation interpreting a definition should always be given in - an interpretation of the locale where the definition is made, not in - an interpretation of a locale further down the hierarchy. -\end{itemize} *} @@ -131,7 +130,7 @@ incrementally. *} interpretation nat_dvd: partial_order "op dvd :: nat \ nat \ bool" - where "partial_order.less op dvd (x::nat) y = (x dvd y \ x \ y)" + where nat_dvd_less_eq: "partial_order.less op dvd (x::nat) y = (x dvd y \ x \ y)" proof - show "partial_order (op dvd :: nat \ nat \ bool)" by unfold_locales (auto simp: dvd_def) @@ -147,10 +146,9 @@ x \ y"}. *} interpretation nat_dvd: lattice "op dvd :: nat \ nat \ bool" - where nat_dvd_meet_eq: - "lattice.meet op dvd = gcd" - and nat_dvd_join_eq: - "lattice.join op dvd = lcm" + where "partial_order.less op dvd (x::nat) y = (x dvd y \ x \ y)" + and nat_dvd_meet_eq: "lattice.meet op dvd = gcd" + and nat_dvd_join_eq: "lattice.join op dvd = lcm" proof - show "lattice (op dvd :: nat \ nat \ bool)" apply unfold_locales @@ -161,6 +159,8 @@ apply (auto intro: lcm_dvd1 lcm_dvd2 lcm_least) done then interpret nat_dvd: lattice "op dvd :: nat \ nat \ bool" . + show "partial_order.less op dvd (x::nat) y = (x dvd y \ x \ y)" + by (rule nat_dvd_less_eq) show "lattice.meet op dvd = gcd" apply (auto simp add: expand_fun_eq) apply (unfold nat_dvd.meet_def) @@ -201,11 +201,18 @@ interpretation %visible nat_dvd: distrib_lattice "op dvd :: nat \ nat \ bool" - apply unfold_locales - txt {* @{subgoals [display]} *} - apply (unfold nat_dvd_meet_eq nat_dvd_join_eq) - txt {* @{subgoals [display]} *} - apply (rule gcd_lcm_distr) done + where "partial_order.less op dvd (x::nat) y = (x dvd y \ x \ y)" + and "lattice.meet op dvd = gcd" + and "lattice.join op dvd = lcm" +proof - + show "distrib_lattice (op dvd :: nat \ nat \ bool)" + apply unfold_locales + txt {* @{subgoals [display]} *} + apply (unfold nat_dvd_meet_eq nat_dvd_join_eq) + txt {* @{subgoals [display]} *} + apply (rule gcd_lcm_distr) + done +qed (rule nat_dvd_less_eq nat_dvd_meet_eq nat_dvd_join_eq)+ text {* Theorems that are available in the theory after these diff -r 7fb900cad123 -r 38e477e8524f doc-src/Locales/Locales/document/Examples3.tex --- a/doc-src/Locales/Locales/document/Examples3.tex Sun Mar 29 17:22:17 2009 +0200 +++ b/doc-src/Locales/Locales/document/Examples3.tex Sun Mar 29 17:25:06 2009 +0200 @@ -42,7 +42,7 @@ \isatagvisible \isacommand{interpretation}\isamarkupfalse% \ nat{\isacharcolon}\ partial{\isacharunderscore}order\ {\isachardoublequoteopen}op\ {\isasymle}\ {\isacharcolon}{\isacharcolon}\ nat\ {\isasymRightarrow}\ nat\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\isanewline -\ \ \isakeyword{where}\ {\isachardoublequoteopen}partial{\isacharunderscore}order{\isachardot}less\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ {\isacharparenleft}x\ {\isacharless}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline +\ \ \isakeyword{where}\ nat{\isacharunderscore}less{\isacharunderscore}eq{\isacharcolon}\ {\isachardoublequoteopen}partial{\isacharunderscore}order{\isachardot}less\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ {\isacharparenleft}x\ {\isacharless}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline \isacommand{proof}\isamarkupfalse% \ {\isacharminus}\isanewline \ \ \isacommand{show}\isamarkupfalse% @@ -105,12 +105,13 @@ \isatagvisible \isacommand{interpretation}\isamarkupfalse% \ nat{\isacharcolon}\ lattice\ {\isachardoublequoteopen}op\ {\isasymle}\ {\isacharcolon}{\isacharcolon}\ nat\ {\isasymRightarrow}\ nat\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\isanewline -\ \ \isakeyword{where}\ {\isachardoublequoteopen}lattice{\isachardot}meet\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ min\ x\ y{\isachardoublequoteclose}\isanewline -\ \ \ \ \isakeyword{and}\ {\isachardoublequoteopen}lattice{\isachardot}join\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ max\ x\ y{\isachardoublequoteclose}\isanewline +\ \ \isakeyword{where}\ {\isachardoublequoteopen}partial{\isacharunderscore}order{\isachardot}less\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ {\isacharparenleft}x\ {\isacharless}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline +\ \ \ \ \isakeyword{and}\ nat{\isacharunderscore}meet{\isacharunderscore}eq{\isacharcolon}\ {\isachardoublequoteopen}lattice{\isachardot}meet\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ min\ x\ y{\isachardoublequoteclose}\isanewline +\ \ \ \ \isakeyword{and}\ nat{\isacharunderscore}join{\isacharunderscore}eq{\isacharcolon}\ {\isachardoublequoteopen}lattice{\isachardot}join\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ max\ x\ y{\isachardoublequoteclose}\isanewline \isacommand{proof}\isamarkupfalse% \ {\isacharminus}\isanewline \ \ \isacommand{show}\isamarkupfalse% -\ {\isachardoublequoteopen}lattice\ {\isacharparenleft}op\ {\isasymle}\ {\isacharcolon}{\isacharcolon}\ nat\ {\isasymRightarrow}\ nat\ {\isasymRightarrow}\ bool{\isacharparenright}{\isachardoublequoteclose}% +\ lattice{\isacharcolon}\ {\isachardoublequoteopen}lattice\ {\isacharparenleft}op\ {\isasymle}\ {\isacharcolon}{\isacharcolon}\ nat\ {\isasymRightarrow}\ nat\ {\isasymRightarrow}\ bool{\isacharparenright}{\isachardoublequoteclose}% \begin{isamarkuptxt}% We have already shown that this is a partial order,% \end{isamarkuptxt}% @@ -137,12 +138,21 @@ \ \ \ \ \isacommand{by}\isamarkupfalse% \ arith{\isacharplus}% \begin{isamarkuptxt}% -In order to show the equations, we put ourselves in a +For the first of the equations, we refer to the theorem + generated in the previous interpretation.% +\end{isamarkuptxt}% +\isamarkuptrue% +\ \ \isacommand{show}\isamarkupfalse% +\ {\isachardoublequoteopen}partial{\isacharunderscore}order{\isachardot}less\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ {\isacharparenleft}x\ {\isacharless}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline +\ \ \ \ \isacommand{by}\isamarkupfalse% +\ {\isacharparenleft}rule\ nat{\isacharunderscore}less{\isacharunderscore}eq{\isacharparenright}% +\begin{isamarkuptxt}% +In order to show the remaining equations, we put ourselves in a situation where the lattice theorems can be used in a convenient way.% \end{isamarkuptxt}% \isamarkuptrue% -\ \ \isacommand{then}\isamarkupfalse% -\ \isacommand{interpret}\isamarkupfalse% +\ \ \isacommand{from}\isamarkupfalse% +\ lattice\ \isacommand{interpret}\isamarkupfalse% \ nat{\isacharcolon}\ lattice\ {\isachardoublequoteopen}op\ {\isasymle}\ {\isacharcolon}{\isacharcolon}\ nat\ {\isasymRightarrow}\ nat\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\ \isacommand{{\isachardot}}\isamarkupfalse% \isanewline \ \ \isacommand{show}\isamarkupfalse% @@ -163,8 +173,8 @@ \endisadelimvisible % \begin{isamarkuptext}% -That the relation \isa{{\isasymle}} is a total order completes this - sequence of interpretations.% +The interpretation that the relation \isa{{\isasymle}} is a total + order follows next.% \end{isamarkuptext}% \isamarkuptrue% % @@ -175,8 +185,44 @@ \isatagvisible \isacommand{interpretation}\isamarkupfalse% \ nat{\isacharcolon}\ total{\isacharunderscore}order\ {\isachardoublequoteopen}op\ {\isasymle}\ {\isacharcolon}{\isacharcolon}\ nat\ {\isasymRightarrow}\ nat\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\isanewline +\ \ \isakeyword{where}\ {\isachardoublequoteopen}partial{\isacharunderscore}order{\isachardot}less\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ {\isacharparenleft}x\ {\isacharless}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline +\ \ \ \ \isakeyword{and}\ {\isachardoublequoteopen}lattice{\isachardot}meet\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ min\ x\ y{\isachardoublequoteclose}\isanewline +\ \ \ \ \isakeyword{and}\ {\isachardoublequoteopen}lattice{\isachardot}join\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ max\ x\ y{\isachardoublequoteclose}\isanewline +\isacommand{proof}\isamarkupfalse% +\ {\isacharminus}\isanewline +\ \ \isacommand{show}\isamarkupfalse% +\ {\isachardoublequoteopen}total{\isacharunderscore}order\ {\isacharparenleft}op\ {\isasymle}\ {\isacharcolon}{\isacharcolon}\ nat\ {\isasymRightarrow}\ nat\ {\isasymRightarrow}\ bool{\isacharparenright}{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse% +\ unfold{\isacharunderscore}locales\ arith\isanewline +\isacommand{qed}\isamarkupfalse% +\ {\isacharparenleft}rule\ nat{\isacharunderscore}less{\isacharunderscore}eq\ nat{\isacharunderscore}meet{\isacharunderscore}eq\ nat{\isacharunderscore}join{\isacharunderscore}eq{\isacharparenright}{\isacharplus}% +\endisatagvisible +{\isafoldvisible}% +% +\isadelimvisible +% +\endisadelimvisible +% +\begin{isamarkuptext}% +Note that since the locale hierarchy reflects that total + orders are distributive lattices, an explicit interpretation of + distributive lattices for the order relation on natural numbers is + only necessary for mapping the definitions to the right operators on + \isa{nat}.% +\end{isamarkuptext}% +\isamarkuptrue% +% +\isadelimvisible +% +\endisadelimvisible +% +\isatagvisible +\isacommand{interpretation}\isamarkupfalse% +\ nat{\isacharcolon}\ distrib{\isacharunderscore}lattice\ {\isachardoublequoteopen}op\ {\isasymle}\ {\isacharcolon}{\isacharcolon}\ nat\ {\isasymRightarrow}\ nat\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\isanewline +\ \ \isakeyword{where}\ {\isachardoublequoteopen}partial{\isacharunderscore}order{\isachardot}less\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ {\isacharparenleft}x\ {\isacharless}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline +\ \ \ \ \isakeyword{and}\ {\isachardoublequoteopen}lattice{\isachardot}meet\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ min\ x\ y{\isachardoublequoteclose}\isanewline +\ \ \ \ \isakeyword{and}\ {\isachardoublequoteopen}lattice{\isachardot}join\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ max\ x\ y{\isachardoublequoteclose}\isanewline \ \ \isacommand{by}\isamarkupfalse% -\ unfold{\isacharunderscore}locales\ arith% +\ unfold{\isacharunderscore}locales\ {\isacharbrackleft}{\isadigit{1}}{\isacharbrackright}\ {\isacharparenleft}rule\ nat{\isacharunderscore}less{\isacharunderscore}eq\ nat{\isacharunderscore}meet{\isacharunderscore}eq\ nat{\isacharunderscore}join{\isacharunderscore}eq{\isacharparenright}{\isacharplus}% \endisatagvisible {\isafoldvisible}% % @@ -198,38 +244,15 @@ \isa{nat{\isachardot}meet{\isacharunderscore}left} from locale \isa{lattice}: \\ \quad \isa{min\ {\isacharquery}x\ {\isacharquery}y\ {\isasymle}\ {\isacharquery}x} \\ \isa{nat{\isachardot}join{\isacharunderscore}distr} from locale \isa{distrib{\isacharunderscore}lattice}: \\ - \quad \isa{lattice{\isachardot}join\ op\ {\isasymle}\ {\isacharquery}x\ {\isacharparenleft}lattice{\isachardot}meet\ op\ {\isasymle}\ {\isacharquery}y\ {\isacharquery}z{\isacharparenright}\ {\isacharequal}\ lattice{\isachardot}meet\ op\ {\isasymle}\ {\isacharparenleft}lattice{\isachardot}join\ op\ {\isasymle}\ {\isacharquery}x\ {\isacharquery}y{\isacharparenright}\ {\isacharparenleft}lattice{\isachardot}join\ op\ {\isasymle}\ {\isacharquery}x\ {\isacharquery}z{\isacharparenright}} \\ + \quad \isa{max\ {\isacharquery}x\ {\isacharparenleft}min\ {\isacharquery}y\ {\isacharquery}z{\isacharparenright}\ {\isacharequal}\ min\ {\isacharparenleft}max\ {\isacharquery}x\ {\isacharquery}y{\isacharparenright}\ {\isacharparenleft}max\ {\isacharquery}x\ {\isacharquery}z{\isacharparenright}} \\ \isa{nat{\isachardot}less{\isacharunderscore}total} from locale \isa{total{\isacharunderscore}order}: \\ - \quad \isa{partial{\isacharunderscore}order{\isachardot}less\ op\ {\isasymle}\ {\isacharquery}x\ {\isacharquery}y\ {\isasymor}\ {\isacharquery}x\ {\isacharequal}\ {\isacharquery}y\ {\isasymor}\ partial{\isacharunderscore}order{\isachardot}less\ op\ {\isasymle}\ {\isacharquery}y\ {\isacharquery}x} + \quad \isa{{\isacharquery}x\ {\isacharless}\ {\isacharquery}y\ {\isasymor}\ {\isacharquery}x\ {\isacharequal}\ {\isacharquery}y\ {\isasymor}\ {\isacharquery}y\ {\isacharless}\ {\isacharquery}x} \end{tabular} \end{center} \hrule \caption{Interpreted theorems for \isa{{\isasymle}} on the natural numbers.} \label{tab:nat-lattice} -\end{table} - - Note that since the locale hierarchy reflects that total orders are - distributive lattices, an explicit interpretation of distributive - lattices for the order relation on natural numbers is not neccessary. - - Why not push this idea further and just give the last interpretation - as a single interpretation instead of the sequence of three? The - reasons for this are twofold: -\begin{itemize} -\item - Often it is easier to work in an incremental fashion, because later - interpretations require theorems provided by earlier - interpretations. -\item - Assume that a definition is made in some locale $l_1$, and that $l_2$ - imports $l_1$. Let an equation for the definition be - proved in an interpretation of $l_2$. The equation will be unfolded - in interpretations of theorems added to $l_2$ or below in the import - hierarchy, but not for theorems added above $l_2$. - Hence, an equation interpreting a definition should always be given in - an interpretation of the locale where the definition is made, not in - an interpretation of a locale further down the hierarchy. -\end{itemize}% +\end{table}% \end{isamarkuptext}% \isamarkuptrue% % @@ -245,7 +268,7 @@ \isamarkuptrue% \isacommand{interpretation}\isamarkupfalse% \ nat{\isacharunderscore}dvd{\isacharcolon}\ partial{\isacharunderscore}order\ {\isachardoublequoteopen}op\ dvd\ {\isacharcolon}{\isacharcolon}\ nat\ {\isasymRightarrow}\ nat\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\isanewline -\ \ \isakeyword{where}\ {\isachardoublequoteopen}partial{\isacharunderscore}order{\isachardot}less\ op\ dvd\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ {\isacharparenleft}x\ dvd\ y\ {\isasymand}\ x\ {\isasymnoteq}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline +\ \ \isakeyword{where}\ nat{\isacharunderscore}dvd{\isacharunderscore}less{\isacharunderscore}eq{\isacharcolon}\ {\isachardoublequoteopen}partial{\isacharunderscore}order{\isachardot}less\ op\ dvd\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ {\isacharparenleft}x\ dvd\ y\ {\isasymand}\ x\ {\isasymnoteq}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline % \isadelimproof % @@ -286,10 +309,9 @@ \isamarkuptrue% \isacommand{interpretation}\isamarkupfalse% \ nat{\isacharunderscore}dvd{\isacharcolon}\ lattice\ {\isachardoublequoteopen}op\ dvd\ {\isacharcolon}{\isacharcolon}\ nat\ {\isasymRightarrow}\ nat\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\isanewline -\ \ \isakeyword{where}\ nat{\isacharunderscore}dvd{\isacharunderscore}meet{\isacharunderscore}eq{\isacharcolon}\isanewline -\ \ \ \ \ \ {\isachardoublequoteopen}lattice{\isachardot}meet\ op\ dvd\ {\isacharequal}\ gcd{\isachardoublequoteclose}\isanewline -\ \ \ \ \isakeyword{and}\ nat{\isacharunderscore}dvd{\isacharunderscore}join{\isacharunderscore}eq{\isacharcolon}\isanewline -\ \ \ \ \ \ {\isachardoublequoteopen}lattice{\isachardot}join\ op\ dvd\ {\isacharequal}\ lcm{\isachardoublequoteclose}\isanewline +\ \ \isakeyword{where}\ {\isachardoublequoteopen}partial{\isacharunderscore}order{\isachardot}less\ op\ dvd\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ {\isacharparenleft}x\ dvd\ y\ {\isasymand}\ x\ {\isasymnoteq}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline +\ \ \ \ \isakeyword{and}\ nat{\isacharunderscore}dvd{\isacharunderscore}meet{\isacharunderscore}eq{\isacharcolon}\ {\isachardoublequoteopen}lattice{\isachardot}meet\ op\ dvd\ {\isacharequal}\ gcd{\isachardoublequoteclose}\isanewline +\ \ \ \ \isakeyword{and}\ nat{\isacharunderscore}dvd{\isacharunderscore}join{\isacharunderscore}eq{\isacharcolon}\ {\isachardoublequoteopen}lattice{\isachardot}join\ op\ dvd\ {\isacharequal}\ lcm{\isachardoublequoteclose}\isanewline % \isadelimproof % @@ -319,6 +341,10 @@ \ nat{\isacharunderscore}dvd{\isacharcolon}\ lattice\ {\isachardoublequoteopen}op\ dvd\ {\isacharcolon}{\isacharcolon}\ nat\ {\isasymRightarrow}\ nat\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\ \isacommand{{\isachardot}}\isamarkupfalse% \isanewline \ \ \isacommand{show}\isamarkupfalse% +\ {\isachardoublequoteopen}partial{\isacharunderscore}order{\isachardot}less\ op\ dvd\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ {\isacharparenleft}x\ dvd\ y\ {\isasymand}\ x\ {\isasymnoteq}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline +\ \ \ \ \isacommand{by}\isamarkupfalse% +\ {\isacharparenleft}rule\ nat{\isacharunderscore}dvd{\isacharunderscore}less{\isacharunderscore}eq{\isacharparenright}\isanewline +\ \ \isacommand{show}\isamarkupfalse% \ {\isachardoublequoteopen}lattice{\isachardot}meet\ op\ dvd\ {\isacharequal}\ gcd{\isachardoublequoteclose}\isanewline \ \ \ \ \isacommand{apply}\isamarkupfalse% \ {\isacharparenleft}auto\ simp\ add{\isacharcolon}\ expand{\isacharunderscore}fun{\isacharunderscore}eq{\isacharparenright}\isanewline @@ -383,7 +409,14 @@ \isacommand{interpretation}\isamarkupfalse% \ nat{\isacharunderscore}dvd{\isacharcolon}\isanewline \ \ distrib{\isacharunderscore}lattice\ {\isachardoublequoteopen}op\ dvd\ {\isacharcolon}{\isacharcolon}\ nat\ {\isasymRightarrow}\ nat\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\isanewline -\ \ \isacommand{apply}\isamarkupfalse% +\ \ \isakeyword{where}\ {\isachardoublequoteopen}partial{\isacharunderscore}order{\isachardot}less\ op\ dvd\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ {\isacharparenleft}x\ dvd\ y\ {\isasymand}\ x\ {\isasymnoteq}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline +\ \ \ \ \isakeyword{and}\ {\isachardoublequoteopen}lattice{\isachardot}meet\ op\ dvd\ {\isacharequal}\ gcd{\isachardoublequoteclose}\isanewline +\ \ \ \ \isakeyword{and}\ {\isachardoublequoteopen}lattice{\isachardot}join\ op\ dvd\ {\isacharequal}\ lcm{\isachardoublequoteclose}\isanewline +\isacommand{proof}\isamarkupfalse% +\ {\isacharminus}\isanewline +\ \ \isacommand{show}\isamarkupfalse% +\ {\isachardoublequoteopen}distrib{\isacharunderscore}lattice\ {\isacharparenleft}op\ dvd\ {\isacharcolon}{\isacharcolon}\ nat\ {\isasymRightarrow}\ nat\ {\isasymRightarrow}\ bool{\isacharparenright}{\isachardoublequoteclose}\isanewline +\ \ \ \ \isacommand{apply}\isamarkupfalse% \ unfold{\isacharunderscore}locales% \begin{isamarkuptxt}% \begin{isabelle}% @@ -394,7 +427,7 @@ \end{isabelle}% \end{isamarkuptxt}% \isamarkuptrue% -\ \ \isacommand{apply}\isamarkupfalse% +\ \ \ \ \isacommand{apply}\isamarkupfalse% \ {\isacharparenleft}unfold\ nat{\isacharunderscore}dvd{\isacharunderscore}meet{\isacharunderscore}eq\ nat{\isacharunderscore}dvd{\isacharunderscore}join{\isacharunderscore}eq{\isacharparenright}% \begin{isamarkuptxt}% \begin{isabelle}% @@ -402,9 +435,12 @@ \end{isabelle}% \end{isamarkuptxt}% \isamarkuptrue% -\ \ \isacommand{apply}\isamarkupfalse% -\ {\isacharparenleft}rule\ gcd{\isacharunderscore}lcm{\isacharunderscore}distr{\isacharparenright}\ \isacommand{done}\isamarkupfalse% -% +\ \ \ \ \isacommand{apply}\isamarkupfalse% +\ {\isacharparenleft}rule\ gcd{\isacharunderscore}lcm{\isacharunderscore}distr{\isacharparenright}\isanewline +\ \ \ \ \isacommand{done}\isamarkupfalse% +\isanewline +\isacommand{qed}\isamarkupfalse% +\ {\isacharparenleft}rule\ nat{\isacharunderscore}dvd{\isacharunderscore}less{\isacharunderscore}eq\ nat{\isacharunderscore}dvd{\isacharunderscore}meet{\isacharunderscore}eq\ nat{\isacharunderscore}dvd{\isacharunderscore}join{\isacharunderscore}eq{\isacharparenright}{\isacharplus}% \endisatagvisible {\isafoldvisible}% % @@ -426,7 +462,7 @@ \isa{nat{\isacharunderscore}dvd{\isachardot}meet{\isacharunderscore}left} from locale \isa{lattice}: \\ \quad \isa{gcd\ {\isacharquery}x\ {\isacharquery}y\ dvd\ {\isacharquery}x} \\ \isa{nat{\isacharunderscore}dvd{\isachardot}join{\isacharunderscore}distr} from locale \isa{distrib{\isacharunderscore}lattice}: \\ - \quad \isa{lattice{\isachardot}join\ op\ dvd\ {\isacharquery}x\ {\isacharparenleft}lattice{\isachardot}meet\ op\ dvd\ {\isacharquery}y\ {\isacharquery}z{\isacharparenright}\ {\isacharequal}\ lattice{\isachardot}meet\ op\ dvd\ {\isacharparenleft}lattice{\isachardot}join\ op\ dvd\ {\isacharquery}x\ {\isacharquery}y{\isacharparenright}\ {\isacharparenleft}lattice{\isachardot}join\ op\ dvd\ {\isacharquery}x\ {\isacharquery}z{\isacharparenright}} \\ + \quad \isa{lcm\ {\isacharquery}x\ {\isacharparenleft}gcd\ {\isacharquery}y\ {\isacharquery}z{\isacharparenright}\ {\isacharequal}\ gcd\ {\isacharparenleft}lcm\ {\isacharquery}x\ {\isacharquery}y{\isacharparenright}\ {\isacharparenleft}lcm\ {\isacharquery}x\ {\isacharquery}z{\isacharparenright}} \\ \end{tabular} \end{center} \hrule