src/HOL/Tools/Function/function.ML
changeset 34231 da4d7d40f2f9
parent 34230 b0d21ae2528e
child 34232 36a2a3029fd3
equal deleted inserted replaced
34230:b0d21ae2528e 34231:da4d7d40f2f9
   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