src/HOL/Tools/Function/size.ML
changeset 32712 ec5976f4d3d8
parent 31902 862ae16a799d
child 32727 9072201cd69d
equal deleted inserted replaced
32706:b68f3afdc137 32712:ec5976f4d3d8
    57 
    57 
    58 val app = curry (list_comb o swap);
    58 val app = curry (list_comb o swap);
    59 
    59 
    60 fun prove_size_thms (info : info) new_type_names thy =
    60 fun prove_size_thms (info : info) new_type_names thy =
    61   let
    61   let
    62     val {descr, alt_names, sorts, rec_names, rec_rewrites, induction, ...} = info;
    62     val {descr, alt_names, sorts, rec_names, rec_rewrites, inducts = (_, induct), ...} = info;
    63     val l = length new_type_names;
    63     val l = length new_type_names;
    64     val alt_names' = (case alt_names of
    64     val alt_names' = (case alt_names of
    65       NONE => replicate l NONE | SOME names => map SOME names);
    65       NONE => replicate l NONE | SOME names => map SOME names);
    66     val descr' = List.take (descr, l);
    66     val descr' = List.take (descr, l);
    67     val (rec_names1, rec_names2) = chop l rec_names;
    67     val (rec_names1, rec_names2) = chop l rec_names;
   167       else split_conj_thm (SkipProof.prove ctxt xs []
   167       else split_conj_thm (SkipProof.prove ctxt xs []
   168         (HOLogic.mk_Trueprop (mk_conj (replicate l HOLogic.true_const @
   168         (HOLogic.mk_Trueprop (mk_conj (replicate l HOLogic.true_const @
   169            map (mk_unfolded_size_eq (AList.lookup op =
   169            map (mk_unfolded_size_eq (AList.lookup op =
   170                (new_type_names ~~ map (app fs) rec_combs1)) size_ofp fs)
   170                (new_type_names ~~ map (app fs) rec_combs1)) size_ofp fs)
   171              (xs ~~ recTs2 ~~ rec_combs2))))
   171              (xs ~~ recTs2 ~~ rec_combs2))))
   172         (fn _ => (indtac induction xs THEN_ALL_NEW asm_simp_tac simpset1) 1));
   172         (fn _ => (indtac induct xs THEN_ALL_NEW asm_simp_tac simpset1) 1));
   173 
   173 
   174     val unfolded_size_eqs1 = prove_unfolded_size_eqs param_size fs;
   174     val unfolded_size_eqs1 = prove_unfolded_size_eqs param_size fs;
   175     val unfolded_size_eqs2 = prove_unfolded_size_eqs (K NONE) fs';
   175     val unfolded_size_eqs2 = prove_unfolded_size_eqs (K NONE) fs';
   176 
   176 
   177     (* characteristic equations for size functions *)
   177     (* characteristic equations for size functions *)