src/HOL/Nominal/nominal_inductive.ML
changeset 58112 8081087096ad
parent 57884 36b5691b81a5
child 59058 a78612c67ec0
equal deleted inserted replaced
58111:82db9ad610b9 58112:8081087096ad
   242       in
   242       in
   243         (Logic.list_all (params', prem), (rev vs, subst_bounds (vs, prem)))
   243         (Logic.list_all (params', prem), (rev vs, subst_bounds (vs, prem)))
   244       end) prems);
   244       end) prems);
   245 
   245 
   246     val ind_vars =
   246     val ind_vars =
   247       (Datatype_Prop.indexify_names (replicate (length atomTs) "pi") ~~
   247       (Old_Datatype_Prop.indexify_names (replicate (length atomTs) "pi") ~~
   248        map NominalAtoms.mk_permT atomTs) @ [("z", fsT)];
   248        map NominalAtoms.mk_permT atomTs) @ [("z", fsT)];
   249     val ind_Ts = rev (map snd ind_vars);
   249     val ind_Ts = rev (map snd ind_vars);
   250 
   250 
   251     val concl = HOLogic.mk_Trueprop (foldr1 HOLogic.mk_conj
   251     val concl = HOLogic.mk_Trueprop (foldr1 HOLogic.mk_conj
   252       (map (fn (prem, (p, ts)) => HOLogic.mk_imp (prem,
   252       (map (fn (prem, (p, ts)) => HOLogic.mk_imp (prem,
   643         | SOME (th, _) => Seq.single th
   643         | SOME (th, _) => Seq.single th
   644       end;
   644       end;
   645     val thss = map (fn atom =>
   645     val thss = map (fn atom =>
   646       let val pi' = Free (pi, NominalAtoms.mk_permT (Type (atom, [])))
   646       let val pi' = Free (pi, NominalAtoms.mk_permT (Type (atom, [])))
   647       in map (fn th => zero_var_indexes (th RS mp))
   647       in map (fn th => zero_var_indexes (th RS mp))
   648         (Datatype_Aux.split_conj_thm (Goal.prove ctxt' [] []
   648         (Old_Datatype_Aux.split_conj_thm (Goal.prove ctxt' [] []
   649           (HOLogic.mk_Trueprop (foldr1 HOLogic.mk_conj (map (fn p =>
   649           (HOLogic.mk_Trueprop (foldr1 HOLogic.mk_conj (map (fn p =>
   650             let
   650             let
   651               val (h, ts) = strip_comb p;
   651               val (h, ts) = strip_comb p;
   652               val (ts1, ts2) = chop k ts
   652               val (ts1, ts2) = chop k ts
   653             in
   653             in