src/HOL/Tools/inductive_package.ML
changeset 21390 b3a9d8a83dea
parent 21367 7a0cc1bb4dcc
child 21433 89104dca628e
equal deleted inserted replaced
21389:10757dcdfe80 21390:b3a9d8a83dea
   656       else (raw_induct RSN (2, rev_mp), [ind_case_names, RuleCases.consumes 1]);
   656       else (raw_induct RSN (2, rev_mp), [ind_case_names, RuleCases.consumes 1]);
   657 
   657 
   658     val (intrs', ctxt2) =
   658     val (intrs', ctxt2) =
   659       ctxt1 |>
   659       ctxt1 |>
   660       LocalTheory.notes
   660       LocalTheory.notes
   661         (map (NameSpace.append rec_name) intr_names ~~
   661         (map (NameSpace.qualified rec_name) intr_names ~~
   662          intr_atts ~~
   662          intr_atts ~~
   663          map (fn th => [([th], [])]) (ProofContext.export ctxt1 ctxt intrs)) |>>
   663          map (fn th => [([th], [])]) (ProofContext.export ctxt1 ctxt intrs)) |>>
   664       map (hd o snd); (* FIXME? *)
   664       map (hd o snd); (* FIXME? *)
   665     val (((_, elims'), (_, [induct'])), ctxt3) =
   665     val (((_, elims'), (_, [induct'])), ctxt3) =
   666       ctxt2 |>
   666       ctxt2 |>
   667       LocalTheory.note ((NameSpace.append rec_name "intros", []), intrs') ||>>
   667       LocalTheory.note ((NameSpace.qualified rec_name "intros",
       
   668           [Attrib.internal (ContextRules.intro_query NONE)]), intrs') ||>>
   668       fold_map (fn (name, (elim, cases)) =>
   669       fold_map (fn (name, (elim, cases)) =>
   669         LocalTheory.note ((NameSpace.append (Sign.base_name name) "cases",
   670         LocalTheory.note ((NameSpace.qualified (Sign.base_name name) "cases",
   670           [Attrib.internal (RuleCases.case_names cases),
   671           [Attrib.internal (RuleCases.case_names cases),
   671            Attrib.internal (RuleCases.consumes 1),
   672            Attrib.internal (RuleCases.consumes 1),
   672            Attrib.internal (InductAttrib.cases_set name)]), [elim]) #>
   673            Attrib.internal (InductAttrib.cases_set name),
       
   674            Attrib.internal (ContextRules.elim_query NONE)]), [elim]) #>
   673         apfst (hd o snd)) elims ||>>
   675         apfst (hd o snd)) elims ||>>
   674       LocalTheory.note ((NameSpace.append rec_name (coind_prefix coind ^ "induct"),
   676       LocalTheory.note ((NameSpace.qualified rec_name (coind_prefix coind ^ "induct"),
   675         map Attrib.internal (#2 induct)), [rulify (#1 induct)]);
   677         map Attrib.internal (#2 induct)), [rulify (#1 induct)]);
   676 
   678 
   677     val induct_att = if coind then InductAttrib.coinduct_set else InductAttrib.induct_set;
   679     val induct_att = if coind then InductAttrib.coinduct_set else InductAttrib.induct_set;
   678     val ctxt4 = if no_ind then ctxt3 else
   680     val ctxt4 = if no_ind then ctxt3 else
   679       let val inducts = cnames ~~ ProjectRule.projects ctxt (1 upto length cnames) induct'
   681       let val inducts = cnames ~~ ProjectRule.projects ctxt (1 upto length cnames) induct'
   681         ctxt3 |>
   683         ctxt3 |>
   682         LocalTheory.notes (inducts |> map (fn (name, th) => (("",
   684         LocalTheory.notes (inducts |> map (fn (name, th) => (("",
   683           [Attrib.internal ind_case_names,
   685           [Attrib.internal ind_case_names,
   684            Attrib.internal (RuleCases.consumes 1),
   686            Attrib.internal (RuleCases.consumes 1),
   685            Attrib.internal (induct_att name)]), [([th], [])]))) |> snd |>
   687            Attrib.internal (induct_att name)]), [([th], [])]))) |> snd |>
   686         LocalTheory.note ((NameSpace.append rec_name (coind_prefix coind ^ "inducts"),
   688         LocalTheory.note ((NameSpace.qualified rec_name (coind_prefix coind ^ "inducts"),
   687           [Attrib.internal ind_case_names,
   689           [Attrib.internal ind_case_names,
   688            Attrib.internal (RuleCases.consumes 1)]), map snd inducts) |> snd
   690            Attrib.internal (RuleCases.consumes 1)]), map snd inducts) |> snd
   689       end;
   691       end;
   690 
   692 
   691     val result =
   693     val result =