108 ||> (snd o Local_Theory.note ((qualify "cases", |
108 ||> (snd o Local_Theory.note ((qualify "cases", |
109 [Attrib.internal (K (Rule_Cases.case_names cnames))]), [cases])) |
109 [Attrib.internal (K (Rule_Cases.case_names cnames))]), [cases])) |
110 ||> fold_option (snd oo curry Local_Theory.note (qualify "domintros", [])) domintros |
110 ||> fold_option (snd oo curry Local_Theory.note (qualify "domintros", [])) domintros |
111 |
111 |
112 val info = { add_simps=addsmps, case_names=cnames, psimps=psimps', |
112 val info = { add_simps=addsmps, case_names=cnames, psimps=psimps', |
113 pinducts=snd pinducts', termination=termination', fs=fs, R=R, |
113 pinducts=snd pinducts', simps=NONE, inducts=NONE, termination=termination', |
114 defname=defname, is_partial=true } |
114 fs=fs, R=R, defname=defname, is_partial=true } |
115 |
115 |
116 val _ = |
116 val _ = |
117 if not is_external then () |
117 if not is_external then () |
118 else Specification.print_consts lthy (K false) (map fst fixes) |
118 else Specification.print_consts lthy (K false) (map fst fixes) |
119 in |
119 in |
149 val remove_domain_condition = |
149 val remove_domain_condition = |
150 full_simplify (HOL_basic_ss addsimps [totality, True_implies_equals]) |
150 full_simplify (HOL_basic_ss addsimps [totality, True_implies_equals]) |
151 val tsimps = map remove_domain_condition psimps |
151 val tsimps = map remove_domain_condition psimps |
152 val tinduct = map remove_domain_condition pinducts |
152 val tinduct = map remove_domain_condition pinducts |
153 |
153 |
154 val info' = { is_partial=false, defname=defname, add_simps=add_simps, |
|
155 case_names=case_names, fs=fs, R=R, psimps=psimps, pinducts=pinducts, |
|
156 termination=termination } |
|
157 fun qualify n = Binding.name n |
154 fun qualify n = Binding.name n |
158 |> Binding.qualify true defname |
155 |> Binding.qualify true defname |
159 in |
156 in |
160 lthy |
157 lthy |
161 |> add_simps I "simps" I simp_attribs tsimps |> snd |
158 |> add_simps I "simps" I simp_attribs tsimps |
162 |> Local_Theory.note |
159 ||>> Local_Theory.note |
163 ((qualify "induct", |
160 ((qualify "induct", |
164 [Attrib.internal (K (Rule_Cases.case_names case_names))]), |
161 [Attrib.internal (K (Rule_Cases.case_names case_names))]), |
165 tinduct) |> snd |
162 tinduct) |
166 |> Local_Theory.declaration false (add_function_data o morph_function_data info') |
163 |-> (fn (simps, (_, inducts)) => |
|
164 let val info' = { is_partial=false, defname=defname, add_simps=add_simps, |
|
165 case_names=case_names, fs=fs, R=R, psimps=psimps, pinducts=pinducts, |
|
166 simps=SOME simps, inducts=SOME inducts, termination=termination } |
|
167 in |
|
168 Local_Theory.declaration false (add_function_data o morph_function_data info') |
|
169 end) |
167 end |
170 end |
168 in |
171 in |
169 lthy |
172 lthy |
170 |> ProofContext.note_thmss "" |
173 |> ProofContext.note_thmss "" |
171 [((Binding.empty, [Context_Rules.rule_del]), [([allI], [])])] |> snd |
174 [((Binding.empty, [Context_Rules.rule_del]), [([allI], [])])] |> snd |