33 val f_myinv_f = thm "f_myinv_f"; |
33 val f_myinv_f = thm "f_myinv_f"; |
34 val myinv_f_f = thm "myinv_f_f"; |
34 val myinv_f_f = thm "myinv_f_f"; |
35 |
35 |
36 |
36 |
37 fun exh_thm_of (dt_info : datatype_info Symtab.table) tname = |
37 fun exh_thm_of (dt_info : datatype_info Symtab.table) tname = |
38 #exhaustion (valOf (Symtab.lookup (dt_info, tname))); |
38 #exhaustion (the (Symtab.curried_lookup dt_info tname)); |
39 |
39 |
40 (******************************************************************************) |
40 (******************************************************************************) |
41 |
41 |
42 fun representation_proofs flat_names (dt_info : datatype_info Symtab.table) |
42 fun representation_proofs flat_names (dt_info : datatype_info Symtab.table) |
43 new_type_names descr sorts types_syntax constr_syntax case_names_induct thy = |
43 new_type_names descr sorts types_syntax constr_syntax case_names_induct thy = |
354 |
354 |
355 fun make_iso_defs (ds, (thy, char_thms)) = |
355 fun make_iso_defs (ds, (thy, char_thms)) = |
356 let |
356 let |
357 val ks = map fst ds; |
357 val ks = map fst ds; |
358 val (_, (tname, _, _)) = hd ds; |
358 val (_, (tname, _, _)) = hd ds; |
359 val {rec_rewrites, rec_names, ...} = valOf (Symtab.lookup (dt_info, tname)); |
359 val {rec_rewrites, rec_names, ...} = the (Symtab.curried_lookup dt_info tname); |
360 |
360 |
361 fun process_dt ((fs, eqns, isos), (k, (tname, _, constrs))) = |
361 fun process_dt ((fs, eqns, isos), (k, (tname, _, constrs))) = |
362 let |
362 let |
363 val (fs', eqns', _) = Library.foldl (make_iso_def k ks (length constrs)) |
363 val (fs', eqns', _) = Library.foldl (make_iso_def k ks (length constrs)) |
364 ((fs, eqns, 1), constrs); |
364 ((fs, eqns, 1), constrs); |
410 (* prove inj dt_Rep_i and dt_Rep_i x : dt_rep_set_i *) |
410 (* prove inj dt_Rep_i and dt_Rep_i x : dt_rep_set_i *) |
411 |
411 |
412 fun prove_iso_thms (ds, (inj_thms, elem_thms)) = |
412 fun prove_iso_thms (ds, (inj_thms, elem_thms)) = |
413 let |
413 let |
414 val (_, (tname, _, _)) = hd ds; |
414 val (_, (tname, _, _)) = hd ds; |
415 val {induction, ...} = valOf (Symtab.lookup (dt_info, tname)); |
415 val {induction, ...} = the (Symtab.curried_lookup dt_info tname); |
416 |
416 |
417 fun mk_ind_concl (i, _) = |
417 fun mk_ind_concl (i, _) = |
418 let |
418 let |
419 val T = List.nth (recTs, i); |
419 val T = List.nth (recTs, i); |
420 val Rep_t = Const (List.nth (all_rep_names, i), T --> Univ_elT); |
420 val Rep_t = Const (List.nth (all_rep_names, i), T --> Univ_elT); |