diff --git a/lib/scripts/mirabelle b/lib/scripts/mirabelle new file mode 100755 --- /dev/null +++ b/lib/scripts/mirabelle @@ -0,0 +1,129 @@ +#!/usr/bin/perl -w + +use strict; +use File::Basename; + +# Taken from http://www.skywayradio.com/tech/perl/trim_blanks.html +sub trim { + my @out = @_; + for (@out) { + s/^\s+//; + s/\s+$//; + } + return wantarray ? @out : $out[0]; +} + +sub quote { + my $str = pop; + return "\"" . $str . "\""; +} + +sub print_usage_and_quit { + print STDERR "Usage: mirabelle actions file1.thy...\n" . + " actions: action1:...:actionN\n" . + " action: name or name[key1=value1,...,keyM=valueM]\n"; + exit 1; +} + +my $num_args = $#ARGV + 1; +if ($num_args < 2) { + print_usage_and_quit(); +} + +my @action_names; +my @action_settings; + +foreach (split(/:/, $ARGV[0])) { + my %settings; + + $_ =~ /([^[]*)(?:\[(.*)\])?/; + my ($name, $settings_str) = ($1, $2 || ""); + my @setting_strs = split(/,/, $settings_str); + foreach (@setting_strs) { + $_ =~ /(.*)=(.*)/; + my $key = $1; + my $value = $2; + $settings{trim($key)} = trim($value); + } + + push @action_names, trim($name); + push @action_settings, \%settings; +} + +my $output_path = "/tmp/mirabelle"; # FIXME: generate path +my $mirabellesetup_thy_name = $output_path . "/MirabelleSetup"; +my $mirabellesetup_file = $mirabellesetup_thy_name . ".thy"; +my $mirabelle_log_file = $output_path . "/mirabelle.log"; + +mkdir $output_path, 0755; + +open(FILE, ">$mirabellesetup_file") + || die "Could not create file '$mirabellesetup_file'"; + +my $invoke_lines; + +for my $i (0 .. $#action_names) { + my $settings_str = ""; + my $settings = $action_settings[$i]; + my $key; + my $value; + + while (($key, $value) = each(%$settings)) { + $settings_str .= "(" . quote ($key) . ", " . quote ($value) . "), "; + } + $settings_str =~ s/, $//; + + $invoke_lines .= "setup {* Mirabelle.invoke \"$action_names[$i]\" "; + $invoke_lines .= "[$settings_str] *}\n" +} + +print FILE <; + close(OLD_FILE); + + my $thy_text = join("", @lines); + my $old_len = length($thy_text); + $thy_text =~ s/\btheory\b[^\n]*\s*\bimports\s/theory $new_thy_name\nimports "$mirabellesetup_thy_name" /gm; + die "No 'imports' found" if length($thy_text) == $old_len; + + open(NEW_FILE, ">$new_thy_file"); + print NEW_FILE $thy_text; + close(NEW_FILE); + + $root_text .= "use_thy \"" . $dir . $new_thy_name . "\";\n"; + + push @new_thy_files, $new_thy_file; +} + +my $root_file = "ROOT_mirabelle.ML"; +open(ROOT_FILE, ">$root_file") || die "Cannot open file $root_file"; +print ROOT_FILE $root_text; +close(ROOT_FILE); + +system "isabelle-process -e 'use \"ROOT_mirabelle.ML\";' -f -q HOL"; + +# unlink $mirabellesetup_file; +unlink $root_file; +unlink @new_thy_files; diff --git a/src/HOL/IsaMakefile b/src/HOL/IsaMakefile --- a/src/HOL/IsaMakefile +++ b/src/HOL/IsaMakefile @@ -1,1144 +1,1145 @@ # # IsaMakefile for HOL # ## targets default: HOL generate: HOL-Generate-HOL HOL-Generate-HOLLight images: HOL HOL-Base HOL-Plain HOL-Main HOL-Algebra HOL-Nominal HOL-NSA HOL-Word TLA HOL4 #Note: keep targets sorted (except for HOL-Library and HOL-ex) test: \ HOL-Library \ HOL-ex \ HOL-Auth \ HOL-Bali \ HOL-Decision_Procs \ HOL-Extraction \ HOL-Hahn_Banach \ HOL-Hoare \ HOL-HoareParallel \ HOL-Import \ HOL-IMP \ HOL-IMPP \ HOL-IOA \ HOL-Imperative_HOL \ HOL-Induct \ HOL-Isar_examples \ HOL-Lambda \ HOL-Lattice \ HOL-Matrix \ HOL-MetisExamples \ HOL-MicroJava \ HOL-Modelcheck \ HOL-NanoJava \ HOL-Nominal-Examples \ HOL-NewNumberTheory \ HOL-NumberTheory \ HOL-Prolog \ HOL-SET-Protocol \ HOL-SizeChange \ HOL-Statespace \ HOL-Subst \ TLA-Buffer \ TLA-Inc \ TLA-Memory \ HOL-UNITY \ HOL-Unix \ HOL-W0 \ HOL-Word-Examples \ HOL-ZF # ^ this is the sort position proofterms: HOL HOL-Extraction HOL-Lambda all: test images ## global settings SRC = $(ISABELLE_HOME)/src OUT = $(ISABELLE_OUTPUT) LOG = $(OUT)/log ## HOL HOL: Pure $(OUT)/HOL HOL-Base: Pure $(OUT)/HOL-Base HOL-Plain: Pure $(OUT)/HOL-Plain HOL-Main: Pure $(OUT)/HOL-Main Pure: @cd $(SRC)/Pure; $(ISABELLE_TOOL) make Pure $(OUT)/Pure: Pure BASE_DEPENDENCIES = $(OUT)/Pure \ $(SRC)/Provers/blast.ML \ $(SRC)/Provers/clasimp.ML \ $(SRC)/Provers/classical.ML \ $(SRC)/Provers/hypsubst.ML \ $(SRC)/Provers/quantifier1.ML \ $(SRC)/Provers/splitter.ML \ $(SRC)/Tools/IsaPlanner/isand.ML \ $(SRC)/Tools/IsaPlanner/rw_inst.ML \ $(SRC)/Tools/IsaPlanner/rw_tools.ML \ $(SRC)/Tools/IsaPlanner/zipper.ML \ $(SRC)/Tools/atomize_elim.ML \ $(SRC)/Tools/auto_solve.ML \ $(SRC)/Tools/Code/code_haskell.ML \ $(SRC)/Tools/Code/code_ml.ML \ $(SRC)/Tools/Code/code_preproc.ML \ $(SRC)/Tools/Code/code_printer.ML \ $(SRC)/Tools/Code/code_target.ML \ $(SRC)/Tools/Code/code_thingol.ML \ $(SRC)/Tools/coherent.ML \ $(SRC)/Tools/eqsubst.ML \ $(SRC)/Tools/induct.ML \ $(SRC)/Tools/intuitionistic.ML \ $(SRC)/Tools/induct_tacs.ML \ $(SRC)/Tools/nbe.ML \ $(SRC)/Tools/quickcheck.ML \ $(SRC)/Tools/project_rule.ML \ $(SRC)/Tools/random_word.ML \ $(SRC)/Tools/value.ML \ $(SRC)/Tools/Code_Generator.thy \ HOL.thy \ Tools/hologic.ML \ Tools/recfun_codegen.ML \ Tools/simpdata.ML \ $(OUT)/HOL-Base: base.ML $(BASE_DEPENDENCIES) @$(ISABELLE_TOOL) usedir -b -f base.ML -d false -g false $(OUT)/Pure HOL-Base PLAIN_DEPENDENCIES = $(BASE_DEPENDENCIES)\ Complete_Lattice.thy \ Datatype.thy \ Divides.thy \ Extraction.thy \ Finite_Set.thy \ Fun.thy \ FunDef.thy \ Inductive.thy \ Lattices.thy \ Nat.thy \ OrderedGroup.thy \ Orderings.thy \ Option.thy \ Plain.thy \ Power.thy \ Predicate.thy \ Product_Type.thy \ Record.thy \ Refute.thy \ Relation.thy \ Ring_and_Field.thy \ SAT.thy \ Set.thy \ Sum_Type.thy \ Tools/arith_data.ML \ Tools/cnf_funcs.ML \ Tools/Datatype/datatype_abs_proofs.ML \ Tools/Datatype/datatype_aux.ML \ Tools/Datatype/datatype_case.ML \ Tools/Datatype/datatype_codegen.ML \ Tools/Datatype/datatype.ML \ Tools/Datatype/datatype_prop.ML \ Tools/Datatype/datatype_realizer.ML \ Tools/Datatype/datatype_rep_proofs.ML \ Tools/dseq.ML \ Tools/Function/auto_term.ML \ Tools/Function/context_tree.ML \ Tools/Function/decompose.ML \ Tools/Function/descent.ML \ Tools/Function/fundef_common.ML \ Tools/Function/fundef_core.ML \ Tools/Function/fundef_datatype.ML \ Tools/Function/fundef_lib.ML \ Tools/Function/fundef.ML \ Tools/Function/induction_scheme.ML \ Tools/Function/inductive_wrap.ML \ Tools/Function/lexicographic_order.ML \ Tools/Function/measure_functions.ML \ Tools/Function/mutual.ML \ Tools/Function/pattern_split.ML \ Tools/Function/scnp_reconstruct.ML \ Tools/Function/scnp_solve.ML \ Tools/Function/size.ML \ Tools/Function/sum_tree.ML \ Tools/Function/termination.ML \ Tools/inductive_codegen.ML \ Tools/inductive.ML \ Tools/inductive_realizer.ML \ Tools/inductive_set.ML \ Tools/lin_arith.ML \ Tools/nat_arith.ML \ Tools/old_primrec.ML \ Tools/primrec.ML \ Tools/prop_logic.ML \ Tools/record.ML \ Tools/refute.ML \ Tools/refute_isar.ML \ Tools/rewrite_hol_proof.ML \ Tools/sat_funcs.ML \ Tools/sat_solver.ML \ Tools/split_rule.ML \ Tools/typecopy.ML \ Tools/typedef_codegen.ML \ Tools/typedef.ML \ Transitive_Closure.thy \ Typedef.thy \ Wellfounded.thy \ $(SRC)/Provers/Arith/abel_cancel.ML \ $(SRC)/Provers/Arith/cancel_div_mod.ML \ $(SRC)/Provers/Arith/cancel_sums.ML \ $(SRC)/Provers/Arith/fast_lin_arith.ML \ $(SRC)/Provers/order.ML \ $(SRC)/Provers/trancl.ML \ $(SRC)/Tools/rat.ML $(OUT)/HOL-Plain: plain.ML $(PLAIN_DEPENDENCIES) @$(ISABELLE_TOOL) usedir -b -f plain.ML -g true $(OUT)/Pure HOL-Plain MAIN_DEPENDENCIES = $(PLAIN_DEPENDENCIES) \ ATP_Linkup.thy \ Code_Eval.thy \ Code_Numeral.thy \ Equiv_Relations.thy \ Groebner_Basis.thy \ Hilbert_Choice.thy \ IntDiv.thy \ Int.thy \ List.thy \ Main.thy \ Map.thy \ Nat_Numeral.thy \ Presburger.thy \ Quickcheck.thy \ Random.thy \ Recdef.thy \ SetInterval.thy \ String.thy \ Typerep.thy \ $(SRC)/Provers/Arith/assoc_fold.ML \ $(SRC)/Provers/Arith/cancel_numeral_factor.ML \ $(SRC)/Provers/Arith/cancel_numerals.ML \ $(SRC)/Provers/Arith/combine_numerals.ML \ $(SRC)/Provers/Arith/extract_common_term.ML \ $(SRC)/Tools/Metis/metis.ML \ Tools/Groebner_Basis/groebner.ML \ Tools/Groebner_Basis/misc.ML \ Tools/Groebner_Basis/normalizer_data.ML \ Tools/Groebner_Basis/normalizer.ML \ Tools/atp_manager.ML \ Tools/atp_wrapper.ML \ Tools/int_arith.ML \ Tools/list_code.ML \ Tools/meson.ML \ Tools/metis_tools.ML \ Tools/nat_numeral_simprocs.ML \ Tools/numeral.ML \ Tools/numeral_simprocs.ML \ Tools/numeral_syntax.ML \ Tools/polyhash.ML \ Tools/quickcheck_generators.ML \ Tools/Qelim/cooper_data.ML \ Tools/Qelim/cooper.ML \ Tools/Qelim/generated_cooper.ML \ Tools/Qelim/presburger.ML \ Tools/Qelim/qelim.ML \ Tools/recdef.ML \ Tools/res_atp.ML \ Tools/res_axioms.ML \ Tools/res_clause.ML \ Tools/res_hol_clause.ML \ Tools/res_reconstruct.ML \ Tools/choice_specification.ML \ Tools/string_code.ML \ Tools/string_syntax.ML \ Tools/TFL/casesplit.ML \ Tools/TFL/dcterm.ML \ Tools/TFL/post.ML \ Tools/TFL/rules.ML \ Tools/TFL/tfl.ML \ Tools/TFL/thms.ML \ Tools/TFL/thry.ML \ Tools/TFL/usyntax.ML \ Tools/TFL/utils.ML $(OUT)/HOL-Main: main.ML $(MAIN_DEPENDENCIES) @$(ISABELLE_TOOL) usedir -b -f main.ML -g true $(OUT)/Pure HOL-Main $(OUT)/HOL: ROOT.ML $(MAIN_DEPENDENCIES) \ Archimedean_Field.thy \ Complex_Main.thy \ Complex.thy \ Deriv.thy \ Fact.thy \ Integration.thy \ Lim.thy \ Limits.thy \ Ln.thy \ Log.thy \ MacLaurin.thy \ NatTransfer.thy \ NthRoot.thy \ SEQ.thy \ Series.thy \ Taylor.thy \ Transcendental.thy \ GCD.thy \ Parity.thy \ Lubs.thy \ PReal.thy \ Rational.thy \ RComplete.thy \ RealDef.thy \ RealPow.thy \ Real.thy \ RealVector.thy \ Tools/float_syntax.ML \ Tools/transfer_data.ML \ Tools/Qelim/ferrante_rackoff_data.ML \ Tools/Qelim/ferrante_rackoff.ML \ Tools/Qelim/langford_data.ML \ Tools/Qelim/langford.ML @$(ISABELLE_TOOL) usedir $(HOL_USEDIR_OPTIONS) -b -g true $(OUT)/Pure HOL ## HOL-Library HOL-Library: HOL $(LOG)/HOL-Library.gz $(LOG)/HOL-Library.gz: $(OUT)/HOL Library/SetsAndFunctions.thy \ Library/Abstract_Rat.thy \ Library/BigO.thy Library/ContNotDenum.thy Library/Efficient_Nat.thy \ Library/Euclidean_Space.thy Library/Sum_Of_Squares.thy Library/positivstellensatz.ML \ Library/Fset.thy Library/Convex_Euclidean_Space.thy \ Library/sum_of_squares.ML Library/Glbs.thy Library/normarith.ML \ Library/Executable_Set.thy Library/Infinite_Set.thy \ Library/FuncSet.thy Library/Permutations.thy Library/Determinants.thy\ Library/Bit.thy Library/Topology_Euclidean_Space.thy \ Library/Finite_Cartesian_Product.thy \ Library/FrechetDeriv.thy Library/Fraction_Field.thy\ Library/Fundamental_Theorem_Algebra.thy \ Library/Inner_Product.thy Library/Kleene_Algebra.thy Library/Lattice_Syntax.thy \ Library/Legacy_GCD.thy \ Library/Library.thy Library/List_Prefix.thy Library/List_Set.thy Library/State_Monad.thy \ Library/Nat_Int_Bij.thy Library/Multiset.thy Library/Permutation.thy \ Library/Primes.thy Library/Pocklington.thy Library/Quotient.thy \ Library/Quicksort.thy Library/Nat_Infinity.thy Library/Word.thy \ Library/README.html Library/Continuity.thy Library/Order_Relation.thy \ Library/Nested_Environment.thy Library/Ramsey.thy Library/Zorn.thy \ Library/Library/ROOT.ML Library/Library/document/root.tex \ Library/Library/document/root.bib Library/While_Combinator.thy \ Library/Product_ord.thy Library/Char_nat.thy Library/Char_ord.thy \ Library/Option_ord.thy Library/Sublist_Order.thy \ Library/List_lexord.thy Library/Commutative_Ring.thy \ Library/comm_ring.ML Library/Coinductive_List.thy \ Library/AssocList.thy Library/Formal_Power_Series.thy \ Library/Binomial.thy Library/Eval_Witness.thy \ Library/Code_Char.thy \ Library/Code_Char_chr.thy Library/Code_Integer.thy \ Library/Mapping.thy Library/Numeral_Type.thy Library/Reflection.thy \ Library/Boolean_Algebra.thy Library/Countable.thy \ Library/Diagonalize.thy Library/RBT.thy Library/Univ_Poly.thy \ Library/Poly_Deriv.thy \ Library/Polynomial.thy \ Library/Preorder.thy \ Library/Product_plus.thy \ Library/Product_Vector.thy \ Library/Tree.thy \ Library/Enum.thy Library/Float.thy $(SRC)/Tools/float.ML $(SRC)/HOL/Tools/float_arith.ML \ Library/reify_data.ML Library/reflection.ML \ Library/LaTeXsugar.thy Library/OptionalSugar.thy @cd Library; $(ISABELLE_TOOL) usedir $(OUT)/HOL Library ## HOL-Hahn_Banach HOL-Hahn_Banach: HOL $(LOG)/HOL-Hahn_Banach.gz $(LOG)/HOL-Hahn_Banach.gz: $(OUT)/HOL Hahn_Banach/Bounds.thy \ Hahn_Banach/Function_Norm.thy Hahn_Banach/Function_Order.thy \ Hahn_Banach/Hahn_Banach.thy Hahn_Banach/Hahn_Banach_Ext_Lemmas.thy \ Hahn_Banach/Hahn_Banach_Sup_Lemmas.thy Hahn_Banach/Linearform.thy \ Hahn_Banach/Normed_Space.thy Hahn_Banach/README.html \ Hahn_Banach/ROOT.ML Hahn_Banach/Subspace.thy \ Hahn_Banach/Vector_Space.thy Hahn_Banach/Zorn_Lemma.thy \ Hahn_Banach/document/root.bib Hahn_Banach/document/root.tex @$(ISABELLE_TOOL) usedir -g true $(OUT)/HOL Hahn_Banach ## HOL-Subst HOL-Subst: HOL $(LOG)/HOL-Subst.gz $(LOG)/HOL-Subst.gz: $(OUT)/HOL Subst/AList.thy Subst/ROOT.ML \ Subst/Subst.thy Subst/UTerm.thy Subst/Unifier.thy Subst/Unify.thy @$(ISABELLE_TOOL) usedir $(OUT)/HOL Subst ## HOL-Induct HOL-Induct: HOL $(LOG)/HOL-Induct.gz $(LOG)/HOL-Induct.gz: $(OUT)/HOL Induct/Com.thy Induct/Comb.thy \ Induct/LFilter.thy Induct/LList.thy Induct/Ordinals.thy \ Induct/PropLog.thy Induct/QuoNestedDataType.thy \ Induct/QuoDataType.thy Induct/ROOT.ML Induct/Sexp.thy \ Induct/Sigma_Algebra.thy Induct/SList.thy Induct/ABexp.thy \ Induct/Term.thy Induct/Tree.thy Induct/document/root.tex @$(ISABELLE_TOOL) usedir $(OUT)/HOL Induct ## HOL-IMP HOL-IMP: HOL $(LOG)/HOL-IMP.gz $(LOG)/HOL-IMP.gz: $(OUT)/HOL IMP/Com.thy IMP/Compiler0.thy \ IMP/Compiler.thy IMP/Denotation.thy IMP/Expr.thy IMP/Hoare.thy \ IMP/Natural.thy IMP/Examples.thy IMP/Transition.thy IMP/VC.thy \ IMP/ROOT.ML IMP/document/root.tex IMP/document/root.bib @$(ISABELLE_TOOL) usedir -g true $(OUT)/HOL IMP ## HOL-IMPP HOL-IMPP: HOL $(LOG)/HOL-IMPP.gz $(LOG)/HOL-IMPP.gz: $(OUT)/HOL IMPP/ROOT.ML IMPP/Com.thy \ IMPP/Natural.thy IMPP/Hoare.thy IMPP/Misc.thy IMPP/EvenOdd.thy @$(ISABELLE_TOOL) usedir $(OUT)/HOL IMPP ## HOL-Import IMPORTER_FILES = Import/lazy_seq.ML Import/proof_kernel.ML Import/replay.ML \ Import/shuffler.ML Import/MakeEqual.thy Import/HOL4Setup.thy \ Import/HOL4Syntax.thy Import/HOL4Compat.thy Import/import_syntax.ML \ Import/hol4rews.ML Import/import.ML Import/ROOT.ML IMPORTER_HOLLIGHT_FILES = Import/proof_kernel.ML Import/replay.ML \ Import/shuffler.ML Import/MakeEqual.thy Import/HOL4Setup.thy \ Import/HOL4Syntax.thy Import/HOLLightCompat.thy Import/import_syntax.ML \ Import/hol4rews.ML Import/import.ML Import/ROOT.ML HOL-Import: HOL $(LOG)/HOL-Import.gz $(LOG)/HOL-Import.gz: $(OUT)/HOL $(IMPORTER_FILES) @$(ISABELLE_TOOL) usedir $(OUT)/HOL Import ## HOL-Generate-HOL HOL-Generate-HOL: HOL $(LOG)/HOL-Generate-HOL.gz $(LOG)/HOL-Generate-HOL.gz: $(OUT)/HOL \ $(IMPORTER_FILES) Import/Generate-HOL/GenHOL4Base.thy \ Import/Generate-HOL/GenHOL4Prob.thy \ Import/Generate-HOL/GenHOL4Real.thy \ Import/Generate-HOL/GenHOL4Vec.thy \ Import/Generate-HOL/GenHOL4Word32.thy Import/Generate-HOL/ROOT.ML @cd Import; $(ISABELLE_TOOL) usedir $(OUT)/HOL Generate-HOL ## HOL-Generate-HOLLight HOL-Generate-HOLLight: HOL $(LOG)/HOL-Generate-HOLLight.gz $(LOG)/HOL-Generate-HOLLight.gz: $(OUT)/HOL \ $(IMPORTER_HOLLIGHT_FILES) Import/Generate-HOLLight/GenHOLLight.thy \ Import/Generate-HOLLight/ROOT.ML @cd Import; $(ISABELLE_TOOL) usedir $(OUT)/HOL Generate-HOLLight ## HOL-Import-HOL HOL4: HOL $(LOG)/HOL4.gz HOL_IMPORT_FILES = arithmetic.imp bits.imp boolean_sequence.imp bool.imp \ bword_arith.imp bword_bitop.imp bword_num.imp combin.imp divides.imp \ hrat.imp hreal.imp ind_type.imp lim.imp list.imp marker.imp nets.imp \ numeral.imp num.imp one.imp operator.imp option.imp pair.imp poly.imp \ powser.imp pred_set.imp prime.imp prim_rec.imp prob_algebra.imp \ prob_canon.imp prob_extra.imp prob.imp prob_indep.imp prob_pseudo.imp \ prob_uniform.imp realax.imp real.imp relation.imp res_quan.imp \ rich_list.imp \ seq.imp state_transformer.imp sum.imp topology.imp transc.imp word32.imp \ word_base.imp word_bitop.imp word_num.imp $(LOG)/HOL4.gz: $(OUT)/HOL $(IMPORTER_FILES) \ $(HOL_IMPORT_FILES:%=Import/HOL/%) Import/HOL/HOL4Base.thy \ Import/HOL/HOL4Prob.thy Import/HOL/HOL4Real.thy \ Import/HOL/HOL4Vec.thy Import/HOL/HOL4Word32.thy Import/HOL/HOL4.thy \ Import/HOL/ROOT.ML @cd Import/HOL; $(ISABELLE_TOOL) usedir -b $(OUT)/HOL HOL4 HOLLight: HOL $(LOG)/HOLLight.gz $(LOG)/HOLLight.gz: $(OUT)/HOL $(IMPORTER_HOLLIGHT_FILES) \ Import/HOLLight/hollight.imp Import/HOLLight/HOLLight.thy \ Import/HOLLight/ROOT.ML @cd Import/HOLLight; $(ISABELLE_TOOL) usedir -b $(OUT)/HOL HOLLight ## HOL-NewNumberTheory HOL-NewNumberTheory: HOL $(LOG)/HOL-NewNumberTheory.gz $(LOG)/HOL-NewNumberTheory.gz: $(OUT)/HOL $(ALGEBRA_DEPENDENCIES) \ Library/Multiset.thy \ NewNumberTheory/Binomial.thy \ NewNumberTheory/Cong.thy \ NewNumberTheory/Fib.thy \ NewNumberTheory/MiscAlgebra.thy \ NewNumberTheory/Residues.thy \ NewNumberTheory/UniqueFactorization.thy \ NewNumberTheory/ROOT.ML @$(ISABELLE_TOOL) usedir -g true $(OUT)/HOL NewNumberTheory ## HOL-NumberTheory HOL-NumberTheory: HOL $(LOG)/HOL-NumberTheory.gz $(LOG)/HOL-NumberTheory.gz: $(OUT)/HOL Library/Permutation.thy \ Library/Primes.thy NumberTheory/Fib.thy \ NumberTheory/Factorization.thy NumberTheory/BijectionRel.thy \ NumberTheory/Chinese.thy NumberTheory/EulerFermat.thy \ NumberTheory/IntFact.thy NumberTheory/IntPrimes.thy \ NumberTheory/WilsonBij.thy NumberTheory/WilsonRuss.thy \ NumberTheory/Finite2.thy NumberTheory/Int2.thy \ NumberTheory/EvenOdd.thy NumberTheory/Residues.thy \ NumberTheory/Euler.thy NumberTheory/Gauss.thy \ NumberTheory/Quadratic_Reciprocity.thy Library/Infinite_Set.thy \ NumberTheory/ROOT.ML @$(ISABELLE_TOOL) usedir -g true $(OUT)/HOL NumberTheory ## HOL-Hoare HOL-Hoare: HOL $(LOG)/HOL-Hoare.gz $(LOG)/HOL-Hoare.gz: $(OUT)/HOL Hoare/Arith2.thy Hoare/Examples.thy \ Hoare/Hoare.thy Hoare/hoare_tac.ML Hoare/Heap.thy \ Hoare/HeapSyntax.thy Hoare/Pointer_Examples.thy Hoare/ROOT.ML \ Hoare/ExamplesAbort.thy Hoare/HeapSyntaxAbort.thy \ Hoare/HoareAbort.thy Hoare/SchorrWaite.thy Hoare/Separation.thy \ Hoare/SepLogHeap.thy Hoare/document/root.tex Hoare/document/root.bib @$(ISABELLE_TOOL) usedir $(OUT)/HOL Hoare ## HOL-HoareParallel HOL-HoareParallel: HOL $(LOG)/HOL-HoareParallel.gz $(LOG)/HOL-HoareParallel.gz: $(OUT)/HOL HoareParallel/Gar_Coll.thy \ HoareParallel/Graph.thy HoareParallel/Mul_Gar_Coll.thy \ HoareParallel/OG_Com.thy HoareParallel/OG_Examples.thy \ HoareParallel/OG_Hoare.thy HoareParallel/OG_Syntax.thy \ HoareParallel/OG_Tactics.thy HoareParallel/OG_Tran.thy \ HoareParallel/Quote_Antiquote.thy HoareParallel/RG_Com.thy \ HoareParallel/RG_Examples.thy HoareParallel/RG_Hoare.thy \ HoareParallel/RG_Syntax.thy HoareParallel/RG_Tran.thy \ HoareParallel/ROOT.ML HoareParallel/document/root.tex \ HoareParallel/document/root.bib @$(ISABELLE_TOOL) usedir -g true $(OUT)/HOL HoareParallel ## HOL-MetisExamples HOL-MetisExamples: HOL $(LOG)/HOL-MetisExamples.gz $(LOG)/HOL-MetisExamples.gz: $(OUT)/HOL MetisExamples/ROOT.ML \ MetisExamples/Abstraction.thy MetisExamples/BigO.thy \ MetisExamples/BT.thy MetisExamples/Message.thy \ MetisExamples/Tarski.thy MetisExamples/TransClosure.thy \ MetisExamples/set.thy @$(ISABELLE_TOOL) usedir $(OUT)/HOL MetisExamples ## HOL-Algebra HOL-Algebra: HOL $(LOG)/HOL-Algebra.gz ALGEBRA_DEPENDENCIES = $(OUT)/HOL \ Algebra/ROOT.ML \ Library/Binomial.thy \ Library/FuncSet.thy \ Library/Multiset.thy \ Library/Permutation.thy \ Library/Primes.thy \ Algebra/AbelCoset.thy \ Algebra/Bij.thy \ Algebra/Congruence.thy \ Algebra/Coset.thy \ Algebra/Divisibility.thy \ Algebra/Exponent.thy \ Algebra/FiniteProduct.thy \ Algebra/Group.thy \ Algebra/Ideal.thy \ Algebra/IntRing.thy \ Algebra/Lattice.thy \ Algebra/Module.thy \ Algebra/QuotRing.thy \ Algebra/Ring.thy \ Algebra/RingHom.thy \ Algebra/Sylow.thy \ Algebra/UnivPoly.thy \ Algebra/abstract/Abstract.thy \ Algebra/abstract/Factor.thy \ Algebra/abstract/Field.thy \ Algebra/abstract/Ideal2.thy \ Algebra/abstract/PID.thy \ Algebra/abstract/Ring2.thy \ Algebra/abstract/RingHomo.thy \ Algebra/document/root.tex \ Algebra/document/root.tex \ Algebra/poly/LongDiv.thy \ Algebra/poly/PolyHomo.thy \ Algebra/poly/Polynomial.thy \ Algebra/poly/UnivPoly2.thy \ Algebra/ringsimp.ML $(LOG)/HOL-Algebra.gz: $(ALGEBRA_DEPENDENCIES) @cd Algebra; $(ISABELLE_TOOL) usedir -b -g true -V outline=/proof,/ML $(OUT)/HOL HOL-Algebra ## HOL-Auth HOL-Auth: HOL $(LOG)/HOL-Auth.gz $(LOG)/HOL-Auth.gz: $(OUT)/HOL \ Auth/CertifiedEmail.thy Auth/Event.thy Auth/Message.thy \ Auth/NS_Public.thy Auth/NS_Public_Bad.thy Auth/NS_Shared.thy \ Auth/OtwayRees.thy Auth/OtwayReesBella.thy Auth/OtwayRees_AN.thy \ Auth/OtwayRees_Bad.thy Auth/Public.thy Auth/ROOT.ML Auth/Recur.thy \ Auth/Shared.thy Auth/TLS.thy Auth/WooLam.thy Auth/Kerberos_BAN.thy \ Auth/Kerberos_BAN_Gets.thy Auth/KerberosIV.thy \ Auth/KerberosIV_Gets.thy Auth/KerberosV.thy Auth/Yahalom.thy \ Auth/Yahalom2.thy Auth/Yahalom_Bad.thy Auth/ZhouGollmann.thy \ Auth/Guard/Analz.thy Auth/Guard/Extensions.thy Auth/Guard/GuardK.thy \ Auth/Guard/Guard_Public.thy Auth/Guard/Guard_Shared.thy \ Auth/Guard/Guard.thy Auth/Guard/List_Msg.thy \ Auth/Guard/Guard_NS_Public.thy Auth/Guard/Guard_OtwayRees.thy \ Auth/Guard/P1.thy Auth/Guard/P2.thy Auth/Guard/Proto.thy \ Auth/Guard/Guard_Yahalom.thy Auth/Smartcard/EventSC.thy \ Auth/Smartcard/ShoupRubinBella.thy Auth/Smartcard/ShoupRubin.thy \ Auth/Smartcard/Smartcard.thy Auth/document/root.tex @$(ISABELLE_TOOL) usedir -g true $(OUT)/HOL Auth ## HOL-UNITY HOL-UNITY: HOL $(LOG)/HOL-UNITY.gz $(LOG)/HOL-UNITY.gz: $(OUT)/HOL Library/Multiset.thy UNITY/ROOT.ML \ UNITY/UNITY_Main.thy UNITY/UNITY_tactics.ML UNITY/Comp.thy \ UNITY/Constrains.thy UNITY/Detects.thy UNITY/ELT.thy \ UNITY/Extend.thy UNITY/FP.thy UNITY/Follows.thy UNITY/Guar.thy \ UNITY/Lift_prog.thy UNITY/ListOrder.thy UNITY/ProgressSets.thy \ UNITY/PPROD.thy UNITY/Project.thy UNITY/Rename.thy \ UNITY/Transformers.thy UNITY/SubstAx.thy UNITY/UNITY.thy \ UNITY/Union.thy UNITY/WFair.thy UNITY/Simple/Channel.thy \ UNITY/Simple/Common.thy UNITY/Simple/Deadlock.thy \ UNITY/Simple/Lift.thy UNITY/Simple/Mutex.thy \ UNITY/Simple/NSP_Bad.thy UNITY/Simple/Network.thy \ UNITY/Simple/Reach.thy UNITY/Simple/Reachability.thy \ UNITY/Simple/Token.thy UNITY/Comp/Alloc.thy UNITY/Comp/AllocBase.thy \ UNITY/Comp/AllocImpl.thy UNITY/Comp/Client.thy \ UNITY/Comp/Counter.thy UNITY/Comp/Counterc.thy \ UNITY/Comp/Handshake.thy UNITY/Comp/PriorityAux.thy \ UNITY/Comp/Priority.thy UNITY/Comp/Progress.thy \ UNITY/Comp/TimerArray.thy UNITY/document/root.tex @$(ISABELLE_TOOL) usedir -g true $(OUT)/HOL UNITY ## HOL-Unix HOL-Unix: HOL $(LOG)/HOL-Unix.gz $(LOG)/HOL-Unix.gz: $(OUT)/HOL Library/Nested_Environment.thy \ Library/List_Prefix.thy Unix/ROOT.ML Unix/Unix.thy \ Unix/document/root.bib Unix/document/root.tex @$(ISABELLE_TOOL) usedir $(OUT)/HOL Unix ## HOL-ZF HOL-ZF: HOL $(LOG)/HOL-ZF.gz $(LOG)/HOL-ZF.gz: $(OUT)/HOL ZF/ROOT.ML ZF/Helper.thy ZF/LProd.thy \ ZF/HOLZF.thy ZF/MainZF.thy ZF/Games.thy ZF/document/root.tex @$(ISABELLE_TOOL) usedir $(OUT)/HOL ZF ## HOL-Modelcheck HOL-Modelcheck: HOL $(LOG)/HOL-Modelcheck.gz $(LOG)/HOL-Modelcheck.gz: $(OUT)/HOL Modelcheck/CTL.thy \ Modelcheck/EindhovenExample.thy Modelcheck/EindhovenSyn.thy \ Modelcheck/MuCalculus.thy Modelcheck/MuckeExample1.thy \ Modelcheck/MuckeExample2.thy Modelcheck/MuckeSyn.thy \ Modelcheck/ROOT.ML Modelcheck/mucke_oracle.ML @$(ISABELLE_TOOL) usedir $(OUT)/HOL Modelcheck ## HOL-Imperative_HOL HOL-Imperative_HOL: HOL $(LOG)/HOL-Imperative_HOL.gz $(LOG)/HOL-Imperative_HOL.gz: $(OUT)/HOL Imperative_HOL/Heap.thy \ Imperative_HOL/Heap_Monad.thy Imperative_HOL/Array.thy \ Imperative_HOL/Relational.thy \ Imperative_HOL/Ref.thy Imperative_HOL/Imperative_HOL.thy \ Imperative_HOL/Imperative_HOL_ex.thy \ Imperative_HOL/ex/Imperative_Quicksort.thy \ Imperative_HOL/ex/Subarray.thy \ Imperative_HOL/ex/Sublist.thy @$(ISABELLE_TOOL) usedir $(OUT)/HOL Imperative_HOL ## HOL-SizeChange HOL-SizeChange: HOL $(LOG)/HOL-SizeChange.gz $(LOG)/HOL-SizeChange.gz: $(OUT)/HOL Library/Kleene_Algebra.thy \ SizeChange/Graphs.thy SizeChange/Misc_Tools.thy \ SizeChange/Criterion.thy SizeChange/Correctness.thy \ SizeChange/Interpretation.thy SizeChange/Implementation.thy \ SizeChange/Size_Change_Termination.thy SizeChange/Examples.thy \ SizeChange/sct.ML SizeChange/ROOT.ML @$(ISABELLE_TOOL) usedir $(OUT)/HOL SizeChange ## HOL-Decision_Procs HOL-Decision_Procs: HOL $(LOG)/HOL-Decision_Procs.gz $(LOG)/HOL-Decision_Procs.gz: $(OUT)/HOL \ Decision_Procs/Approximation.thy \ Decision_Procs/Cooper.thy \ Decision_Procs/cooper_tac.ML \ Decision_Procs/Dense_Linear_Order.thy \ Decision_Procs/Ferrack.thy \ Decision_Procs/ferrack_tac.ML \ Decision_Procs/MIR.thy \ Decision_Procs/mir_tac.ML \ Decision_Procs/Decision_Procs.thy \ Decision_Procs/ex/Dense_Linear_Order_Ex.thy \ Decision_Procs/ex/Approximation_Ex.thy \ Decision_Procs/ROOT.ML @$(ISABELLE_TOOL) usedir $(OUT)/HOL Decision_Procs ## HOL-Docs HOL-Docs: HOL $(LOG)/HOL-Docs.gz $(LOG)/HOL-Docs.gz: $(OUT)/HOL Docs/Main_Doc.thy Docs/ROOT.ML \ Docs/document/root.tex @$(ISABELLE_TOOL) usedir -D generated $(OUT)/HOL Docs ## HOL-Lambda HOL-Lambda: HOL $(LOG)/HOL-Lambda.gz $(LOG)/HOL-Lambda.gz: $(OUT)/HOL Lambda/Commutation.thy Lambda/Eta.thy \ Lambda/InductTermi.thy Lambda/Lambda.thy Lambda/ListApplication.thy \ Lambda/ListBeta.thy Lambda/ListOrder.thy Lambda/NormalForm.thy \ Lambda/ParRed.thy Lambda/Standardization.thy Lambda/StrongNorm.thy \ Lambda/Type.thy Lambda/WeakNorm.thy Lambda/ROOT.ML \ Lambda/document/root.bib Lambda/document/root.tex @$(ISABELLE_TOOL) usedir -g true -m no_brackets $(OUT)/HOL Lambda ## HOL-Prolog HOL-Prolog: HOL $(LOG)/HOL-Prolog.gz $(LOG)/HOL-Prolog.gz: $(OUT)/HOL Prolog/ROOT.ML Prolog/prolog.ML \ Prolog/HOHH.thy Prolog/Test.thy Prolog/Func.thy Prolog/Type.thy @$(ISABELLE_TOOL) usedir $(OUT)/HOL Prolog ## HOL-W0 HOL-W0: HOL $(LOG)/HOL-W0.gz $(LOG)/HOL-W0.gz: $(OUT)/HOL W0/ROOT.ML W0/W0.thy W0/document/root.tex @$(ISABELLE_TOOL) usedir $(OUT)/HOL W0 ## HOL-MicroJava HOL-MicroJava: HOL $(LOG)/HOL-MicroJava.gz $(LOG)/HOL-MicroJava.gz: $(OUT)/HOL Library/Executable_Set.thy \ MicroJava/ROOT.ML MicroJava/Comp/AuxLemmas.thy \ MicroJava/Comp/CorrComp.thy MicroJava/Comp/CorrCompTp.thy \ MicroJava/Comp/DefsComp.thy MicroJava/Comp/Index.thy \ MicroJava/Comp/LemmasComp.thy MicroJava/Comp/NatCanonify.thy \ MicroJava/Comp/TranslComp.thy MicroJava/Comp/TranslCompTp.thy \ MicroJava/Comp/TypeInf.thy MicroJava/J/Conform.thy \ MicroJava/J/Eval.thy MicroJava/J/JBasis.thy \ MicroJava/J/JTypeSafe.thy MicroJava/J/Decl.thy MicroJava/J/State.thy \ MicroJava/J/Term.thy MicroJava/J/Type.thy MicroJava/J/TypeRel.thy \ MicroJava/J/WellForm.thy MicroJava/J/Value.thy \ MicroJava/J/WellType.thy MicroJava/J/Example.thy \ MicroJava/J/JListExample.thy MicroJava/JVM/JVMExec.thy \ MicroJava/JVM/JVMInstructions.thy MicroJava/JVM/JVMState.thy \ MicroJava/JVM/JVMExecInstr.thy MicroJava/JVM/JVMListExample.thy \ MicroJava/JVM/JVMExceptions.thy MicroJava/BV/BVSpec.thy \ MicroJava/BV/BVSpecTypeSafe.thy MicroJava/BV/Correct.thy \ MicroJava/BV/Err.thy MicroJava/BV/JType.thy MicroJava/BV/JVM.thy \ MicroJava/BV/JVMType.thy MicroJava/BV/Kildall.thy \ MicroJava/BV/LBVSpec.thy MicroJava/BV/Listn.thy MicroJava/BV/Opt.thy \ MicroJava/BV/Product.thy MicroJava/BV/Semilat.thy \ MicroJava/BV/Effect.thy MicroJava/BV/EffectMono.thy \ MicroJava/BV/Typing_Framework.thy \ MicroJava/BV/Typing_Framework_err.thy \ MicroJava/BV/Typing_Framework_JVM.thy MicroJava/BV/BVExample.thy \ MicroJava/BV/LBVSpec.thy MicroJava/BV/LBVCorrect.thy \ MicroJava/BV/LBVComplete.thy MicroJava/BV/LBVJVM.thy \ MicroJava/document/root.bib MicroJava/document/root.tex \ MicroJava/document/introduction.tex @$(ISABELLE_TOOL) usedir -g true $(OUT)/HOL MicroJava ## HOL-NanoJava HOL-NanoJava: HOL $(LOG)/HOL-NanoJava.gz $(LOG)/HOL-NanoJava.gz: $(OUT)/HOL NanoJava/ROOT.ML NanoJava/Term.thy \ NanoJava/Decl.thy NanoJava/TypeRel.thy NanoJava/State.thy \ NanoJava/OpSem.thy NanoJava/AxSem.thy NanoJava/AxSem.thy \ NanoJava/document/root.bib NanoJava/document/root.tex @$(ISABELLE_TOOL) usedir -g true $(OUT)/HOL NanoJava ## HOL-Bali HOL-Bali: HOL $(LOG)/HOL-Bali.gz $(LOG)/HOL-Bali.gz: $(OUT)/HOL Bali/AxCompl.thy Bali/AxExample.thy \ Bali/AxSem.thy Bali/AxSound.thy Bali/Basis.thy Bali/Conform.thy \ Bali/Decl.thy Bali/DeclConcepts.thy Bali/Eval.thy Bali/Evaln.thy \ Bali/Example.thy Bali/Name.thy Bali/ROOT.ML Bali/State.thy \ Bali/Table.thy Bali/Term.thy Bali/Trans.thy Bali/Type.thy \ Bali/TypeRel.thy Bali/TypeSafe.thy Bali/Value.thy Bali/WellForm.thy \ Bali/DefiniteAssignment.thy Bali/DefiniteAssignmentCorrect.thy \ Bali/WellType.thy Bali/document/root.tex @$(ISABELLE_TOOL) usedir -g true $(OUT)/HOL Bali ## HOL-Extraction HOL-Extraction: HOL $(LOG)/HOL-Extraction.gz $(LOG)/HOL-Extraction.gz: $(OUT)/HOL Library/Efficient_Nat.thy \ Extraction/Euclid.thy Extraction/Greatest_Common_Divisor.thy \ Extraction/Higman.thy Extraction/Pigeonhole.thy \ Extraction/QuotRem.thy Extraction/ROOT.ML Extraction/Util.thy \ Extraction/Warshall.thy Extraction/document/root.tex \ Extraction/document/root.bib @$(ISABELLE_TOOL) usedir $(OUT)/HOL Extraction ## HOL-IOA HOL-IOA: HOL $(LOG)/HOL-IOA.gz $(LOG)/HOL-IOA.gz: $(OUT)/HOL IOA/Asig.thy IOA/IOA.thy IOA/ROOT.ML \ IOA/Solve.thy @$(ISABELLE_TOOL) usedir $(OUT)/HOL IOA ## HOL-Lattice HOL-Lattice: HOL $(LOG)/HOL-Lattice.gz $(LOG)/HOL-Lattice.gz: $(OUT)/HOL Lattice/Bounds.thy \ Lattice/CompleteLattice.thy Lattice/Lattice.thy Lattice/Orders.thy \ Lattice/ROOT.ML Lattice/document/root.tex @$(ISABELLE_TOOL) usedir $(OUT)/HOL Lattice ## HOL-ex HOL-ex: HOL $(LOG)/HOL-ex.gz $(LOG)/HOL-ex.gz: $(OUT)/HOL Library/Commutative_Ring.thy \ Library/Primes.thy ex/Abstract_NAT.thy ex/Antiquote.thy \ ex/Arith_Examples.thy \ ex/Arithmetic_Series_Complex.thy ex/BT.thy ex/BinEx.thy \ ex/Binary.thy ex/CTL.thy ex/Chinese.thy ex/Classical.thy \ ex/CodegenSML_Test.thy ex/Codegenerator_Candidates.thy \ ex/Codegenerator_Pretty.thy ex/Codegenerator_Test.thy \ ex/Codegenerator_Pretty_Test.thy ex/Coherent.thy \ ex/Commutative_RingEx.thy ex/Commutative_Ring_Complete.thy \ ex/Efficient_Nat_examples.thy \ ex/Eval_Examples.thy ex/Fundefs.thy \ ex/Groebner_Examples.thy ex/Guess.thy ex/HarmonicSeries.thy \ ex/Hebrew.thy ex/Hex_Bin_Examples.thy ex/Higher_Order_Logic.thy \ ex/Hilbert_Classical.thy \ ex/Induction_Scheme.thy ex/InductiveInvariant.thy \ ex/InductiveInvariant_examples.thy ex/Intuitionistic.thy \ ex/Lagrange.thy ex/LocaleTest2.thy ex/MT.thy ex/MergeSort.thy \ ex/Meson_Test.thy ex/MonoidGroup.thy ex/Multiquote.thy ex/NatSum.thy \ ex/Numeral.thy ex/PER.thy ex/PresburgerEx.thy ex/Primrec.thy \ ex/Quickcheck_Examples.thy ex/ROOT.ML \ ex/Recdefs.thy ex/Records.thy ex/ReflectionEx.thy \ ex/Refute_Examples.thy ex/SAT_Examples.thy ex/SVC_Oracle.thy \ ex/Serbian.thy ex/Sqrt.thy ex/Sqrt_Script.thy \ ex/Sudoku.thy ex/Tarski.thy \ ex/Termination.thy ex/Unification.thy ex/document/root.bib \ ex/document/root.tex ex/set.thy ex/svc_funcs.ML ex/svc_test.thy \ - ex/Predicate_Compile.thy ex/predicate_compile.ML ex/Predicate_Compile_ex.thy + ex/Predicate_Compile.thy ex/predicate_compile.ML ex/Predicate_Compile_ex.thy \ + ex/Mirabelle.thy ex/mirabelle.ML @$(ISABELLE_TOOL) usedir $(OUT)/HOL ex ## HOL-Isar_examples HOL-Isar_examples: HOL $(LOG)/HOL-Isar_examples.gz $(LOG)/HOL-Isar_examples.gz: $(OUT)/HOL Isar_examples/Basic_Logic.thy \ Isar_examples/Cantor.thy Isar_examples/Drinker.thy \ Isar_examples/Expr_Compiler.thy Isar_examples/Fibonacci.thy \ Isar_examples/Group.thy Isar_examples/Hoare.thy \ Isar_examples/Hoare_Ex.thy Isar_examples/Knaster_Tarski.thy \ Isar_examples/Mutilated_Checkerboard.thy \ Isar_examples/Nested_Datatype.thy Isar_examples/Peirce.thy \ Isar_examples/Puzzle.thy Isar_examples/Summation.thy \ Isar_examples/ROOT.ML Isar_examples/document/proof.sty \ Isar_examples/document/root.bib Isar_examples/document/root.tex \ Isar_examples/document/style.tex Hoare/hoare_tac.ML @$(ISABELLE_TOOL) usedir $(OUT)/HOL Isar_examples ## HOL-SET-Protocol HOL-SET-Protocol: HOL $(LOG)/HOL-SET-Protocol.gz $(LOG)/HOL-SET-Protocol.gz: $(OUT)/HOL SET-Protocol/ROOT.ML \ SET-Protocol/MessageSET.thy SET-Protocol/EventSET.thy \ SET-Protocol/PublicSET.thy SET-Protocol/Cardholder_Registration.thy \ SET-Protocol/Merchant_Registration.thy SET-Protocol/Purchase.thy \ SET-Protocol/document/root.tex @$(ISABELLE_TOOL) usedir -g true $(OUT)/HOL SET-Protocol ## HOL-Matrix HOL-Matrix: HOL $(LOG)/HOL-Matrix.gz $(LOG)/HOL-Matrix.gz: $(OUT)/HOL \ $(SRC)/Tools/Compute_Oracle/Compute_Oracle.thy \ $(SRC)/Tools/Compute_Oracle/am_compiler.ML \ $(SRC)/Tools/Compute_Oracle/am_interpreter.ML \ $(SRC)/Tools/Compute_Oracle/am.ML \ $(SRC)/Tools/Compute_Oracle/linker.ML \ $(SRC)/Tools/Compute_Oracle/am_ghc.ML \ $(SRC)/Tools/Compute_Oracle/am_sml.ML \ $(SRC)/Tools/Compute_Oracle/compute.ML \ Tools/ComputeFloat.thy Tools/float_arith.ML \ Matrix/Matrix.thy Matrix/SparseMatrix.thy Matrix/LP.thy \ Matrix/document/root.tex Matrix/ROOT.ML Matrix/cplex/Cplex.thy \ Matrix/cplex/CplexMatrixConverter.ML Matrix/cplex/Cplex_tools.ML \ Matrix/cplex/FloatSparseMatrixBuilder.ML Matrix/cplex/fspmlp.ML \ Matrix/cplex/matrixlp.ML @$(ISABELLE_TOOL) usedir -g true $(OUT)/HOL Matrix ## TLA TLA: HOL $(OUT)/TLA $(OUT)/TLA: $(OUT)/HOL TLA/Action.thy TLA/Init.thy TLA/Intensional.thy \ TLA/ROOT.ML TLA/Stfun.thy TLA/TLA.thy @cd TLA; $(ISABELLE_TOOL) usedir -b $(OUT)/HOL TLA ## TLA-Inc TLA-Inc: TLA $(LOG)/TLA-Inc.gz $(LOG)/TLA-Inc.gz: $(OUT)/TLA TLA/Inc/Inc.thy @cd TLA; $(ISABELLE_TOOL) usedir $(OUT)/TLA Inc ## TLA-Buffer TLA-Buffer: TLA $(LOG)/TLA-Buffer.gz $(LOG)/TLA-Buffer.gz: $(OUT)/TLA TLA/Buffer/Buffer.thy TLA/Buffer/DBuffer.thy @cd TLA; $(ISABELLE_TOOL) usedir $(OUT)/TLA Buffer ## TLA-Memory TLA-Memory: TLA $(LOG)/TLA-Memory.gz $(LOG)/TLA-Memory.gz: $(OUT)/TLA TLA/Memory/MemClerk.thy \ TLA/Memory/MemClerkParameters.thy TLA/Memory/Memory.thy \ TLA/Memory/MemoryImplementation.thy TLA/Memory/MemoryParameters.thy \ TLA/Memory/ProcedureInterface.thy TLA/Memory/RPC.thy \ TLA/Memory/RPCMemoryParams.thy TLA/Memory/RPCParameters.thy @cd TLA; $(ISABELLE_TOOL) usedir $(OUT)/TLA Memory ## HOL-Nominal HOL-Nominal: HOL $(OUT)/HOL-Nominal $(OUT)/HOL-Nominal: $(OUT)/HOL Nominal/ROOT.ML \ Nominal/Nominal.thy \ Nominal/nominal_atoms.ML \ Nominal/nominal_datatype.ML \ Nominal/nominal_fresh_fun.ML \ Nominal/nominal_induct.ML \ Nominal/nominal_inductive.ML \ Nominal/nominal_inductive2.ML \ Nominal/nominal_permeq.ML \ Nominal/nominal_primrec.ML \ Nominal/nominal_thmdecls.ML \ Library/Infinite_Set.thy @cd Nominal; $(ISABELLE_TOOL) usedir -b -g true $(OUT)/HOL HOL-Nominal ## HOL-Nominal-Examples HOL-Nominal-Examples: HOL-Nominal $(LOG)/HOL-Nominal-Examples.gz $(LOG)/HOL-Nominal-Examples.gz: $(OUT)/HOL-Nominal \ Nominal/Examples/CK_Machine.thy \ Nominal/Examples/CR.thy \ Nominal/Examples/CR_Takahashi.thy \ Nominal/Examples/Class.thy \ Nominal/Examples/Compile.thy \ Nominal/Examples/Contexts.thy \ Nominal/Examples/Crary.thy \ Nominal/Examples/Fsub.thy \ Nominal/Examples/Height.thy \ Nominal/Examples/Lam_Funs.thy \ Nominal/Examples/Lambda_mu.thy \ Nominal/Examples/LocalWeakening.thy \ Nominal/Examples/ROOT.ML \ Nominal/Examples/SN.thy \ Nominal/Examples/SOS.thy \ Nominal/Examples/Standardization.thy \ Nominal/Examples/Support.thy \ Nominal/Examples/Type_Preservation.thy \ Nominal/Examples/VC_Condition.thy \ Nominal/Examples/W.thy \ Nominal/Examples/Weakening.thy @cd Nominal; $(ISABELLE_TOOL) usedir $(OUT)/HOL-Nominal Examples ## HOL-Word HOL-Word: HOL $(OUT)/HOL-Word $(OUT)/HOL-Word: $(OUT)/HOL Word/ROOT.ML \ Library/Boolean_Algebra.thy \ Library/Numeral_Type.thy Word/Num_Lemmas.thy Word/TdThs.thy \ Word/Size.thy Word/BinGeneral.thy Word/BinOperations.thy \ Word/BinBoolList.thy Word/BitSyntax.thy Word/WordDefinition.thy \ Word/WordArith.thy Word/WordBitwise.thy Word/WordShift.thy \ Word/WordGenLib.thy Word/Word.thy Word/document/root.tex \ Word/document/root.bib @cd Word; $(ISABELLE_TOOL) usedir -b -g true $(OUT)/HOL HOL-Word ## HOL-Word-Examples HOL-Word-Examples: HOL-Word $(LOG)/HOL-Word-Examples.gz $(LOG)/HOL-Word-Examples.gz: $(OUT)/HOL-Word Word/Examples/ROOT.ML \ Word/Examples/WordExamples.thy @cd Word; $(ISABELLE_TOOL) usedir $(OUT)/HOL-Word Examples ## HOL-Statespace HOL-Statespace: HOL $(LOG)/HOL-Statespace.gz $(LOG)/HOL-Statespace.gz: $(OUT)/HOL Statespace/DistinctTreeProver.thy \ Statespace/StateFun.thy Statespace/StateSpaceLocale.thy \ Statespace/StateSpaceSyntax.thy Statespace/StateSpaceEx.thy \ Statespace/distinct_tree_prover.ML Statespace/state_space.ML \ Statespace/state_fun.ML Statespace/document/root.tex @$(ISABELLE_TOOL) usedir -g true $(OUT)/HOL Statespace ## HOL-NSA HOL-NSA: HOL $(OUT)/HOL-NSA $(OUT)/HOL-NSA: $(OUT)/HOL \ NSA/CLim.thy \ NSA/CStar.thy \ NSA/NSCA.thy \ NSA/NSComplex.thy \ NSA/HDeriv.thy \ NSA/HLim.thy \ NSA/HLog.thy \ NSA/HSEQ.thy \ NSA/HSeries.thy \ NSA/HTranscendental.thy \ NSA/Hypercomplex.thy \ NSA/HyperDef.thy \ NSA/HyperNat.thy \ NSA/Hyperreal.thy \ NSA/Filter.thy \ NSA/NatStar.thy \ NSA/NSA.thy \ NSA/StarDef.thy \ NSA/Star.thy \ NSA/transfer.ML \ Library/Infinite_Set.thy \ Library/Zorn.thy \ NSA/ROOT.ML @cd NSA; $(ISABELLE_TOOL) usedir -b -g true $(OUT)/HOL HOL-NSA ## HOL-NSA-Examples HOL-NSA-Examples: HOL-NSA $(LOG)/HOL-NSA-Examples.gz $(LOG)/HOL-NSA-Examples.gz: $(OUT)/HOL-NSA NSA/Examples/ROOT.ML \ NSA/Examples/NSPrimes.thy @cd NSA; $(ISABELLE_TOOL) usedir $(OUT)/HOL-NSA Examples ## clean clean: @rm -f $(OUT)/HOL-Plain $(OUT)/HOL-Main $(OUT)/HOL \ $(OUT)/HOL-Nominal $(OUT)/TLA $(LOG)/HOL.gz \ $(LOG)/TLA.gz $(LOG)/HOL-Isar_examples.gz \ $(LOG)/HOL-Induct.gz $(LOG)/HOL-ex.gz \ $(LOG)/HOL-Subst.gz $(LOG)/HOL-IMP.gz \ $(LOG)/HOL-IMPP.gz $(LOG)/HOL-Hoare.gz \ $(LOG)/HOL-HoareParallel.gz $(LOG)/HOL-Lex.gz \ $(LOG)/HOL-Algebra.gz $(LOG)/HOL-Auth.gz \ $(LOG)/HOL-UNITY.gz $(LOG)/HOL-Modelcheck.gz \ $(LOG)/HOL-Lambda.gz $(LOG)/HOL-Bali.gz \ $(LOG)/HOL-MicroJava.gz $(LOG)/HOL-NanoJava.gz \ $(LOG)/HOL-Nominal-Examples.gz $(LOG)/HOL-IOA.gz \ $(LOG)/HOL-Lattice $(LOG)/HOL-Matrix \ $(LOG)/HOL-Hahn_Banach.gz $(LOG)/HOL-SET-Protocol.gz \ $(LOG)/TLA-Inc.gz $(LOG)/TLA-Buffer.gz \ $(LOG)/TLA-Memory.gz $(LOG)/HOL-Library.gz \ $(LOG)/HOL-Unix.gz $(OUT)/HOL-Word $(LOG)/HOL-Word.gz \ $(LOG)/HOL-Word-Examples.gz $(OUT)/HOL-NSA \ $(LOG)/HOL-NSA.gz $(LOG)/HOL-NSA-Examples.gz diff --git a/src/HOL/ex/Mirabelle.thy b/src/HOL/ex/Mirabelle.thy new file mode 100644 --- /dev/null +++ b/src/HOL/ex/Mirabelle.thy @@ -0,0 +1,14 @@ +(* Title: Mirabelle.thy + Author: Jasmin Blanchette and Sascha Boehme +*) + +theory Mirabelle +imports Main +uses "mirabelle.ML" +begin + +(* FIXME: use a logfile for each theory file *) + +setup Mirabelle.setup + +end diff --git a/src/HOL/ex/mirabelle.ML b/src/HOL/ex/mirabelle.ML new file mode 100644 --- /dev/null +++ b/src/HOL/ex/mirabelle.ML @@ -0,0 +1,318 @@ +(* Title: mirabelle.ML + Author: Jasmin Blanchette and Sascha Boehme +*) + +signature MIRABELLE = +sig + type action + type settings + val register : string -> action -> theory -> theory + val invoke : string -> settings -> theory -> theory + + val timeout : int Config.T + val verbose : bool Config.T + val set_logfile : string -> theory -> theory + + val setup : theory -> theory + + val step_hook : Toplevel.transition -> Toplevel.state -> Toplevel.state -> + unit + + val goal_thm_of : Proof.state -> thm + val can_apply : (Proof.context -> int -> tactic) -> Proof.state -> bool + val theorems_in_proof_term : Thm.thm -> Thm.thm list + val theorems_of_sucessful_proof : Toplevel.state -> Thm.thm list + val get_setting : settings -> string * string -> string + val get_int_setting : settings -> string * int -> int + +(* FIXME val refute_action : action *) + val quickcheck_action : action + val arith_action : action + val sledgehammer_action : action + val metis_action : action +end + + + +structure Mirabelle (*: MIRABELLE*) = +struct + +(* Mirabelle core *) + +type settings = (string * string) list +type invoked = {pre: Proof.state, post: Toplevel.state option} -> string option +type action = settings -> invoked + +structure Registered = TheoryDataFun +( + type T = action Symtab.table + val empty = Symtab.empty + val copy = I + val extend = I + fun merge _ = Symtab.merge (K true) +) + +fun register name act = Registered.map (Symtab.update_new (name, act)) + + +structure Invoked = TheoryDataFun +( + type T = (string * invoked) list + val empty = [] + val copy = I + val extend = I + fun merge _ = Library.merge (K true) +) + +fun invoke name sts thy = + let + val act = + (case Symtab.lookup (Registered.get thy) name of + SOME act => act + | NONE => error ("The invoked action " ^ quote name ^ + " is not registered.")) + in Invoked.map (cons (name, act sts)) thy end + +val (logfile, setup1) = Attrib.config_string "mirabelle_logfile" "" +val (timeout, setup2) = Attrib.config_int "mirabelle_timeout" 30 +val (verbose, setup3) = Attrib.config_bool "mirabelle_verbose" true +val (start_line, setup4) = Attrib.config_int "mirabelle_start_line" 0 +val (end_line, setup5) = Attrib.config_int "mirabelle_end_line" ~1 + +val setup_config = setup1 #> setup2 #> setup3 #> setup4 #> setup5 + +fun set_logfile name = + let val _ = File.write (Path.explode name) "" (* erase file content *) + in Config.put_thy logfile name end + +local + +fun log thy s = + let fun append_to n = if n = "" then K () else File.append (Path.explode n) + in append_to (Config.get_thy thy logfile) (s ^ "\n") end + (* FIXME: with multithreading and parallel proofs enabled, we might need to + encapsulate this inside a critical section *) + +fun verbose_msg verbose msg = if verbose then SOME msg else NONE + +fun with_time_limit (verb, secs) f x = TimeLimit.timeLimit secs f x + handle TimeLimit.TimeOut => verbose_msg verb "time out" + | ERROR msg => verbose_msg verb ("error: " ^ msg) + +fun capture_exns verb f x = + (case try f x of NONE => verbose_msg verb "exception" | SOME msg => msg) + +fun apply_action (c as (verb, _)) st (name, invoked) = + Option.map (pair name) (capture_exns verb (with_time_limit c invoked) st) + +fun in_range _ _ NONE = true + | in_range l r (SOME i) = (l <= i andalso (r < 0 orelse i <= r)) + +fun only_within_range thy pos f x = + let val l = Config.get_thy thy start_line and r = Config.get_thy thy end_line + in if in_range l r (Position.line_of pos) then f x else [] end + +fun pretty_print verbose pos name msgs = + let + val file = the_default "unknown file" (Position.file_of pos) + + val str0 = string_of_int o the_default 0 + val loc = str0 (Position.line_of pos) ^ ":" ^ str0 (Position.column_of pos) + + val full_loc = if verbose then file ^ ":" ^ loc else "at " ^ loc + val head = full_loc ^ " (" ^ name ^ "):" + + fun pretty_msg (name, msg) = Pretty.block (map Pretty.str [name, ": ", msg]) + in + Pretty.string_of (Pretty.big_list head (map pretty_msg msgs)) + end + +in + +fun basic_hook tr pre post = + let + val thy = Proof.theory_of pre + val pos = Toplevel.pos_of tr + val name = Toplevel.name_of tr + val verb = Config.get_thy thy verbose + val secs = Time.fromSeconds (Config.get_thy thy timeout) + val st = {pre=pre, post=post} + in + Invoked.get thy + |> only_within_range thy pos (map_filter (apply_action (verb, secs) st)) + |> (fn [] => () | msgs => log thy (pretty_print verb pos name msgs)) + end + +end + +fun step_hook tr pre post = + (* FIXME: might require wrapping into "interruptible" *) + if can (Proof.assert_backward o Toplevel.proof_of) pre andalso + not (member (op =) ["disable_pr", "enable_pr"] (Toplevel.name_of tr)) + then basic_hook tr (Toplevel.proof_of pre) (SOME post) + else () (* FIXME: add theory_hook here *) + + + +(* Mirabelle utility functions *) + +val goal_thm_of = snd o snd o Proof.get_goal + +fun can_apply tac st = + let val (ctxt, (facts, goal)) = Proof.get_goal st + in + (case Seq.pull (HEADGOAL (Method.insert_tac facts THEN' tac ctxt) goal) of + SOME (thm, _) => true + | NONE => false) + end + +local + +fun fold_body_thms f = + let + fun app n (PBody {thms, ...}) = thms |> fold (fn (i, (name, prop, body)) => + fn (x, seen) => + if Inttab.defined seen i then (x, seen) + else + let + val body' = Future.join body + val (x', seen') = app (n + (if name = "" then 0 else 1)) body' + (x, Inttab.update (i, ()) seen) + in (x' |> n = 0 ? f (name, prop, body'), seen') end) + in fn bodies => fn x => #1 (fold (app 0) bodies (x, Inttab.empty)) end + +in + +fun theorems_in_proof_term thm = + let + val all_thms = PureThy.all_thms_of (Thm.theory_of_thm thm) + fun collect (s, _, _) = if s <> "" then insert (op =) s else I + fun member_of xs (x, y) = if member (op =) xs x then SOME y else NONE + fun resolve_thms names = map_filter (member_of names) all_thms + in + resolve_thms (fold_body_thms collect [Thm.proof_body_of thm] []) + end + +end + +fun theorems_of_sucessful_proof state = + (case state of + NONE => [] + | SOME st => + if not (Toplevel.is_proof st) then [] + else theorems_in_proof_term (goal_thm_of (Toplevel.proof_of st))) + +fun get_setting settings (key, default) = + the_default default (AList.lookup (op =) settings key) + +fun get_int_setting settings (key, default) = + (case Option.map Int.fromString (AList.lookup (op =) settings key) of + SOME (SOME i) => i + | SOME NONE => error ("bad option: " ^ key) + | NONE => default) + + + +(* Mirabelle actions *) + +(* FIXME +fun refute_action settings {pre=st, ...} = + let + val params = [("minsize", "2") (*"maxsize", "2"*)] + val subgoal = 0 + val thy = Proof.theory_of st + val thm = goal_thm_of st + + val _ = Refute.refute_subgoal thy parms thm subgoal + in + val writ_log = Substring.full (the (Symtab.lookup tab "writeln")) + val warn_log = Substring.full (the (Symtab.lookup tab "warning")) + + val r = + if Substring.isSubstring "model found" writ_log + then + if Substring.isSubstring "spurious" warn_log + then SOME "potential counterexample" + else SOME "real counterexample (bug?)" + else + if Substring.isSubstring "time limit" writ_log + then SOME "no counterexample (time out)" + else if Substring.isSubstring "Search terminated" writ_log + then SOME "no counterexample (normal termination)" + else SOME "no counterexample (unknown)" + in r end +*) + +fun quickcheck_action settings {pre=st, ...} = + let + val has_valid_key = member (op =) ["iterations", "size", "generator"] o fst + val args = filter has_valid_key settings + in + (case Quickcheck.quickcheck args 1 st of + NONE => SOME "no counterexample" + | SOME _ => SOME "counterexample found") + end + + +fun arith_action _ {pre=st, ...} = + if can_apply Arith_Data.arith_tac st + then SOME "succeeded" + else NONE + + +fun sledgehammer_action settings {pre=st, ...} = + let + val prover_name = hd (space_explode " " (AtpManager.get_atps ())) + val thy = Proof.theory_of st + + val prover = the (AtpManager.get_prover prover_name thy) + val timeout = AtpManager.get_timeout () + + val (success, message) = + let + val (success, message, _, _, _) = + prover timeout NONE NONE prover_name 1 (Proof.get_goal st) + in (success, message) end + handle ResHolClause.TOO_TRIVIAL => (true, "trivial") + | ERROR msg => (false, "error: " ^ msg) + in + if success + then SOME ("success (" ^ prover_name ^ ": " ^ message ^ ")") + else NONE + end + + +fun metis_action settings {pre, post} = + let + val thms = theorems_of_sucessful_proof post + val names = map Thm.get_name thms + + val facts = Facts.props (ProofContext.facts_of (Proof.context_of pre)) + + fun metis ctxt = MetisTools.metis_tac ctxt (thms @ facts) + in + (if can_apply metis pre then "succeeded" else "failed") + |> suffix (" (" ^ commas names ^ ")") + |> SOME + end + + + +(* Mirabelle setup *) + +val setup = + setup_config #> +(* FIXME register "refute" refute_action #> *) + register "quickcheck" quickcheck_action #> + register "arith" arith_action #> + register "sledgehammer" sledgehammer_action #> + register "metis" metis_action (* #> FIXME: + Context.theory_map (Specification.add_theorem_hook theorem_hook) *) + +end + +val _ = Toplevel.add_hook Mirabelle.step_hook + +(* no multithreading, no parallel proofs *) +val _ = Multithreading.max_threads := 1 +val _ = Goal.parallel_proofs := 0