Compare commits

...

3 Commits

Author SHA1 Message Date
Achim D. Brucker e59d6ad091 Renamed Word_Lib shipped by AutoCorres to Word_Lib_l4v to avoid a name clash with the AFP entry of same name. 2024-01-27 13:44:24 +00:00
Achim D. Brucker 99c79b50df
Ensure that umm_types.txt is saved relative to theory file. (#674)
Signed-off-by: Achim D. Brucker <adbrucker@0x5f.org>
2024-01-27 18:47:54 +11:00
Achim D. Brucker c71c31d163
If cpp_path is relative, make it relative to the current theory. (#676)
Signed-off-by: Achim D. Brucker <adbrucker@0x5f.org>
2024-01-27 18:41:18 +11:00
121 changed files with 138 additions and 127 deletions

2
ROOTS
View File

@ -11,7 +11,7 @@ lib/Basics
lib/Eisbach_Tools lib/Eisbach_Tools
lib/ML_Utils lib/ML_Utils
lib/Monads lib/Monads
lib/Word_Lib lib/Word_Lib_l4v
lib/sep_algebra lib/sep_algebra
lib/EVTutorial lib/EVTutorial
docs docs

View File

@ -6,7 +6,7 @@
*) *)
theory CLib theory CLib
imports Word_Lib.Many_More imports Word_Lib_l4v.Many_More
begin begin
lemma nat_diff_less: lemma nat_diff_less:

View File

@ -9,7 +9,7 @@ This session contains basic library theories that are needed in other sessions
of this repository, such as [Monads] or [CParser], but that we do not want to of this repository, such as [Monads] or [CParser], but that we do not want to
put into these sessions to avoid circular session dependencies. put into these sessions to avoid circular session dependencies.
Dependencies on `Word_Lib` and the Isabelle distribution (e.g. `HOL-Libary`) are Dependencies on `Word_Lib_l4v` and the Isabelle distribution (e.g. `HOL-Libary`) are
fine, but avoid introducing any further session dependencies. fine, but avoid introducing any further session dependencies.
[Monads]: ../Monads/ [Monads]: ../Monads/

View File

@ -6,7 +6,7 @@
chapter Lib chapter Lib
session Basics (lib) = Word_Lib + session Basics (lib) = Word_Lib_l4v +
theories theories
CLib CLib

View File

@ -22,7 +22,7 @@ imports
Monads.Monad_Lib Monads.Monad_Lib
Basics.CLib Basics.CLib
NICTATools NICTATools
"Word_Lib.WordSetup" "Word_Lib_l4v.WordSetup"
begin begin
(* FIXME: eliminate *) (* FIXME: eliminate *)

View File

@ -5,7 +5,7 @@
*) *)
theory More_Numeral_Type theory More_Numeral_Type
imports "Word_Lib.WordSetup" imports "Word_Lib_l4v.WordSetup"
begin begin
(* This theory provides additional setup for numeral types, which should probably go into (* This theory provides additional setup for numeral types, which should probably go into

View File

@ -18,7 +18,7 @@ imports
Oblivious Oblivious
Injection_Handler Injection_Handler
Monads.Nondet_While_Loop_Rules_Completeness Monads.Nondet_While_Loop_Rules_Completeness
"Word_Lib.Distinct_Prop" (* for distinct_tuple_helper *) "Word_Lib_l4v.Distinct_Prop" (* for distinct_tuple_helper *)
Monads.Reader_Option_VCG Monads.Reader_Option_VCG
begin begin

View File

@ -6,7 +6,7 @@
chapter Lib chapter Lib
session Lib (lib) = Word_Lib + session Lib (lib) = Word_Lib_l4v +
sessions sessions
"HOL-Library" "HOL-Library"
Basics Basics

View File

@ -5,7 +5,7 @@
*) *)
theory WordSetup (* part of non-AFP Word_Lib *) theory WordSetup (* part of non-AFP Word_Lib_l4v *)
imports imports
Word_Lemmas_64_Internal Word_Lemmas_64_Internal
Distinct_Prop Distinct_Prop

View File

@ -5,7 +5,7 @@
*) *)
theory WordSetup (* part of non-AFP Word_Lib *) theory WordSetup (* part of non-AFP Word_Lib_l4v *)
imports imports
Word_Lemmas_32_Internal Word_Lemmas_32_Internal
Distinct_Prop Distinct_Prop

View File

@ -5,7 +5,7 @@
*) *)
theory WordSetup (* part of non-AFP Word_Lib *) theory WordSetup (* part of non-AFP Word_Lib_l4v *)
imports imports
Word_Lemmas_32_Internal Word_Lemmas_32_Internal
Distinct_Prop Distinct_Prop

View File

@ -8,10 +8,10 @@ section \<open>Bitwise Operations on integers\<close>
theory Bits_Int theory Bits_Int
imports imports
"Word_Lib.Most_significant_bit" "Word_Lib_l4v.Most_significant_bit"
"Word_Lib.Least_significant_bit" "Word_Lib_l4v.Least_significant_bit"
"Word_Lib.Generic_set_bit" "Word_Lib_l4v.Generic_set_bit"
"Word_Lib.Bit_Comprehension" "Word_Lib_l4v.Bit_Comprehension"
begin begin
subsection \<open>Implicit bit representation of \<^typ>\<open>int\<close>\<close> subsection \<open>Implicit bit representation of \<^typ>\<open>int\<close>\<close>

View File

@ -6,7 +6,7 @@
section "Distinct Proposition" section "Distinct Proposition"
theory Distinct_Prop (* part of non-AFP Word_Lib *) theory Distinct_Prop (* part of non-AFP Word_Lib_l4v *)
imports imports
Many_More Many_More
"HOL-Library.Prefix_Order" "HOL-Library.Prefix_Order"

View File

