src/HOL/Tools/datatype_rep_proofs.ML
changeset 17261 193b84a70ca4
parent 16486 1a12cdb6ee6b
child 17412 e26cb20ef0cc
equal deleted inserted replaced
17260:df7c3b1f390a 17261:193b84a70ca4
    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);