52 |
52 |
53 val saved_simps = flat (map snd saved_spec_simps) |
53 val saved_simps = flat (map snd saved_spec_simps) |
54 val simps_by_f = sort saved_simps |
54 val simps_by_f = sort saved_simps |
55 |
55 |
56 fun add_for_f fname simps = |
56 fun add_for_f fname simps = |
57 note_theorem ((NameSpace.qualified fname label, []), simps) #> snd |
57 note_theorem ((Long_Name.qualify fname label, []), simps) #> snd |
58 in |
58 in |
59 (saved_simps, |
59 (saved_simps, |
60 fold2 add_for_f fnames simps_by_f lthy) |
60 fold2 add_for_f fnames simps_by_f lthy) |
61 end |
61 end |
62 |
62 |
64 let |
64 let |
65 val FundefResult {fs, R, psimps, trsimps, simple_pinducts, termination, domintros, cases, ...} = |
65 val FundefResult {fs, R, psimps, trsimps, simple_pinducts, termination, domintros, cases, ...} = |
66 cont (Thm.close_derivation proof) |
66 cont (Thm.close_derivation proof) |
67 |
67 |
68 val fnames = map (fst o fst) fixes |
68 val fnames = map (fst o fst) fixes |
69 val qualify = NameSpace.qualified defname |
69 val qualify = Long_Name.qualify defname |
70 val addsmps = add_simps fnames post sort_cont |
70 val addsmps = add_simps fnames post sort_cont |
71 |
71 |
72 val (((psimps', pinducts'), (_, [termination'])), lthy) = |
72 val (((psimps', pinducts'), (_, [termination'])), lthy) = |
73 lthy |
73 lthy |
74 |> addsmps (NameSpace.qualified "partial") "psimps" |
74 |> addsmps (Long_Name.qualify "partial") "psimps" |
75 [Attrib.internal (K Nitpick_Const_Psimp_Thms.add)] psimps |
75 [Attrib.internal (K Nitpick_Const_Psimp_Thms.add)] psimps |
76 ||> fold_option (snd oo addsmps I "simps" [Attrib.internal (K Nitpick_Const_Simp_Thms.add)]) trsimps |
76 ||> fold_option (snd oo addsmps I "simps" [Attrib.internal (K Nitpick_Const_Simp_Thms.add)]) trsimps |
77 ||>> note_theorem ((qualify "pinduct", |
77 ||>> note_theorem ((qualify "pinduct", |
78 [Attrib.internal (K (RuleCases.case_names cnames)), |
78 [Attrib.internal (K (RuleCases.case_names cnames)), |
79 Attrib.internal (K (RuleCases.consumes 1)), |
79 Attrib.internal (K (RuleCases.consumes 1)), |
129 |
129 |
130 val has_guards = exists ((fn (Const ("Trueprop", _) $ _) => false | _ => true) o prop_of) tsimps |
130 val has_guards = exists ((fn (Const ("Trueprop", _) $ _) => false | _ => true) o prop_of) tsimps |
131 val allatts = (not has_guards ? cons Code.add_default_eqn_attrib) |
131 val allatts = (not has_guards ? cons Code.add_default_eqn_attrib) |
132 [Attrib.internal (K Nitpick_Const_Simp_Thms.add)] |
132 [Attrib.internal (K Nitpick_Const_Simp_Thms.add)] |
133 |
133 |
134 val qualify = NameSpace.qualified defname; |
134 val qualify = Long_Name.qualify defname; |
135 in |
135 in |
136 lthy |
136 lthy |
137 |> add_simps I "simps" allatts tsimps |> snd |
137 |> add_simps I "simps" allatts tsimps |> snd |
138 |> note_theorem ((qualify "induct", [Attrib.internal (K (RuleCases.case_names case_names))]), tinduct) |> snd |
138 |> note_theorem ((qualify "induct", [Attrib.internal (K (RuleCases.case_names case_names))]), tinduct) |> snd |
139 end |
139 end |