@ -198,35 +198,35 @@ text \<open>
\<^descr>[Syntax] \<^descr>[Syntax]
\<^descr>[\<^theory>\<open>Word_Lib.Syntax_Bundles\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Syntax_Bundles\<close>]
Bundles to provide alternative syntax for various bit operations. Bundles to provide alternative syntax for various bit operations.
\<^descr>[\<^theory>\<open>Word_Lib.Hex_Words\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Hex_Words\<close>]
Printing word numerals as hexadecimal numerals. Printing word numerals as hexadecimal numerals.
\<^descr>[\<^theory>\<open>Word_Lib.Type_Syntax\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Type_Syntax\<close>]
Pretty type-sensitive syntax for cast operations. Pretty type-sensitive syntax for cast operations.
\<^descr>[\<^theory>\<open>Word_Lib.Word_Syntax\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Word_Syntax\<close>]
Specific ASCII syntax for prominent bit operations on word. Specific ASCII syntax for prominent bit operations on word.
\<^descr>[Proof tools] \<^descr>[Proof tools]
\<^descr>[\<^theory>\<open>Word_Lib.Norm_Words\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Norm_Words\<close>]
Rewriting word numerals to normal forms. Rewriting word numerals to normal forms.
\<^descr>[\<^theory>\<open>Word_Lib.Bitwise\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Bitwise\<close>]
Method @{method word_bitwise} decomposes word equalities and inequalities into bit propositions. Method @{method word_bitwise} decomposes word equalities and inequalities into bit propositions.
\<^descr>[\<^theory>\<open>Word_Lib.Bitwise_Signed\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Bitwise_Signed\<close>]
Method @{method word_bitwise_signed} decomposes word equalities and inequalities into bit propositions. Method @{method word_bitwise_signed} decomposes word equalities and inequalities into bit propositions.
\<^descr>[\<^theory>\<open>Word_Lib.Word_EqI\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Word_EqI\<close>]
Method @{method word_eqI_solve} decomposes word equalities and inequalities into bit propositions. Method @{method word_eqI_solve} decomposes word equalities and inequalities into bit propositions.
\<^descr>[Operations] \<^descr>[Operations]
\<^descr>[\<^theory>\<open>Word_Lib.Signed_Division_Word\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Signed_Division_Word\<close>]
Signed division on word: Signed division on word:
@ -234,16 +234,16 @@ text \<open>
\<^item> @{term [source] \<open>(smod) :: 'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word\<close>} \<^item> @{term [source] \<open>(smod) :: 'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word\<close>}
\<^descr>[\<^theory>\<open>Word_Lib.Aligned\<close>] \ \<^descr>[\<^theory>\<open>Word_Lib_l4v.Aligned\<close>] \
\<^item> @{thm [mode=iff] is_aligned_iff_udvd [no_vars]} \<^item> @{thm [mode=iff] is_aligned_iff_udvd [no_vars]}
\<^descr>[\<^theory>\<open>Word_Lib.Least_significant_bit\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Least_significant_bit\<close>]
The least significant bit as an alias: The least significant bit as an alias:
@{thm [mode=iff] lsb_odd [where ?'a = int, no_vars]} @{thm [mode=iff] lsb_odd [where ?'a = int, no_vars]}
\<^descr>[\<^theory>\<open>Word_Lib.Most_significant_bit\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Most_significant_bit\<close>]
The most significant bit: The most significant bit:
@ -255,7 +255,7 @@ text \<open>
\<^item> @{thm [mode=iff] msb_word_iff_bit [no_vars]} \<^item> @{thm [mode=iff] msb_word_iff_bit [no_vars]}
\<^descr>[\<^theory>\<open>Word_Lib.Bit_Shifts_Infix_Syntax\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Bit_Shifts_Infix_Syntax\<close>]
Bit shifts decorated with infix syntax: Bit shifts decorated with infix syntax:
@ -265,57 +265,57 @@ text \<open>
\<^item> @{thm Bit_Shifts_Infix_Syntax.sshiftr_def [no_vars]} \<^item> @{thm Bit_Shifts_Infix_Syntax.sshiftr_def [no_vars]}
\<^descr>[\<^theory>\<open>Word_Lib.Next_and_Prev\<close>] \ \<^descr>[\<^theory>\<open>Word_Lib_l4v.Next_and_Prev\<close>] \
\<^item> @{thm word_next_unfold [no_vars]} \<^item> @{thm word_next_unfold [no_vars]}
\<^item> @{thm word_prev_unfold [no_vars]} \<^item> @{thm word_prev_unfold [no_vars]}
\<^descr>[\<^theory>\<open>Word_Lib.Enumeration_Word\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Enumeration_Word\<close>]
More on explicit enumeration of word types. More on explicit enumeration of word types.
\<^descr>[\<^theory>\<open>Word_Lib.More_Word_Operations\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.More_Word_Operations\<close>]
Even more operations on word. Even more operations on word.
\<^descr>[Types] \<^descr>[Types]
\<^descr>[\<^theory>\<open>Word_Lib.Signed_Words\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Signed_Words\<close>]
Formal tagging of word types with a \<^text>\<open>signed\<close> marker. Formal tagging of word types with a \<^text>\<open>signed\<close> marker.
\<^descr>[Lemmas] \<^descr>[Lemmas]
\<^descr>[\<^theory>\<open>Word_Lib.More_Word\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.More_Word\<close>]
More lemmas on words. More lemmas on words.
\<^descr>[\<^theory>\<open>Word_Lib.Word_Lemmas\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Word_Lemmas\<close>]
More lemmas on words, covering many other theories mentioned here. More lemmas on words, covering many other theories mentioned here.
\<^descr>[Words of popular lengths]. \<^descr>[Words of popular lengths].
\<^descr>[\<^theory>\<open>Word_Lib.Word_8\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Word_8\<close>]
for 8-bit words. for 8-bit words.
\<^descr>[\<^theory>\<open>Word_Lib.Word_16\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Word_16\<close>]
for 16-bit words. for 16-bit words.
\<^descr>[\<^theory>\<open>Word_Lib.Word_32\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Word_32\<close>]
for 32-bit words. for 32-bit words.
\<^descr>[\<^theory>\<open>Word_Lib.Word_64\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Word_64\<close>]
for 64-bit words. This theory is not part of \<^text>\<open>Word_Lib_Sumo\<close>, because it shadows for 64-bit words. This theory is not part of \<^text>\<open>Word_Lib_Sumo\<close>, because it shadows
names from \<^theory>\<open>Word_Lib.Word_32\<close>. They can be used together, but then will have names from \<^theory>\<open>Word_Lib_l4v.Word_32\<close>. They can be used together, but then will have
to use qualified names in applications. to use qualified names in applications.
\<^descr>[\<^theory>\<open>Word_Lib.Machine_Word_32\<close> and \<^theory>\<open>Word_Lib.Machine_Word_64\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Machine_Word_32\<close> and \<^theory>\<open>Word_Lib_l4v.Machine_Word_64\<close>]
provide lemmas for 32-bit words and 64-bit words under the same name, provide lemmas for 32-bit words and 64-bit words under the same name,
which can help to organize applications relying on some form which can help to organize applications relying on some form
@ -343,36 +343,36 @@ text \<open>
from those theories. However theorem coverage may still from those theories. However theorem coverage may still
be terse in some cases. be terse in some cases.
\<^descr>[\<^theory>\<open>Word_Lib.Word_Lib_Sumo\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Word_Lib_Sumo\<close>]
An entry point importing any relevant theory in that session. Intended An entry point importing any relevant theory in that session. Intended
for backward compatibility: start importing this theory when for backward compatibility: start importing this theory when
migrating applications to Isabelle2021, and later sort out migrating applications to Isabelle2021, and later sort out
what you really need. You may need to include what you really need. You may need to include
\<^theory>\<open>Word_Lib.Word_64\<close> separately. \<^theory>\<open>Word_Lib_l4v.Word_64\<close> separately.
\<^descr>[\<^theory>\<open>Word_Lib.Generic_set_bit\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Generic_set_bit\<close>]
Kind of an alias: @{thm set_bit_eq [no_vars]} Kind of an alias: @{thm set_bit_eq [no_vars]}
\<^descr>[\<^theory>\<open>Word_Lib.Typedef_Morphisms\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Typedef_Morphisms\<close>]
A low-level extension to HOL typedef providing A low-level extension to HOL typedef providing
conversions along type morphisms. The @{method transfer} method conversions along type morphisms. The @{method transfer} method
seems to be sufficient for most applications though. seems to be sufficient for most applications though.
\<^descr>[\<^theory>\<open>Word_Lib.Bit_Comprehension\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Bit_Comprehension\<close>]
Comprehension syntax for bit values over predicates Comprehension syntax for bit values over predicates
\<^typ>\<open>nat \<Rightarrow> bool\<close>, for \<^typ>\<open>'a::len word\<close>; straightforward \<^typ>\<open>nat \<Rightarrow> bool\<close>, for \<^typ>\<open>'a::len word\<close>; straightforward
alternatives exist. alternatives exist.
\<^descr>[\<^theory>\<open>Word_Lib.Bit_Comprehension_Int\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Bit_Comprehension_Int\<close>]
Comprehension syntax for bit values over predicates Comprehension syntax for bit values over predicates
\<^typ>\<open>nat \<Rightarrow> bool\<close>, for \<^typ>\<open>int\<close>; inherently non-computational. \<^typ>\<open>nat \<Rightarrow> bool\<close>, for \<^typ>\<open>int\<close>; inherently non-computational.
\<^descr>[\<^theory>\<open>Word_Lib.Reversed_Bit_Lists\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Reversed_Bit_Lists\<close>]
Representation of bit values as explicit list in Representation of bit values as explicit list in
\<^emph>\<open>reversed\<close> order. \<^emph>\<open>reversed\<close> order.
@ -383,11 +383,11 @@ text \<open>
@{thm [display] horner_sum_bit_eq_take_bit [where ?'a = int, no_vars]} @{thm [display] horner_sum_bit_eq_take_bit [where ?'a = int, no_vars]}
\<^descr>[\<^theory>\<open>Word_Lib.Many_More\<close>] \<^descr>[\<^theory>\<open>Word_Lib_l4v.Many_More\<close>]
Collection of operations and theorems which are kept for backward Collection of operations and theorems which are kept for backward
compatibility and not used in other theories in session \<^text>\<open>Word_Lib\<close>. compatibility and not used in other theories in session \<^text>\<open>Word_Lib_l4v\<close>.
They are used in applications of \<^text>\<open>Word_Lib\<close>, but should be migrated to there. They are used in applications of \<^text>\<open>Word_Lib_l4v\<close>, but should be migrated to there.
\<close> \<close>
section \<open>Changelog\<close> section \<open>Changelog\<close>
@ -395,31 +395,31 @@ section \<open>Changelog\<close>
text \<open> text \<open>
\<^descr>[Changes since AFP 2022] ~ \<^descr>[Changes since AFP 2022] ~
\<^item> Theory \<^text>\<open>Word_Lib.Ancient_Numeral\<close> has been removed from session. \<^item> Theory \<^text>\<open>Word_Lib_l4v.Ancient_Numeral\<close> has been removed from session.
\<^item> Bit comprehension syntax for \<^typ>\<open>int\<close> moved to separate theory \<^item> Bit comprehension syntax for \<^typ>\<open>int\<close> moved to separate theory
\<^theory>\<open>Word_Lib.Bit_Comprehension_Int\<close>. \<^theory>\<open>Word_Lib_l4v.Bit_Comprehension_Int\<close>.
\<^descr>[Changes since AFP 2021] ~ \<^descr>[Changes since AFP 2021] ~
\<^item> Theory \<^text>\<open>Word_Lib.Ancient_Numeral\<close> is not part of \<^theory>\<open>Word_Lib.Word_Lib_Sumo\<close> \<^item> Theory \<^text>\<open>Word_Lib_l4v.Ancient_Numeral\<close> is not part of \<^theory>\<open>Word_Lib_l4v.Word_Lib_Sumo\<close>
any longer. any longer.
\<^item> Infix syntax for \<^term>\<open>(AND)\<close>, \<^term>\<open>(OR)\<close>, \<^term>\<open>(XOR)\<close> organized in \<^item> Infix syntax for \<^term>\<open>(AND)\<close>, \<^term>\<open>(OR)\<close>, \<^term>\<open>(XOR)\<close> organized in
syntax bundle \<^bundle>\<open>bit_operations_syntax\<close>. syntax bundle \<^bundle>\<open>bit_operations_syntax\<close>.
\<^item> Abbreviation \<^abbrev>\<open>max_word\<close> moved from distribution into theory \<^item> Abbreviation \<^abbrev>\<open>max_word\<close> moved from distribution into theory
\<^theory>\<open>Word_Lib.Legacy_Aliases\<close>. \<^theory>\<open>Word_Lib_l4v.Legacy_Aliases\<close>.
\<^item> Operation \<^const>\<open>test_bit\<close> replaced by input abbreviation \<^abbrev>\<open>test_bit\<close>. \<^item> Operation \<^const>\<open>test_bit\<close> replaced by input abbreviation \<^abbrev>\<open>test_bit\<close>.
\<^item> Abbreviations \<^abbrev>\<open>bin_nth\<close>, \<^abbrev>\<open>bin_last\<close>, \<^abbrev>\<open>bin_rest\<close>, \<^item> Abbreviations \<^abbrev>\<open>bin_nth\<close>, \<^abbrev>\<open>bin_last\<close>, \<^abbrev>\<open>bin_rest\<close>,
\<^abbrev>\<open>bintrunc\<close>, \<^abbrev>\<open>sbintrunc\<close>, \<^abbrev>\<open>norm_sint\<close>, \<^abbrev>\<open>bintrunc\<close>, \<^abbrev>\<open>sbintrunc\<close>, \<^abbrev>\<open>norm_sint\<close>,
\<^abbrev>\<open>bin_cat\<close> moved into theory \<^theory>\<open>Word_Lib.Legacy_Aliases\<close>. \<^abbrev>\<open>bin_cat\<close> moved into theory \<^theory>\<open>Word_Lib_l4v.Legacy_Aliases\<close>.
\<^item> Operations \<^abbrev>\<open>bshiftr1\<close>, \<^item> Operations \<^abbrev>\<open>bshiftr1\<close>,
\<^abbrev>\<open>setBit\<close>, \<^abbrev>\<open>clearBit\<close> moved from distribution into theory \<^abbrev>\<open>setBit\<close>, \<^abbrev>\<open>clearBit\<close> moved from distribution into theory
\<^theory>\<open>Word_Lib.Legacy_Aliases\<close> and replaced by input abbreviations. \<^theory>\<open>Word_Lib_l4v.Legacy_Aliases\<close> and replaced by input abbreviations.
\<^item> Operations \<^const>\<open>shiftl1\<close>, \<^const>\<open>shiftr1\<close>, \<^const>\<open>sshiftr1\<close> \<^item> Operations \<^const>\<open>shiftl1\<close>, \<^const>\<open>shiftr1\<close>, \<^const>\<open>sshiftr1\<close>
moved here from distribution. moved here from distribution.

