src/HOL/Tools/function_package/fundef_package.ML
changeset 30364 577edc39b501
parent 30223 24d975352879
child 30435 e62d6ecab6ad
equal deleted inserted replaced
30363:9b8d9b6ef803 30364:577edc39b501
    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