equal
deleted
inserted
replaced
363 else None |
363 else None |
364 | _ => None) |
364 | _ => None) |
365 | _ => None) |
365 | _ => None) |
366 | distinct_proc sg _ _ = None; |
366 | distinct_proc sg _ _ = None; |
367 |
367 |
368 val distinct_pats = [Thm.read_cterm (Theory.sign_of HOL.thy) ("s = t", HOLogic.termT)]; |
368 val distinct_pats = [HOLogic.read_cterm (Theory.sign_of HOL.thy) "s = t"]; |
369 val distinct_simproc = mk_simproc distinctN distinct_pats distinct_proc; |
369 val distinct_simproc = mk_simproc distinctN distinct_pats distinct_proc; |
370 |
370 |
371 val dist_ss = HOL_ss addsimprocs [distinct_simproc]; |
371 val dist_ss = HOL_ss addsimprocs [distinct_simproc]; |
372 |
372 |
373 val simproc_setup = |
373 val simproc_setup = |
458 map (fn ((_, cargs), (cname, mx)) => |
458 map (fn ((_, cargs), (cname, mx)) => |
459 (cname, map (typ_of_dtyp descr' sorts) cargs ---> T, mx)) |
459 (cname, map (typ_of_dtyp descr' sorts) cargs ---> T, mx)) |
460 (constrs ~~ constr_syntax')) ((hd descr) ~~ newTs ~~ constr_syntax); |
460 (constrs ~~ constr_syntax')) ((hd descr) ~~ newTs ~~ constr_syntax); |
461 |
461 |
462 val rec_result_Ts = map TFree (variantlist (replicate (length descr') "'t", used) ~~ |
462 val rec_result_Ts = map TFree (variantlist (replicate (length descr') "'t", used) ~~ |
463 replicate (length descr') HOLogic.termS); |
463 replicate (length descr') HOLogic.typeS); |
464 |
464 |
465 val reccomb_fn_Ts = flat (map (fn (i, (_, _, constrs)) => |
465 val reccomb_fn_Ts = flat (map (fn (i, (_, _, constrs)) => |
466 map (fn (_, cargs) => |
466 map (fn (_, cargs) => |
467 let |
467 let |
468 val Ts = map (typ_of_dtyp descr' sorts) cargs; |
468 val Ts = map (typ_of_dtyp descr' sorts) cargs; |
482 (1 upto (length descr'))); |
482 (1 upto (length descr'))); |
483 |
483 |
484 val size_names = DatatypeProp.indexify_names |
484 val size_names = DatatypeProp.indexify_names |
485 (map (fn T => name_of_typ T ^ "_size") (drop (length (hd descr), recTs))); |
485 (map (fn T => name_of_typ T ^ "_size") (drop (length (hd descr), recTs))); |
486 |
486 |
487 val freeT = TFree (variant used "'t", HOLogic.termS); |
487 val freeT = TFree (variant used "'t", HOLogic.typeS); |
488 val case_fn_Ts = map (fn (i, (_, _, constrs)) => |
488 val case_fn_Ts = map (fn (i, (_, _, constrs)) => |
489 map (fn (_, cargs) => |
489 map (fn (_, cargs) => |
490 let val Ts = map (typ_of_dtyp descr' sorts) cargs |
490 let val Ts = map (typ_of_dtyp descr' sorts) cargs |
491 in Ts ---> freeT end) constrs) (hd descr); |
491 in Ts ---> freeT end) constrs) (hd descr); |
492 |
492 |