View File

@ -5,7 +5,7 @@
*) *)
theory WordSetup (* part of non-AFP Word_Lib *) theory WordSetup (* part of non-AFP Word_Lib_l4v *)
imports imports
Word_Lemmas_64_Internal Word_Lemmas_64_Internal
Distinct_Prop Distinct_Prop

View File

@ -6,8 +6,8 @@
chapter Lib chapter Lib
session Word_Lib (lib) = HOL + session Word_Lib_l4v (lib) = HOL +
options [timeout = 300, document=pdf] options [timeout = 900, document=pdf]
sessions sessions
"HOL-Library" "HOL-Library"
"HOL-Eisbach" "HOL-Eisbach"

View File

@ -48,12 +48,12 @@ lemma signed_ge_zero_scast_eq_ucast:
"0 <=s x \<Longrightarrow> scast x = ucast x" "0 <=s x \<Longrightarrow> scast x = ucast x"
by (simp add: scast_eq_ucast word_sle_msb_le) by (simp add: scast_eq_ucast word_sle_msb_le)
(* FIXME: move out of Word_Lib *) (* FIXME: move out of Word_Lib_l4v *)
lemma disjCI2: lemma disjCI2:
"(\<not> P \<Longrightarrow> Q) \<Longrightarrow> P \<or> Q" "(\<not> P \<Longrightarrow> Q) \<Longrightarrow> P \<or> Q"
by blast by blast
(* FIXME: move out of Word_Lib *) (* FIXME: move out of Word_Lib_l4v *)
lemma nat_diff_diff_le_lhs: lemma nat_diff_diff_le_lhs:
"a + c - b \<le> d \<Longrightarrow> a - (b - c) \<le> (d :: nat)" "a + c - b \<le> d \<Longrightarrow> a - (b - c) \<le> (d :: nat)"
by arith by arith
@ -664,7 +664,7 @@ lemma FF_eq_minus_1:
lemmas shiftl_t2n' = shiftl_eq_mult[where x="w::'a::len word" for w] lemmas shiftl_t2n' = shiftl_eq_mult[where x="w::'a::len word" for w]
(* candidates for moving to AFP Word_Lib: *) (* candidates for moving to AFP Word_Lib_l4v: *)
lemma word_mask_shift_eqI: lemma word_mask_shift_eqI:
"\<lbrakk> x && mask n = y && mask n; x >> n = y >> n \<rbrakk> \<Longrightarrow> x = y" "\<lbrakk> x && mask n = y && mask n; x >> n = y >> n \<rbrakk> \<Longrightarrow> x = y"

