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 *) |