src/Provers/classical.ML
changeset 5927 991483daa1a4
parent 5885 6c920d876098
child 6096 3451f9e88528
equal deleted inserted replaced
5926:58f9ca06b76b 5927:991483daa1a4
    81   val addE2             : claset * (string * thm) -> claset
    81   val addE2             : claset * (string * thm) -> claset
    82   val addSD2            : claset * (string * thm) -> claset
    82   val addSD2            : claset * (string * thm) -> claset
    83   val addSE2            : claset * (string * thm) -> claset
    83   val addSE2            : claset * (string * thm) -> claset
    84   val appSWrappers	: claset -> wrapper
    84   val appSWrappers	: claset -> wrapper
    85   val appWrappers	: claset -> wrapper
    85   val appWrappers	: claset -> wrapper
       
    86   val trace_rules	: bool ref
    86 
    87 
    87   val claset_ref_of_sg: Sign.sg -> claset ref
    88   val claset_ref_of_sg: Sign.sg -> claset ref
    88   val claset_ref_of: theory -> claset ref
    89   val claset_ref_of: theory -> claset ref
    89   val claset_of_sg: Sign.sg -> claset
    90   val claset_of_sg: Sign.sg -> claset
    90   val claset_of: theory -> claset
    91   val claset_of: theory -> claset
   162   val haz_intro_local: Proof.context attribute
   163   val haz_intro_local: Proof.context attribute
   163   val safe_dest_local: Proof.context attribute
   164   val safe_dest_local: Proof.context attribute
   164   val safe_elim_local: Proof.context attribute
   165   val safe_elim_local: Proof.context attribute
   165   val safe_intro_local: Proof.context attribute
   166   val safe_intro_local: Proof.context attribute
   166   val delrule_local: Proof.context attribute
   167   val delrule_local: Proof.context attribute
   167   val trace_rules: bool ref
   168   val cla_modifiers: (Args.T list -> (Proof.context attribute * Args.T list)) list
       
   169   val cla_method: (claset -> tactic) -> Args.src -> Proof.context -> Proof.method
       
   170   val cla_method': (claset -> int -> tactic) -> Args.src -> Proof.context -> Proof.method
   168   val single_tac: claset -> tthm list -> int -> tactic
   171   val single_tac: claset -> tthm list -> int -> tactic
   169   val setup: (theory -> theory) list
   172   val setup: (theory -> theory) list
   170 end;
   173 end;
   171 
       
   172 
   174 
   173 structure ClasetThyData: CLASET_THY_DATA =
   175 structure ClasetThyData: CLASET_THY_DATA =
   174 struct
   176 struct
   175 
   177 
   176 (* data kind claset -- forward declaration *)
   178 (* data kind claset -- forward declaration *)
   199 
   201 
   200 
   202 
   201 end;
   203 end;
   202 
   204 
   203 
   205 
   204 functor ClassicalFun(Data: CLASSICAL_DATA): CLASSICAL = 
   206 functor ClassicalFun(Data: CLASSICAL_DATA): CLASSICAL =
   205 struct
   207 struct
   206 
   208 
   207 local open ClasetThyData Data in
   209 local open ClasetThyData Data in
   208 
   210 
   209 (*** Useful tactics for classical reasoning ***)
   211 (*** Useful tactics for classical reasoning ***)
   973 
   975 
   974 
   976 
   975 
   977 
   976 (** automatic methods **)
   978 (** automatic methods **)
   977 
   979 
   978 val cla_args =
   980 val cla_modifiers =
   979   Method.only_sectioned_args
   981  [Args.$$$ destN -- bang >> K haz_dest_local,
   980    [Args.$$$ destN -- bang >> K haz_dest_local,
   982   Args.$$$ destN >> K safe_dest_local,
   981     Args.$$$ destN >> K safe_dest_local,
   983   Args.$$$ elimN -- bang >> K haz_elim_local,
   982     Args.$$$ elimN -- bang >> K haz_elim_local,
   984   Args.$$$ elimN >> K safe_elim_local,
   983     Args.$$$ elimN >> K safe_elim_local,
   985   Args.$$$ introN -- bang >> K haz_intro_local,
   984     Args.$$$ introN -- bang >> K haz_intro_local,
   986   Args.$$$ introN >> K safe_intro_local,
   985     Args.$$$ introN >> K safe_intro_local,
   987   Args.$$$ delN >> K delrule_local];
   986     Args.$$$ delN >> K delrule_local];
   988 
       
   989 val cla_args = Method.only_sectioned_args cla_modifiers;
   987 
   990 
   988 fun cla_meth tac ctxt = Method.METHOD0 (tac (get_local_claset ctxt));
   991 fun cla_meth tac ctxt = Method.METHOD0 (tac (get_local_claset ctxt));
   989 fun cla_meth' tac ctxt = Method.METHOD0 (FIRSTGOAL (tac (get_local_claset ctxt)));
   992 fun cla_meth' tac ctxt = Method.METHOD0 (FIRSTGOAL (tac (get_local_claset ctxt)));
   990 
   993 
   991 val cla_method = cla_args o cla_meth;
   994 val cla_method = cla_args o cla_meth;