View File

@ -5,7 +5,7 @@
*) *)
theory WordSetup (* part of non-AFP Word_Lib *) theory WordSetup (* part of non-AFP Word_Lib_l4v *)
imports imports
Word_Lemmas_64_Internal Word_Lemmas_64_Internal
Distinct_Prop Distinct_Prop

View File

@ -6,7 +6,7 @@
chapter Lib chapter Lib
session Sep_Algebra (lib) = Word_Lib + session Sep_Algebra (lib) = Word_Lib_l4v +
sessions sessions
"HOL-Eisbach" "HOL-Eisbach"
"HOL-Hoare" "HOL-Hoare"

View File

@ -53,7 +53,7 @@
<!-- Build Isabelle and common theories (Pure, HOL, Word). --> <!-- Build Isabelle and common theories (Pure, HOL, Word). -->
<sequence> <sequence>
<test name="isabelle" cwd="../.." cpu-timeout="3600">isabelle/bin/isabelle build -d . -vb Word_Lib</test> <test name="isabelle" cwd="../.." cpu-timeout="3600">isabelle/bin/isabelle build -d . -vb Word_Lib_l4v</test>
</sequence> </sequence>
<!-- Ensure that all of our XML files are strictly correct. --> <!-- Ensure that all of our XML files are strictly correct. -->

