equal
deleted
inserted
replaced
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 *) |