src/HOL/Tools/inductive_realizer.ML
changeset 29281 b22ccb3998db
parent 29271 1d685baea08e
child 29389 0a49f940d729
equal deleted inserted replaced
29280:c5531bf7c6b2 29281:b22ccb3998db
    47       in strip_all' (s'::used) names' (subst_bound (Free (s', T), t)) end
    47       in strip_all' (s'::used) names' (subst_bound (Free (s', T), t)) end
    48   | strip_all' used names ((t as Const ("==>", _) $ P) $ Q) =
    48   | strip_all' used names ((t as Const ("==>", _) $ P) $ Q) =
    49       t $ strip_all' used names Q
    49       t $ strip_all' used names Q
    50   | strip_all' _ _ t = t;
    50   | strip_all' _ _ t = t;
    51 
    51 
    52 fun strip_all t = strip_all' (OldTerm.add_term_free_names (t, [])) [] t;
    52 fun strip_all t = strip_all' (Term.add_free_names t []) [] t;
    53 
    53 
    54 fun strip_one name (Const ("all", _) $ Abs (s, T, Const ("==>", _) $ P $ Q)) =
    54 fun strip_one name (Const ("all", _) $ Abs (s, T, Const ("==>", _) $ P $ Q)) =
    55       (subst_bound (Free (name, T), P), subst_bound (Free (name, T), Q))
    55       (subst_bound (Free (name, T), P), subst_bound (Free (name, T), Q))
    56   | strip_one _ (Const ("==>", _) $ P $ Q) = (P, Q);
    56   | strip_one _ (Const ("==>", _) $ P $ Q) = (P, Q);
    57 
    57 
   368             (hd (prems_of (hd inducts))))), nparms))) vs;
   368             (hd (prems_of (hd inducts))))), nparms))) vs;
   369         val rs = indrule_realizer thy induct raw_induct rsets params'
   369         val rs = indrule_realizer thy induct raw_induct rsets params'
   370           (vs' @ Ps) rec_names rss' intrs dummies;
   370           (vs' @ Ps) rec_names rss' intrs dummies;
   371         val rlzs = map (fn (r, ind) => Extraction.realizes_of thy (vs' @ Ps) r
   371         val rlzs = map (fn (r, ind) => Extraction.realizes_of thy (vs' @ Ps) r
   372           (prop_of ind)) (rs ~~ inducts);
   372           (prop_of ind)) (rs ~~ inducts);
   373         val used = foldr OldTerm.add_term_free_names [] rlzs;
   373         val used = fold Term.add_free_names rlzs [];
   374         val rnames = Name.variant_list used (replicate (length inducts) "r");
   374         val rnames = Name.variant_list used (replicate (length inducts) "r");
   375         val rnames' = Name.variant_list
   375         val rnames' = Name.variant_list
   376           (used @ rnames) (replicate (length intrs) "s");
   376           (used @ rnames) (replicate (length intrs) "s");
   377         val rlzs' as (prems, _, _) :: _ = map (fn (rlz, name) =>
   377         val rlzs' as (prems, _, _) :: _ = map (fn (rlz, name) =>
   378           let
   378           let