View File

@ -250,7 +250,7 @@ lemma is_aligned_ptrFromPAddr_pageBitsForSize:
"is_aligned p (pageBitsForSize sz) \<Longrightarrow> is_aligned (ptrFromPAddr p) (pageBitsForSize sz)" "is_aligned p (pageBitsForSize sz) \<Longrightarrow> is_aligned (ptrFromPAddr p) (pageBitsForSize sz)"
by (cases sz ; simp add: is_aligned_ptrFromPAddr_n pageBits_def) by (cases sz ; simp add: is_aligned_ptrFromPAddr_n pageBits_def)
(* FIXME: generalise, move to Word_Lib, and/or rewrite using (* FIXME: generalise, move to Word_Lib_l4v, and/or rewrite using
'leq_high_bits_shiftr_low_bits_leq_bits' *) 'leq_high_bits_shiftr_low_bits_leq_bits' *)
lemma le_mask_asid_bits_helper: lemma le_mask_asid_bits_helper:
"x \<le> 2 ^ asid_high_bits - 1 \<Longrightarrow> (x::word32) << asid_low_bits \<le> mask asid_bits" "x \<le> 2 ^ asid_high_bits - 1 \<Longrightarrow> (x::word32) << asid_low_bits \<le> mask asid_bits"
@ -271,7 +271,7 @@ lemma is_aligned_pageBitsForSize_minimum:
apply (erule is_aligned_weaken, simp)+ apply (erule is_aligned_weaken, simp)+
done done
(* FIXME: generalise, move to Word_Lib, and/or rewrite using 'shift_then_mask_eq_shift_low_bits' *) (* FIXME: generalise, move to Word_Lib_l4v, and/or rewrite using 'shift_then_mask_eq_shift_low_bits' *)
lemma shiftr_asid_low_bits_mask_asid_high_bits: lemma shiftr_asid_low_bits_mask_asid_high_bits:
"(asid :: word32) \<le> mask asid_bits "(asid :: word32) \<le> mask asid_bits
\<Longrightarrow> (asid >> asid_low_bits) && mask asid_high_bits = asid >> asid_low_bits" \<Longrightarrow> (asid >> asid_low_bits) && mask asid_high_bits = asid >> asid_low_bits"
@ -288,7 +288,7 @@ lemma ucast_asid_high_bits_is_shift:
unfolding asid_bits_def asid_low_bits_def asid_high_bits_of_def unfolding asid_bits_def asid_low_bits_def asid_high_bits_of_def
by (rule ucast_ucast_eq_mask_shift, simp) by (rule ucast_ucast_eq_mask_shift, simp)
(* FIXME: generalise, move to Word_Lib, and/or rewrite using 'leq_low_bits_iff_zero' *) (* FIXME: generalise, move to Word_Lib_l4v, and/or rewrite using 'leq_low_bits_iff_zero' *)
lemma shiftr_asid_low_bits_mask_eq_0: lemma shiftr_asid_low_bits_mask_eq_0:
"\<lbrakk> (asid :: word32) \<le> mask asid_bits; asid >> asid_low_bits = 0 \<rbrakk> "\<lbrakk> (asid :: word32) \<le> mask asid_bits; asid >> asid_low_bits = 0 \<rbrakk>
\<Longrightarrow> (asid && mask asid_low_bits = 0) = (asid = 0)" \<Longrightarrow> (asid && mask asid_low_bits = 0) = (asid = 0)"

View File

