(*========================================================================*) (* 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-Word.Word" 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