(*========================================================================*) (* Lem *) (* *) (* Dominic Mulligan, University of Cambridge *) (* Francesco Zappa Nardelli, INRIA Paris-Rocquencourt *) (* Gabriel Kerneis, University of Cambridge *) (* Kathy Gray, University of Cambridge *) (* Peter Boehm, University of Cambridge (while working on Lem) *) (* Peter Sewell, University of Cambridge *) (* Scott Owens, University of Kent *) (* Thomas Tuerk, University of Cambridge *) (* Brian Campbell, University of Edinburgh *) (* Shaked Flur, University of Cambridge *) (* Thomas Bauereiss, University of Cambridge *) (* Stephen Kell, University of Cambridge *) (* Thomas Williams *) (* Lars Hupel *) (* Basile Clement *) (* *) (* The Lem sources are copyright 2010-2018 *) (* by the authors above and Institut National de Recherche en *) (* Informatique et en Automatique (INRIA). *) (* *) (* All files except ocaml-lib/pmap.{ml,mli} and ocaml-libpset.{ml,mli} *) (* are distributed under the license below. The former are distributed *) (* under the LGPLv2, as in the LICENSE file. *) (* *) (* *) (* Redistribution and use in source and binary forms, with or without *) (* modification, are permitted provided that the following conditions *) (* are met: *) (* 1. Redistributions of source code must retain the above copyright *) (* notice, this list of conditions and the following disclaimer. *) (* 2. Redistributions in binary form must reproduce the above copyright *) (* notice, this list of conditions and the following disclaimer in the *) (* documentation and/or other materials provided with the distribution. *) (* 3. The names of the authors may not be used to endorse or promote *) (* products derived from this software without specific prior written *) (* permission. *) (* *) (* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS *) (* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *) (* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE *) (* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY *) (* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL *) (* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE *) (* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS *) (* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER *) (* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR *) (* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN *) (* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *) (*========================================================================*) chapter‹Mappings of Syntax needed by Lem› theory "Lem" imports LemExtraDefs "HOL-Library.Word" "Word_Lib.Reversed_Bit_Lists" begin type_synonym numeral = nat subsection ‹Finite Maps› abbreviation (input) "map_find k m ≡ the (m k)" abbreviation (input) "map_update k v m ≡ m (k ↦ v)" abbreviation (input) "map_remove k m ≡ m |` (- {k})" abbreviation (input) "map_any P m ≡ ∃ (k, v) ∈ map_to_set m. P k v" abbreviation (input) "map_all P m ≡ ∀ (k, v) ∈ map_to_set m. P k v" subsection ‹Lists› abbreviation (input) "list_mem e l ≡ (e ∈ set l)" abbreviation (input) "list_forall P l ≡ (∀e∈set l. P e)" abbreviation (input) "list_exists P l ≡ (∃e∈set l. P e)" abbreviation (input) "list_unzip l ≡ (map fst l, map snd l)" subsection ‹Sets› abbreviation (input) "set_filter P (s::'a set) ≡ {x ∈ s. P x}" abbreviation (input) "set_bigunion S ≡ ⋃ S" abbreviation (input) "set_biginter S ≡ ⋂ S" subsection ‹Natural numbers› subsection ‹Integers› subsection ‹Dummy› consts bitwise_xor :: "nat ⇒ nat ⇒ nat" num_asr :: "nat ⇒ nat ⇒ nat" num_lsl :: "nat ⇒ nat ⇒ nat" bitwise_or :: "nat ⇒ nat ⇒ nat" bitwise_not :: "nat ⇒ nat" bitwise_and :: "nat ⇒ nat ⇒ nat" subsection ‹Machine words› definition word_update :: "'a::len word ⇒ nat ⇒ nat ⇒ 'b::len word ⇒ 'a word" where "word_update v lo hi w = (let sz = size v in of_bl (take (sz-hi-1) (to_bl v) @ to_bl w @ drop (sz-lo) (to_bl v)))" end