@ -174,7 +174,7 @@ lemma to_bool_if:
"(if w \<noteq> 0 then 1 else 0) = (if to_bool w then 1 else 0)" "(if w \<noteq> 0 then 1 else 0) = (if to_bool w then 1 else 0)"
by (auto simp: to_bool_def) by (auto simp: to_bool_def)
(* FIXME: move to Word_Lib *) (* FIXME: move to Word_Lib_l4v *)
lemma word_upcast_shiftr: lemma word_upcast_shiftr:
assumes "LENGTH('a::len) \<le> LENGTH('b::len)" assumes "LENGTH('a::len) \<le> LENGTH('b::len)"
shows "UCAST('a \<rightarrow> 'b) (w >> n) = UCAST('a \<rightarrow> 'b) w >> n" shows "UCAST('a \<rightarrow> 'b) (w >> n) = UCAST('a \<rightarrow> 'b) w >> n"
@ -187,12 +187,12 @@ lemma word_upcast_neg_msb:
unfolding ucast_def msb_word_of_int unfolding ucast_def msb_word_of_int
by clarsimp (metis Suc_pred bit_imp_le_length lens_gt_0(2) not_less_eq) by clarsimp (metis Suc_pred bit_imp_le_length lens_gt_0(2) not_less_eq)
(* FIXME: move to Word_Lib *) (* FIXME: move to Word_Lib_l4v *)
lemma word_upcast_0_sle: lemma word_upcast_0_sle:
"LENGTH('a::len) < LENGTH('b::len) \<Longrightarrow> 0 <=s UCAST('a \<rightarrow> 'b) w" "LENGTH('a::len) < LENGTH('b::len) \<Longrightarrow> 0 <=s UCAST('a \<rightarrow> 'b) w"
by (simp add: word_sle_iff_le[OF word_msb_0 word_upcast_neg_msb]) by (simp add: word_sle_iff_le[OF word_msb_0 word_upcast_neg_msb])
(* FIXME: move to Word_Lib *) (* FIXME: move to Word_Lib_l4v *)
lemma scast_ucast_up_eq_ucast: lemma scast_ucast_up_eq_ucast:
assumes "LENGTH('a::len) < LENGTH('b::len)" assumes "LENGTH('a::len) < LENGTH('b::len)"
shows "SCAST('b \<rightarrow> 'c) (UCAST('a \<rightarrow> 'b) w) = UCAST('a \<rightarrow> 'c::len) w" shows "SCAST('b \<rightarrow> 'c) (UCAST('a \<rightarrow> 'b) w) = UCAST('a \<rightarrow> 'c::len) w"
@ -361,7 +361,7 @@ lemma shiftr_and_eq_shiftl:
thus ?thesis using word_eq_iff by blast thus ?thesis using word_eq_iff by blast
qed qed
(* FIXME: move to Word_Lib *) (* FIXME: move to Word_Lib_l4v *)
lemma sign_extend_0[simp]: lemma sign_extend_0[simp]:
"sign_extend a 0 = 0" "sign_extend a 0 = 0"
by (simp add: sign_extend_def) by (simp add: sign_extend_def)
@ -382,7 +382,7 @@ lemma name_seq_bound_helper:
apply (rule ccontr, simp add: linorder_not_le) apply (rule ccontr, simp add: linorder_not_le)
done done
(* FIXME: what's being proven here? it's a pure word lemma - should it go in Word_Lib? *) (* FIXME: what's being proven here? it's a pure word lemma - should it go in Word_Lib_l4v? *)
lemma reset_name_seq_bound_helper: lemma reset_name_seq_bound_helper:
fixes sz fixes sz
fixes v :: "('a :: len) word" fixes v :: "('a :: len) word"
@ -1318,7 +1318,7 @@ lemma word_ctz_0[simp]:
"word_ctz (0::64 word) = 64" "word_ctz (0::64 word) = 64"
by (clarsimp simp: word_ctz_def to_bl_def)+ by (clarsimp simp: word_ctz_def to_bl_def)+
(* FIXME move to Word_Lib *) (* FIXME move to Word_Lib_l4v *)
lemma unat_trans_ucast_helper: lemma unat_trans_ucast_helper:
"\<lbrakk> unat x < n ; n \<le> Suc 0 \<rbrakk> \<Longrightarrow> ucast x = 0" "\<lbrakk> unat x < n ; n \<le> Suc 0 \<rbrakk> \<Longrightarrow> ucast x = 0"
by (simp add: le_Suc_eq unsigned_eq_0_iff) by (simp add: le_Suc_eq unsigned_eq_0_iff)

View File

@ -1456,7 +1456,7 @@ lemma mask_inj_if:
"\<lbrakk>a && mask n = a; b && mask n = b; a && mask n = b && mask n\<rbrakk>\<Longrightarrow> a = b" "\<lbrakk>a && mask n = a; b && mask n = b; a && mask n = b && mask n\<rbrakk>\<Longrightarrow> a = b"
by (rule box_equals) by (rule box_equals)
(* FIXME: move to Word_Lib, generalise *) (* FIXME: move to Word_Lib_l4v, generalise *)
lemma bound_preserve_mask: lemma bound_preserve_mask:
"\<lbrakk> is_aligned (x::word32) n; x\<le> mask k; (z::word32)\<le> mask n; n < 32; k < 32; n \<le> k \<rbrakk> \<Longrightarrow> "\<lbrakk> is_aligned (x::word32) n; x\<le> mask k; (z::word32)\<le> mask n; n < 32; k < 32; n \<le> k \<rbrakk> \<Longrightarrow>
x+z \<le> mask k" x+z \<le> mask k"

View File

@ -526,7 +526,7 @@ lemma pt_offs_range_correct:
"x \<in> pt_offs_range High_pt_ptr \<Longrightarrow> \<exists>y. x = High_pt_ptr + (ucast (y:: 8 word) << 2)" "x \<in> pt_offs_range High_pt_ptr \<Longrightarrow> \<exists>y. x = High_pt_ptr + (ucast (y:: 8 word) << 2)"
by (simp_all add: pt_offs_range_correct' s0_ptrs_aligned) by (simp_all add: pt_offs_range_correct' s0_ptrs_aligned)
(* FIXME: move to Word_Lib *) (* FIXME: move to Word_Lib_l4v *)
lemma bl_to_bin_le2p_aux: lemma bl_to_bin_le2p_aux:
"bl_to_bin_aux bs w \<le> (w + 1) * (2 ^ length bs) - 1" "bl_to_bin_aux bs w \<le> (w + 1) * (2 ^ length bs) - 1"
apply (induct bs arbitrary: w) apply (induct bs arbitrary: w)
@ -536,7 +536,7 @@ lemma bl_to_bin_le2p_aux:
apply (drule meta_spec, erule xtr8 [rotated], simp)+ apply (drule meta_spec, erule xtr8 [rotated], simp)+
done done
(* FIXME: move to Word_Lib *) (* FIXME: move to Word_Lib_l4v *)
lemma bl_to_bin_le2p: "bl_to_bin bs \<le> (2 ^ length bs) - 1" lemma bl_to_bin_le2p: "bl_to_bin bs \<le> (2 ^ length bs) - 1"
apply (unfold bl_to_bin_def) apply (unfold bl_to_bin_def)
apply (rule xtr3) apply (rule xtr3)
@ -545,7 +545,7 @@ lemma bl_to_bin_le2p: "bl_to_bin bs \<le> (2 ^ length bs) - 1"
apply simp apply simp
done done
(* FIXME: move to Word_Lib *) (* FIXME: move to Word_Lib_l4v *)
lemma of_bl_length_le: lemma of_bl_length_le:
"length x = k \<Longrightarrow> k < len_of TYPE('a) \<Longrightarrow> (of_bl x :: 'a :: len word) \<le> 2 ^ k - 1" "length x = k \<Longrightarrow> k < len_of TYPE('a) \<Longrightarrow> (of_bl x :: 'a :: len word) \<le> 2 ^ k - 1"
by (simp add: of_bl_length_less) by (simp add: of_bl_length_less)
@ -606,11 +606,11 @@ lemma cnode_offs_in_range:
"length x = 10 \<Longrightarrow> Silc_cnode_ptr + of_bl x * 0x10 \<in> cnode_offs_range Silc_cnode_ptr" "length x = 10 \<Longrightarrow> Silc_cnode_ptr + of_bl x * 0x10 \<in> cnode_offs_range Silc_cnode_ptr"
by (simp_all add: cnode_offs_in_range' s0_ptrs_aligned) by (simp_all add: cnode_offs_in_range' s0_ptrs_aligned)
(* FIXME: move to Word_Lib *) (* FIXME: move to Word_Lib_l4v *)
lemma le_mask_eq: "x \<le> 2 ^ n - 1 \<Longrightarrow> x AND mask n = (x :: 'a :: len word)" lemma le_mask_eq: "x \<le> 2 ^ n - 1 \<Longrightarrow> x AND mask n = (x :: 'a :: len word)"
by (metis and_mask_eq_iff_le_mask mask_2pm1) by (metis and_mask_eq_iff_le_mask mask_2pm1)
(* FIXME: move to Word_Lib *) (* FIXME: move to Word_Lib_l4v *)
lemma word_div_mult': lemma word_div_mult':
fixes c :: "'a::len word" fixes c :: "'a::len word"
shows "\<lbrakk>0 < c; a \<le> b * c \<rbrakk> \<Longrightarrow> a div c \<le> b" shows "\<lbrakk>0 < c; a \<le> b * c \<rbrakk> \<Longrightarrow> a div c \<le> b"

