src/Provers/rulify.ML
author wenzelm
Thu, 07 Sep 2000 20:46:53 +0200
changeset 9884 8cc344b3435e
child 9941 fe05af7ec816
permissions -rw-r--r--
Conversion of object-level -->/ALL into meta-level ==>/!!;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9884
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
     1
(*  Title:      Provers/rulify.ML
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
     3
    Author:     Markus Wenzel, TU Muenchen
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
     4
    License:    GPL (GNU GENERAL PUBLIC LICENSE)
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
     5
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
     6
Conversion of object-level -->/ALL into meta-level ==>/!!.
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
     7
*)
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
     8
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
     9
signature BASIC_RULIFY =
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    10
sig
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    11
  val rulify: thm -> thm
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    12
  val rulify_no_asm: thm -> thm
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    13
  val qed_spec_mp: string -> unit
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    14
  val qed_goal_spec_mp: string -> theory -> string -> (thm list -> tactic list) -> unit
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    15
  val qed_goalw_spec_mp: string -> theory -> thm list -> string
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    16
    -> (thm list -> tactic list) -> unit
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    17
end;
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    18
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    19
signature RULIFY =
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    20
sig
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    21
  include BASIC_RULIFY
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    22
  val rulified: 'a attribute
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    23
  val rulified_no_asm: 'a attribute
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    24
  val setup: (theory -> theory) list
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    25
end;
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    26
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    27
functor RulifyFun(val make_meta: thm -> thm val full_make_meta: thm -> thm): RULIFY =
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    28
struct
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    29
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    30
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    31
(* rulify *)
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    32
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    33
val tune = Drule.zero_var_indexes o Drule.strip_shyps_warning o Drule.forall_elim_vars_safe;
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    34
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    35
val rulify = tune o full_make_meta;
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    36
val rulify_no_asm = tune o make_meta;
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    37
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    38
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    39
(* attributes *)
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    40
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    41
fun rulified x = Drule.rule_attribute (fn _ => rulify) x;
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    42
fun rulified_no_asm x = Drule.rule_attribute (fn _ => rulify_no_asm) x;
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    43
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    44
fun rulified_att x = Attrib.syntax
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    45
  (Scan.lift (Args.parens (Args.$$$ "no_asm") >> K rulified_no_asm || Scan.succeed rulified)) x;
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    46
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    47
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    48
(* qed commands *)
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    49
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    50
fun qed_spec_mp name = ThmDatabase.ml_store_thm (name, rulify_no_asm (Goals.result ()));
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    51
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    52
fun qed_goal_spec_mp name thy s p =
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    53
  ThmDatabase.bind_thm (name, rulify_no_asm (Goals.prove_goal thy s p));
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    54
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    55
fun qed_goalw_spec_mp name thy defs s p =
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    56
  ThmDatabase.bind_thm (name, rulify_no_asm (Goals.prove_goalw thy defs s p));
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    57
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    58
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    59
(* theory setup *)
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    60
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    61
val setup =
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    62
 [Attrib.add_attributes
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    63
  [("rulified", (rulified_att, rulified_att), "result put into standard rule form")]];
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    64
8cc344b3435e Conversion of object-level -->/ALL into meta-level ==>/!!;
wenzelm
parents:
diff changeset
    65
end;