src/Pure/Isar/class.ML
changeset 26463 9283b4185fdf
parent 26435 bdce320cd426
child 26470 e44d24620515
equal deleted inserted replaced
26462:dac4e2bce00d 26463:9283b4185fdf
   138 
   138 
   139 fun rep_class_data (ClassData d) = d;
   139 fun rep_class_data (ClassData d) = d;
   140 fun mk_class_data ((consts, base_sort, inst, morphism, assm_intro, of_class, axiom),
   140 fun mk_class_data ((consts, base_sort, inst, morphism, assm_intro, of_class, axiom),
   141     (defs, operations)) =
   141     (defs, operations)) =
   142   ClassData { consts = consts, base_sort = base_sort, inst = inst,
   142   ClassData { consts = consts, base_sort = base_sort, inst = inst,
   143     morphism = morphism, assm_intro = assm_intro, of_class = of_class, axiom = axiom, 
   143     morphism = morphism, assm_intro = assm_intro, of_class = of_class, axiom = axiom,
   144     defs = defs, operations = operations };
   144     defs = defs, operations = operations };
   145 fun map_class_data f (ClassData { consts, base_sort, inst, morphism,
   145 fun map_class_data f (ClassData { consts, base_sort, inst, morphism,
   146     assm_intro, of_class, axiom, defs, operations }) =
   146     assm_intro, of_class, axiom, defs, operations }) =
   147   mk_class_data (f ((consts, base_sort, inst, morphism, assm_intro, of_class, axiom),
   147   mk_class_data (f ((consts, base_sort, inst, morphism, assm_intro, of_class, axiom),
   148     (defs, operations)));
   148     (defs, operations)));
   302       (map (Logic.dest_equals o Thm.prop_of) defs) [];
   302       (map (Logic.dest_equals o Thm.prop_of) defs) [];
   303     fun subst_term thy defs = map_aterms subst_aterm #> rew_term thy defs
   303     fun subst_term thy defs = map_aterms subst_aterm #> rew_term thy defs
   304       #> map_types subst_typ;
   304       #> map_types subst_typ;
   305     fun subst_thm defs = Drule.standard' #> instantiate_class #> lift_axiom
   305     fun subst_thm defs = Drule.standard' #> instantiate_class #> lift_axiom
   306       #> MetaSimplifier.rewrite_rule defs;
   306       #> MetaSimplifier.rewrite_rule defs;
   307     fun morphism thy defs = 
   307     fun morphism thy defs =
   308       Morphism.typ_morphism subst_typ
   308       Morphism.typ_morphism subst_typ
   309       $> Morphism.term_morphism (subst_term thy defs)
   309       $> Morphism.term_morphism (subst_term thy defs)
   310       $> Morphism.thm_morphism (subst_thm defs);
   310       $> Morphism.thm_morphism (subst_thm defs);
   311 
   311 
   312     (*class rules*)
   312     (*class rules*)
   393 
   393 
   394 fun default_tac rules ctxt facts =
   394 fun default_tac rules ctxt facts =
   395   HEADGOAL (Method.some_rule_tac rules ctxt facts) ORELSE
   395   HEADGOAL (Method.some_rule_tac rules ctxt facts) ORELSE
   396     default_intro_classes_tac facts;
   396     default_intro_classes_tac facts;
   397 
   397 
   398 val _ = Context.>> (Method.add_methods
   398 val _ = Context.>> (Context.map_theory
   399  [("intro_classes", Method.no_args (Method.METHOD intro_classes_tac),
   399   (Method.add_methods
   400     "back-chain introduction rules of classes"),
   400    [("intro_classes", Method.no_args (Method.METHOD intro_classes_tac),
   401   ("default", Method.thms_ctxt_args (Method.METHOD oo default_tac),
   401       "back-chain introduction rules of classes"),
   402     "apply some intro/elim rule")]);
   402     ("default", Method.thms_ctxt_args (Method.METHOD oo default_tac),
       
   403       "apply some intro/elim rule")]));
       
   404 
   403 
   405 
   404 
   406 
   405 (** classes and class target **)
   407 (** classes and class target **)
   406 
   408 
   407 (* class context syntax *)
   409 (* class context syntax *)