View File

@ -64,7 +64,7 @@ lemma invs_valid_irq_states[elim!]:
"invs s \<Longrightarrow> valid_irq_states s" "invs s \<Longrightarrow> valid_irq_states s"
by(auto simp: invs_def valid_state_def) by(auto simp: invs_def valid_state_def)
(* FIXME: move to Word_Lib *) (* FIXME: move to Word_Lib_l4v *)
lemma uint_ucast: lemma uint_ucast:
"(x :: 'a :: len word) < 2 ^ LENGTH('b) \<Longrightarrow> uint (ucast x :: 'b :: len word) = uint x" "(x :: 'a :: len word) < 2 ^ LENGTH('b) \<Longrightarrow> uint (ucast x :: 'b :: len word) = uint x"
by (metis Word.of_nat_unat mod_less of_nat_numeral semiring_1_class.of_nat_power unat_less_helper by (metis Word.of_nat_unat mod_less of_nat_numeral semiring_1_class.of_nat_power unat_less_helper

View File

@ -27,7 +27,7 @@ chapter "Specifications"
*) *)
(* Session on which most other sessions build. *) (* Session on which most other sessions build. *)
session ASpec in "abstract" = Word_Lib + session ASpec in "abstract" = Word_Lib_l4v +
options [document=pdf] options [document=pdf]
sessions sessions
"HOL-Library" "HOL-Library"
@ -61,7 +61,7 @@ session ASpec in "abstract" = Word_Lib +
* Executable/Design Specification * Executable/Design Specification
*) *)
session ExecSpec in "design" = Word_Lib + session ExecSpec in "design" = Word_Lib_l4v +
options [document = false] options [document = false]
sessions sessions
Lib Lib
@ -106,7 +106,7 @@ session CKernel in "cspec/$L4V_ARCH" = CParser +
* CapDL * CapDL
*) *)
session DSpec in capDL = Word_Lib + session DSpec in capDL = Word_Lib_l4v +
sessions sessions
ExecSpec ExecSpec
ASpec ASpec
@ -119,7 +119,7 @@ session DSpec in capDL = Word_Lib +
* Take-Grant. * Take-Grant.
*) *)
session TakeGrant in "take-grant" = Word_Lib + session TakeGrant in "take-grant" = Word_Lib_l4v +
theories theories
"System_S" "System_S"
"Isolation_S" "Isolation_S"

View File

@ -24,7 +24,7 @@
theory Intents_D theory Intents_D
imports imports
"Word_Lib.WordSetup" "Word_Lib_l4v.WordSetup"
"ASpec.CapRights_A" "ASpec.CapRights_A"
begin begin

View File

@ -6,7 +6,7 @@
theory KernelState_C theory KernelState_C
imports imports
"Word_Lib.WordSetup" "Word_Lib_l4v.WordSetup"
"CLib.BitFieldProofsLib" "CLib.BitFieldProofsLib"
"Substitute" "Substitute"
begin begin

View File

