(****************************************************************************** * Citadelle * * Copyright (c) 2011-2018 Université Paris-Saclay, Univ. Paris-Sud, France * 2013-2017 IRT SystemX, France * 2011-2015 Achim D. Brucker, Germany * 2016-2018 The University of Sheffield, UK * 2016-2017 Nanyang Technological University, Singapore * 2017-2018 Virginia Tech, USA * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * 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. * * * Neither the name of the copyright holders nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "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 COPYRIGHT * OWNER OR CONTRIBUTORS 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. ******************************************************************************) section‹Finalizing the Printer› theory Printer imports Core "meta_toy/Printer_META" begin definition "List_iterM f l = List.fold (λx m. bind m (λ () ⇒ f x)) l (return ())" context Print begin declare[[cartouche_type' = "String.literal"]] definition "write_file env = ( let (l_thy, Sys_argv) = compiler_env_config.more env ; (is_file, f_output) = case (D_output_header_thy env, Sys_argv) of (Some (file_out, _), Some dir) ⇒ let dir = To_string dir in (True, λf. bind (Sys_is_directory2 dir) (λ Sys_is_directory2_dir. out_file1 f (if Sys_is_directory2_dir then sprint2 ‹%s/%s.thy›´ dir (To_string file_out) else dir))) | _ ⇒ (False, out_stand1) in f_output (λfprintf1. List_iterM (fprintf1 ‹%s › ) (let (env, l) = fold_thy' (λf. f ()) (λ_ _. []) (λx acc1 acc2. (acc1, Cons x acc2)) l_thy (compiler_env_config.truncate env, []) in of_all_meta_lists (compiler_env_config_more_map (λ_. is_file) env) (rev l))))" end definition "write_file = Print.write_file String.meta_of_logic (ToNat integer_of_natural)" lemmas [code] = ― ‹def› Print.write_file_def ― ‹fun› section‹Miscellaneous: Garbage Collection of Notations› no_type_notation natural (‹nat›) no_type_notation abr_string (‹string›) end