263 val axiom3 = Logic.mk_implies |
263 val axiom3 = Logic.mk_implies |
264 (HOLogic.mk_Trueprop (cprm_eq $ pi1 $ pi2), |
264 (HOLogic.mk_Trueprop (cprm_eq $ pi1 $ pi2), |
265 HOLogic.mk_Trueprop (HOLogic.mk_eq (cperm $ pi1 $ x, cperm $ pi2 $ x))); |
265 HOLogic.mk_Trueprop (HOLogic.mk_eq (cperm $ pi1 $ x, cperm $ pi2 $ x))); |
266 in |
266 in |
267 AxClass.define_class (cl_name, ["HOL.type"]) [] |
267 AxClass.define_class (cl_name, ["HOL.type"]) [] |
268 [((cl_name ^ "1", [Simplifier.simp_add]), [axiom1]), |
268 [((Name.binding (cl_name ^ "1"), [Simplifier.simp_add]), [axiom1]), |
269 ((cl_name ^ "2", []), [axiom2]), |
269 ((Name.binding (cl_name ^ "2"), []), [axiom2]), |
270 ((cl_name ^ "3", []), [axiom3])] thy |
270 ((Name.binding (cl_name ^ "3"), []), [axiom3])] thy |
271 end) ak_names_types thy6; |
271 end) ak_names_types thy6; |
272 |
272 |
273 (* proves that every pt_<ak>-type together with <ak>-type *) |
273 (* proves that every pt_<ak>-type together with <ak>-type *) |
274 (* instance of pt *) |
274 (* instance of pt *) |
275 (* lemma pt_<ak>_inst: *) |
275 (* lemma pt_<ak>_inst: *) |
311 val cfinite = Const ("Finite_Set.finite", HOLogic.mk_setT T --> HOLogic.boolT) |
311 val cfinite = Const ("Finite_Set.finite", HOLogic.mk_setT T --> HOLogic.boolT) |
312 |
312 |
313 val axiom1 = HOLogic.mk_Trueprop (cfinite $ (csupp $ x)); |
313 val axiom1 = HOLogic.mk_Trueprop (cfinite $ (csupp $ x)); |
314 |
314 |
315 in |
315 in |
316 AxClass.define_class (cl_name, [pt_name]) [] [((cl_name ^ "1", []), [axiom1])] thy |
316 AxClass.define_class (cl_name, [pt_name]) [] [((Name.binding (cl_name ^ "1"), []), [axiom1])] thy |
317 end) ak_names_types thy8; |
317 end) ak_names_types thy8; |
318 |
318 |
319 (* proves that every fs_<ak>-type together with <ak>-type *) |
319 (* proves that every fs_<ak>-type together with <ak>-type *) |
320 (* instance of fs-type *) |
320 (* instance of fs-type *) |
321 (* lemma abst_<ak>_inst: *) |
321 (* lemma abst_<ak>_inst: *) |
360 |
360 |
361 val ax1 = HOLogic.mk_Trueprop |
361 val ax1 = HOLogic.mk_Trueprop |
362 (HOLogic.mk_eq (cperm1 $ pi1 $ (cperm2 $ pi2 $ x), |
362 (HOLogic.mk_eq (cperm1 $ pi1 $ (cperm2 $ pi2 $ x), |
363 cperm2 $ (cperm3 $ pi1 $ pi2) $ (cperm1 $ pi1 $ x))); |
363 cperm2 $ (cperm3 $ pi1 $ pi2) $ (cperm1 $ pi1 $ x))); |
364 in |
364 in |
365 AxClass.define_class (cl_name, ["HOL.type"]) [] [((cl_name ^ "1", []), [ax1])] thy' |
365 AxClass.define_class (cl_name, ["HOL.type"]) [] |
|
366 [((Name.binding (cl_name ^ "1"), []), [ax1])] thy' |
366 end) ak_names_types thy) ak_names_types thy12; |
367 end) ak_names_types thy) ak_names_types thy12; |
367 |
368 |
368 (* proves for every <ak>-combination a cp_<ak1>_<ak2>_inst theorem; *) |
369 (* proves for every <ak>-combination a cp_<ak1>_<ak2>_inst theorem; *) |
369 (* lemma cp_<ak1>_<ak2>_inst: *) |
370 (* lemma cp_<ak1>_<ak2>_inst: *) |
370 (* cp TYPE('a::cp_<ak1>_<ak2>) TYPE(<ak1>) TYPE(<ak2>) *) |
371 (* cp TYPE('a::cp_<ak1>_<ak2>) TYPE(<ak1>) TYPE(<ak2>) *) |