@ -246,7 +246,7 @@ theory_header = """(*
chapter "Kernel Configuration" chapter "Kernel Configuration"
theory Kernel_Config theory Kernel_Config
imports Word_Lib.WordSetup imports Word_Lib_l4v.WordSetup
begin begin
(* (*

View File

@ -7,6 +7,7 @@ chapter "AARCH64 Machine Types"
theory MachineTypes theory MachineTypes
imports imports
Word_Lib_l4v.WordSetup
Word_Lib.WordSetup Word_Lib.WordSetup
Monads.Nondet_Empty_Fail Monads.Nondet_Empty_Fail
Monads.Nondet_No_Fail Monads.Nondet_No_Fail

View File

@ -8,6 +8,7 @@ chapter "ARM Machine Types"
theory MachineTypes theory MachineTypes
imports imports
Word_Lib_l4v.WordSetup
Word_Lib.WordSetup Word_Lib.WordSetup
Monads.Nondet_Empty_Fail Monads.Nondet_Empty_Fail
Monads.Nondet_No_Fail Monads.Nondet_No_Fail

View File

@ -8,7 +8,7 @@ chapter \<open>ARM\_HYP Machine Types\<close>
theory MachineTypes theory MachineTypes
imports imports
Word_Lib.WordSetup Word_Lib_l4v.WordSetup
Monads.Nondet_Empty_Fail Monads.Nondet_Empty_Fail
Monads.Nondet_No_Fail Monads.Nondet_No_Fail
Monads.Reader_Option_ND Monads.Reader_Option_ND

View File

@ -8,7 +8,7 @@ chapter "RISCV 64bit Machine Types"
theory MachineTypes theory MachineTypes
imports imports
Word_Lib.WordSetup Word_Lib_l4v.WordSetup
Monads.Nondet_Empty_Fail Monads.Nondet_Empty_Fail
Monads.Nondet_No_Fail Monads.Nondet_No_Fail
Monads.Reader_Option_ND Monads.Reader_Option_ND

View File

@ -8,6 +8,7 @@ chapter "x86-64bit Machine Types"
theory MachineTypes theory MachineTypes
imports imports
Word_Lib_l4v.WordSetup
Word_Lib.WordSetup Word_Lib.WordSetup
Monads.Nondet_Empty_Fail Monads.Nondet_Empty_Fail
Monads.Nondet_No_Fail Monads.Nondet_No_Fail

View File

@ -8,7 +8,7 @@ chapter "Architecture-specific Invocation Labels"
theory ArchInvocationLabels_H theory ArchInvocationLabels_H
imports imports
"Word_Lib.Enumeration" "Word_Lib_l4v.Enumeration"
Setup_Locale Setup_Locale
begin begin
context Arch begin global_naming AARCH64_H context Arch begin global_naming AARCH64_H

View File

@ -8,7 +8,7 @@ chapter "Architecture-specific Invocation Labels"
theory ArchInvocationLabels_H theory ArchInvocationLabels_H
imports imports
"Word_Lib.Enumeration" "Word_Lib_l4v.Enumeration"
Setup_Locale Setup_Locale
begin begin
context Arch begin global_naming ARM_H context Arch begin global_naming ARM_H

View File

@ -8,7 +8,7 @@ chapter "Architecture-specific Invocation Labels"
theory ArchInvocationLabels_H theory ArchInvocationLabels_H
imports imports
"Word_Lib.Enumeration" "Word_Lib_l4v.Enumeration"
Setup_Locale Setup_Locale
begin begin
context Arch begin global_naming ARM_HYP_H context Arch begin global_naming ARM_HYP_H

View File

@ -8,7 +8,7 @@ chapter "Architecture-specific Invocation Labels"
theory ArchInvocationLabels_H theory ArchInvocationLabels_H
imports imports
"Word_Lib.Enumeration" "Word_Lib_l4v.Enumeration"
Setup_Locale Setup_Locale
begin begin
context Arch begin global_naming RISCV64_H context Arch begin global_naming RISCV64_H

View File

@ -8,7 +8,7 @@ chapter "Architecture-specific Invocation Labels"
theory ArchInvocationLabels_H theory ArchInvocationLabels_H
imports imports
"Word_Lib.Enumeration" "Word_Lib_l4v.Enumeration"
Setup_Locale Setup_Locale
begin begin
context Arch begin global_naming X64_H context Arch begin global_naming X64_H

View File

@ -9,6 +9,7 @@ chapter "Machine Operations"
theory MachineOps theory MachineOps
imports imports
Word_Lib_l4v.WordSetup
Word_Lib.WordSetup Word_Lib.WordSetup
Monads.Nondet_Monad Monads.Nondet_Monad
MachineMonad MachineMonad

View File

@ -9,7 +9,7 @@ chapter "Platform Definitions"
theory Platform theory Platform
imports imports
"Lib.Lib" "Lib.Lib"
"Word_Lib.WordSetup" "Word_Lib_l4v.WordSetup"
"Lib.Defs" "Lib.Defs"
Setup_Locale Setup_Locale
Kernel_Config Kernel_Config

View File

@ -10,7 +10,7 @@ theory Platform
imports imports
"Lib.Defs" "Lib.Defs"
"Lib.Lib" "Lib.Lib"
"Word_Lib.WordSetup" "Word_Lib_l4v.WordSetup"
Setup_Locale Setup_Locale
Kernel_Config Kernel_Config
begin begin

View File

@ -10,7 +10,7 @@ theory Platform
imports imports
"Lib.Defs" "Lib.Defs"
"Lib.Lib" "Lib.Lib"
"Word_Lib.WordSetup" "Word_Lib_l4v.WordSetup"
Setup_Locale Setup_Locale
Kernel_Config Kernel_Config
begin begin

View File

@ -8,7 +8,7 @@ chapter "Machine Operations"
theory MachineOps theory MachineOps
imports imports
"Word_Lib.WordSetup" "Word_Lib_l4v.WordSetup"
"Monads.Nondet_Monad" "Monads.Nondet_Monad"
MachineMonad MachineMonad
begin begin

View File

@ -9,7 +9,7 @@ chapter "Platform Definitions"
theory Platform theory Platform
imports imports
"Lib.Lib" "Lib.Lib"
"Word_Lib.WordSetup" "Word_Lib_l4v.WordSetup"
"Lib.Defs" "Lib.Defs"
Setup_Locale Setup_Locale
Kernel_Config Kernel_Config

View File

@ -8,7 +8,7 @@ chapter "Machine Operations"
theory MachineOps theory MachineOps
imports imports
"Word_Lib.WordSetup" "Word_Lib_l4v.WordSetup"
"Monads.Nondet_Monad" "Monads.Nondet_Monad"
MachineMonad MachineMonad
begin begin

View File

@ -9,7 +9,7 @@ chapter "Platform Definitions"
theory Platform theory Platform
imports imports
"Lib.Lib" "Lib.Lib"
"Word_Lib.WordSetup" "Word_Lib_l4v.WordSetup"
"Lib.Defs" "Lib.Defs"
Setup_Locale Setup_Locale
Kernel_Config Kernel_Config

Some files were not shown because too many files have changed in this diff Show More