src/HOL/cladata.ML
changeset 7357 d0e16da40ea2
parent 7153 820c8c8573d9
child 8099 6a087be9f6d9
equal deleted inserted replaced
7356:1714c91b8729 7357:d0e16da40ea2
    20   val eq_reflection = eq_reflection
    20   val eq_reflection = eq_reflection
    21   val imp_intr = impI
    21   val imp_intr = impI
    22   val rev_mp = rev_mp
    22   val rev_mp = rev_mp
    23   val subst = subst
    23   val subst = subst
    24   val sym = sym
    24   val sym = sym
    25   val thin_refl = prove_goal HOL.thy 
    25   val thin_refl = prove_goal (the_context ())
    26 		  "!!X. [|x=x; PROP W|] ==> PROP W" (K [atac 1]);
    26 		  "!!X. [|x=x; PROP W|] ==> PROP W" (K [atac 1]);
    27   end;
    27   end;
    28 
    28 
    29 structure Hypsubst = HypsubstFun(Hypsubst_Data);
    29 structure Hypsubst = HypsubstFun(Hypsubst_Data);
    30 open Hypsubst;
    30 open Hypsubst;
    38   val classical = classical
    38   val classical = classical
    39   val hyp_subst_tacs=[hyp_subst_tac]
    39   val hyp_subst_tacs=[hyp_subst_tac]
    40   end;
    40   end;
    41 
    41 
    42 structure Classical = ClassicalFun(Classical_Data);
    42 structure Classical = ClassicalFun(Classical_Data);
    43 open Classical;
    43 structure BasicClassical: BASIC_CLASSICAL = Classical;
       
    44 open BasicClassical;
    44 
    45 
    45 (*Propositional rules*)
    46 (*Propositional rules*)
    46 val prop_cs = empty_cs addSIs [refl,TrueI,conjI,disjCI,impI,notI,iffI]
    47 val prop_cs = empty_cs addSIs [refl,TrueI,conjI,disjCI,impI,notI,iffI]
    47                        addSEs [conjE,disjE,impCE,FalseE,iffCE];
    48                        addSEs [conjE,disjE,impCE,FalseE,iffCE];
    48 
    49 
    49 (*Quantifier rules*)
    50 (*Quantifier rules*)
    50 val HOL_cs = prop_cs addSIs [allI,ex_ex1I] addIs [exI, select_equality] 
    51 val HOL_cs = prop_cs addSIs [allI,ex_ex1I] addIs [exI, select_equality] 
    51                      addSEs [exE] addEs [allE];
    52                      addSEs [exE] addEs [allE];
    52 
    53 
    53 claset_ref() := HOL_cs;
    54 val clasetup = [fn thy => (claset_ref_of thy := HOL_cs; thy)];
    54 
       
    55 (*Better then ex1E for classical reasoner: needs no quantifier duplication!*)
       
    56 val major::prems = goal thy
       
    57     "[| ?! x. P(x);                                              \
       
    58 \       !!x. [| P(x);  ALL y y'. P(y) & P(y') --> y=y' |] ==> R  \
       
    59 \    |] ==> R";
       
    60 by (rtac (major RS ex1E) 1);
       
    61 by (REPEAT (ares_tac (allI::prems) 1));
       
    62 by (etac (dup_elim allE) 1);
       
    63 by (Fast_tac 1);
       
    64 qed "alt_ex1E";
       
    65 
       
    66 AddSEs [alt_ex1E];
       
    67 
       
    68 (*** Applying BlastFun to create Blast_tac ***)
       
    69 structure Blast_Data = 
       
    70   struct
       
    71   type claset	= Classical.claset
       
    72   val notE	= notE
       
    73   val ccontr	= ccontr
       
    74   val contr_tac = Classical.contr_tac
       
    75   val dup_intr	= Classical.dup_intr
       
    76   val hyp_subst_tac = Hypsubst.blast_hyp_subst_tac
       
    77   val claset	= Classical.claset
       
    78   val rep_cs    = Classical.rep_cs
       
    79   val cla_modifiers = Classical.cla_modifiers;
       
    80   val cla_meth' = Classical.cla_meth'
       
    81   end;
       
    82 
       
    83 structure Blast = BlastFun(Blast_Data);
       
    84 Blast.overloaded ("op =", domain_type);	(*overloading of equality as iff*)
       
    85 
       
    86 val Blast_tac = Blast.Blast_tac
       
    87 and blast_tac = Blast.blast_tac;