(* Title: FOL/cladata.ML ID: $Id: cladata.ML,v 1.22 2003/08/20 09:04:17 paulson Exp $ Author: Tobias Nipkow Copyright 1996 University of Cambridge Setting up the classical reasoner. *) section "Classical Reasoner"; (*** Applying Make_Elim_Fun to create a classical "make_elim" rule ***) structure Make_Elim = Make_Elim_Fun(val classical = classical); (*we don't redeclare the original make_elim (Tactic.make_elim) for compatibility with strange things done in many existing proofs *) val cla_make_elim = Make_Elim.make_elim; (*** Applying ClassicalFun to create a classical prover ***) structure Classical_Data = struct val make_elim = cla_make_elim val mp = mp val not_elim = notE val classical = classical val sizef = size_of_thm val hyp_subst_tacs=[hyp_subst_tac] end; structure Cla = ClassicalFun(Classical_Data); structure BasicClassical: BASIC_CLASSICAL = Cla; open BasicClassical; (*Better for fast_tac: needs no quantifier duplication!*) qed_goal "alt_ex1E" IFOL.thy "[| EX! x. P(x); \ \ !!x. [| P(x); ALL y y'. P(y) & P(y') --> y=y' |] ==> R \ \ |] ==> R" (fn major::prems => [ (rtac (major RS ex1E) 1), (REPEAT (ares_tac (allI::prems) 1)), (etac (dup_elim allE) 1), (IntPr.fast_tac 1)]); (*Propositional rules*) val prop_cs = empty_cs addSIs [refl,TrueI,conjI,disjCI,impI,notI,iffI] addSEs [conjE,disjE,impCE,FalseE,iffCE]; (*Quantifier rules*) val FOL_cs = prop_cs addSIs [allI,ex_ex1I] addIs [exI] addSEs [exE,alt_ex1E] addEs [allE]; val cla_setup = [fn thy => (claset_ref_of thy := FOL_cs; thy)]; val case_setup = [Method.add_methods [("case_tac", Method.goal_args Args.name case_tac, "case_tac emulation (dynamic instantiation!)")]];