# HG changeset patch # User berghofe # Date 1038413207 -3600 # Node ID 12404b452034b17871fd4b0683ebf454903d77c9 # Parent 06ded8d18d02ba649a3f8f6b6255151df1590efe Changed format of realizers / correctness proofs. diff -r 06ded8d18d02 -r 12404b452034 src/HOL/Extraction.thy --- a/src/HOL/Extraction.thy Mon Nov 25 20:32:29 2002 +0100 +++ b/src/HOL/Extraction.thy Wed Nov 27 17:06:47 2002 +0100 @@ -13,7 +13,31 @@ subsection {* Setup *} ML_setup {* +fun realizes_set_proc (Const ("realizes", Type ("fun", [Type ("Null", []), _])) $ r $ + (Const ("op :", _) $ x $ S)) = (case strip_comb S of + (Var (ixn, U), ts) => Some (list_comb (Var (ixn, binder_types U @ + [HOLogic.dest_setT (body_type U)] ---> HOLogic.boolT), ts @ [x])) + | (Free (s, U), ts) => Some (list_comb (Free (s, binder_types U @ + [HOLogic.dest_setT (body_type U)] ---> HOLogic.boolT), ts @ [x])) + | _ => None) + | realizes_set_proc (Const ("realizes", Type ("fun", [T, _])) $ r $ + (Const ("op :", _) $ x $ S)) = (case strip_comb S of + (Var (ixn, U), ts) => Some (list_comb (Var (ixn, T :: binder_types U @ + [HOLogic.dest_setT (body_type U)] ---> HOLogic.boolT), r :: ts @ [x])) + | (Free (s, U), ts) => Some (list_comb (Free (s, T :: binder_types U @ + [HOLogic.dest_setT (body_type U)] ---> HOLogic.boolT), r :: ts @ [x])) + | _ => None) + | realizes_set_proc _ = None; + +fun mk_realizes_set r rT s (setT as Type ("set", [elT])) = + Abs ("x", elT, Const ("realizes", rT --> HOLogic.boolT --> HOLogic.boolT) $ + incr_boundvars 1 r $ (Const ("op :", elT --> setT --> HOLogic.boolT) $ + Bound 0 $ incr_boundvars 1 s)); + Context.>> (fn thy => thy |> + Extraction.add_types + [("bool", ([], None)), + ("set", ([realizes_set_proc], Some mk_realizes_set))] |> Extraction.set_preprocessor (fn sg => Proofterm.rewrite_proof_notypes ([], ("HOL/elim_cong", RewriteHOLProof.elim_cong) :: @@ -189,223 +213,214 @@ "P x y \ P (fst (x, y)) (snd (x, y))" by simp realizers - impI (P, Q): "\P Q pq. pq" + impI (P, Q): "\pq. pq" "\P Q pq (h: _). allI \ _ \ (\x. impI \ _ \ _ \ (h \ x))" impI (P): "Null" "\P Q (h: _). allI \ _ \ (\x. impI \ _ \ _ \ (h \ x))" - impI (Q): "\P Q q. q" "\P Q q. impI \ _ \ _" + impI (Q): "\q. q" "\P Q q. impI \ _ \ _" - impI: "Null" "\P Q. impI \ _ \ _" + impI: "Null" "impI" - mp (P, Q): "\P Q pq. pq" + mp (P, Q): "\pq. pq" "\P Q pq (h: _) p. mp \ _ \ _ \ (spec \ _ \ p \ h)" mp (P): "Null" "\P Q (h: _) p. mp \ _ \ _ \ (spec \ _ \ p \ h)" - mp (Q): "\P Q q. q" "\P Q q. mp \ _ \ _" + mp (Q): "\q. q" "\P Q q. mp \ _ \ _" - mp: "Null" "\P Q. mp \ _ \ _" + mp: "Null" "mp" - allI (P): "\P p. p" "\P p. allI \ _" + allI (P): "\p. p" "\P p. allI \ _" - allI: "Null" "\P. allI \ _" + allI: "Null" "allI" - spec (P): "\P x p. p x" "\P x p. spec \ _ \ x" + spec (P): "\x p. p x" "\P x p. spec \ _ \ x" - spec: "Null" "\P x. spec \ _ \ x" + spec: "Null" "spec" - exI (P): "\P x p. (x, p)" "\P. exI_realizer \ _" + exI (P): "\x p. (x, p)" "\P. exI_realizer \ _" - exI: "\P x. x" "\P x (h: _). h" + exI: "\x. x" "\P x (h: _). h" - exE (P, Q): "\P Q p pq. pq (fst p) (snd p)" + exE (P, Q): "\p pq. pq (fst p) (snd p)" "\P Q p (h1: _) pq (h2: _). h2 \ (fst p) \ (snd p) \ h1" exE (P): "Null" "\P Q p (h1: _) (h2: _). h2 \ (fst p) \ (snd p) \ h1" - exE (Q): "\P Q x pq. pq x" + exE (Q): "\x pq. pq x" "\P Q x (h1: _) pq (h2: _). h2 \ x \ h1" exE: "Null" "\P Q x (h1: _) (h2: _). h2 \ x \ h1" - conjI (P, Q): "\P Q p q. (p, q)" - "\P Q p (h: _) q. conjI_realizer \ - (\p. realizes p P) \ p \ (\q. realizes q Q) \ q \ h" + conjI (P, Q): "Pair" + "\P Q p (h: _) q. conjI_realizer \ P \ p \ Q \ q \ h" - conjI (P): "\P Q p. p" + conjI (P): "\p. p" "\P Q p. conjI \ _ \ _" - conjI (Q): "\P Q q. q" + conjI (Q): "\q. q" "\P Q (h: _) q. conjI \ _ \ _ \ h" - conjI: "Null" - "\P Q. conjI \ _ \ _" + conjI: "Null" "conjI" - conjunct1 (P, Q): "\P Q. fst" + conjunct1 (P, Q): "fst" "\P Q pq. conjunct1 \ _ \ _" - conjunct1 (P): "\P Q p. p" + conjunct1 (P): "\p. p" "\P Q p. conjunct1 \ _ \ _" conjunct1 (Q): "Null" "\P Q q. conjunct1 \ _ \ _" - conjunct1: "Null" - "\P Q. conjunct1 \ _ \ _" + conjunct1: "Null" "conjunct1" - conjunct2 (P, Q): "\P Q. snd" + conjunct2 (P, Q): "snd" "\P Q pq. conjunct2 \ _ \ _" conjunct2 (P): "Null" "\P Q p. conjunct2 \ _ \ _" - conjunct2 (Q): "\P Q p. p" + conjunct2 (Q): "\p. p" "\P Q p. conjunct2 \ _ \ _" - conjunct2: "Null" - "\P Q. conjunct2 \ _ \ _" + conjunct2: "Null" "conjunct2" + + disjI1 (P, Q): "Inl" + "\P Q p. iffD2 \ _ \ _ \ (sum.cases_1 \ P \ _ \ p)" - disjI1 (P, Q): "\P Q. Inl" - "\P Q p. iffD2 \ _ \ _ \ (sum.cases_1 \ (\p. realizes p P) \ _ \ p)" + disjI1 (P): "Some" + "\P Q p. iffD2 \ _ \ _ \ (option.cases_2 \ _ \ P \ p)" - disjI1 (P): "\P Q. Some" - "\P Q p. iffD2 \ _ \ _ \ (option.cases_2 \ _ \ (\p. realizes p P) \ p)" - - disjI1 (Q): "\P Q. None" + disjI1 (Q): "None" "\P Q. iffD2 \ _ \ _ \ (option.cases_1 \ _ \ _)" - disjI1: "\P Q. Left" + disjI1: "Left" "\P Q. iffD2 \ _ \ _ \ (sumbool.cases_1 \ _ \ _)" - disjI2 (P, Q): "\Q P. Inr" - "\Q P q. iffD2 \ _ \ _ \ (sum.cases_2 \ _ \ (\q. realizes q Q) \ q)" + disjI2 (P, Q): "Inr" + "\Q P q. iffD2 \ _ \ _ \ (sum.cases_2 \ _ \ Q \ q)" - disjI2 (P): "\Q P. None" + disjI2 (P): "None" "\Q P. iffD2 \ _ \ _ \ (option.cases_1 \ _ \ _)" - disjI2 (Q): "\Q P. Some" - "\Q P q. iffD2 \ _ \ _ \ (option.cases_2 \ _ \ (\q. realizes q Q) \ q)" + disjI2 (Q): "Some" + "\Q P q. iffD2 \ _ \ _ \ (option.cases_2 \ _ \ Q \ q)" - disjI2: "\Q P. Right" + disjI2: "Right" "\Q P. iffD2 \ _ \ _ \ (sumbool.cases_2 \ _ \ _)" - disjE (P, Q, R): "\P Q R pq pr qr. + disjE (P, Q, R): "\pq pr qr. (case pq of Inl p \ pr p | Inr q \ qr q)" "\P Q R pq (h1: _) pr (h2: _) qr. - disjE_realizer \ _ \ _ \ pq \ (\r. realizes r R) \ pr \ qr \ h1 \ h2" + disjE_realizer \ _ \ _ \ pq \ R \ pr \ qr \ h1 \ h2" - disjE (Q, R): "\P Q R pq pr qr. + disjE (Q, R): "\pq pr qr. (case pq of None \ pr | Some q \ qr q)" "\P Q R pq (h1: _) pr (h2: _) qr. - disjE_realizer2 \ _ \ _ \ pq \ (\r. realizes r R) \ pr \ qr \ h1 \ h2" + disjE_realizer2 \ _ \ _ \ pq \ R \ pr \ qr \ h1 \ h2" - disjE (P, R): "\P Q R pq pr qr. + disjE (P, R): "\pq pr qr. (case pq of None \ qr | Some p \ pr p)" "\P Q R pq (h1: _) pr (h2: _) qr (h3: _). - disjE_realizer2 \ _ \ _ \ pq \ (\r. realizes r R) \ qr \ pr \ h1 \ h3 \ h2" + disjE_realizer2 \ _ \ _ \ pq \ R \ qr \ pr \ h1 \ h3 \ h2" - disjE (R): "\P Q R pq pr qr. + disjE (R): "\pq pr qr. (case pq of Left \ pr | Right \ qr)" "\P Q R pq (h1: _) pr (h2: _) qr. - disjE_realizer3 \ _ \ _ \ pq \ (\r. realizes r R) \ pr \ qr \ h1 \ h2" + disjE_realizer3 \ _ \ _ \ pq \ R \ pr \ qr \ h1 \ h2" disjE (P, Q): "Null" - "\P Q R pq. disjE_realizer \ _ \ _ \ pq \ (\r. realizes Null R) \ _ \ _" + "\P Q R pq. disjE_realizer \ _ \ _ \ pq \ (\x. R) \ _ \ _" disjE (Q): "Null" - "\P Q R pq. disjE_realizer2 \ _ \ _ \ pq \ (\r. realizes Null R) \ _ \ _" + "\P Q R pq. disjE_realizer2 \ _ \ _ \ pq \ (\x. R) \ _ \ _" disjE (P): "Null" "\P Q R pq (h1: _) (h2: _) (h3: _). - disjE_realizer2 \ _ \ _ \ pq \ (\r. realizes Null R) \ _ \ _ \ h1 \ h3 \ h2" + disjE_realizer2 \ _ \ _ \ pq \ (\x. R) \ _ \ _ \ h1 \ h3 \ h2" disjE: "Null" - "\P Q R pq. disjE_realizer3 \ _ \ _ \ pq \ (\r. realizes Null R) \ _ \ _" + "\P Q R pq. disjE_realizer3 \ _ \ _ \ pq \ (\x. R) \ _ \ _" - FalseE (P): "\P. arbitrary" + FalseE (P): "arbitrary" "\P. FalseE \ _" - FalseE: "Null" - "\P. FalseE \ _" + FalseE: "Null" "FalseE" notI (P): "Null" "\P (h: _). allI \ _ \ (\x. notI \ _ \ (h \ x))" - notI: "Null" - "\P. notI \ _" + notI: "Null" "notI" - notE (P, R): "\P R p. arbitrary" + notE (P, R): "\p. arbitrary" "\P R (h: _) p. notE \ _ \ _ \ (spec \ _ \ p \ h)" notE (P): "Null" "\P R (h: _) p. notE \ _ \ _ \ (spec \ _ \ p \ h)" - notE (R): "\P R. arbitrary" - "\P R. notE \ _ \ _" - - notE: "Null" + notE (R): "arbitrary" "\P R. notE \ _ \ _" - subst (P): "\s t P ps. ps" - "\s t P (h: _) ps. subst \ s \ t \ (\x. realizes ps (P x)) \ h" + notE: "Null" "notE" - subst: "Null" - "\s t P. subst \ s \ t \ (\x. realizes Null (P x))" + subst (P): "\s t ps. ps" + "\s t P (h: _) ps. subst \ s \ t \ P ps \ h" - iffD1 (P, Q): "\Q P. fst" + subst: "Null" "subst" + + iffD1 (P, Q): "fst" "\Q P pq (h: _) p. mp \ _ \ _ \ (spec \ _ \ p \ (conjunct1 \ _ \ _ \ h))" - iffD1 (P): "\Q P p. p" + iffD1 (P): "\p. p" "\Q P p (h: _). mp \ _ \ _ \ (conjunct1 \ _ \ _ \ h)" iffD1 (Q): "Null" "\Q P q1 (h: _) q2. mp \ _ \ _ \ (spec \ _ \ q2 \ (conjunct1 \ _ \ _ \ h))" - iffD1: "Null" - "\Q P. iffD1 \ _ \ _" + iffD1: "Null" "iffD1" - iffD2 (P, Q): "\P Q. snd" + iffD2 (P, Q): "snd" "\P Q pq (h: _) q. mp \ _ \ _ \ (spec \ _ \ q \ (conjunct2 \ _ \ _ \ h))" - iffD2 (P): "\P Q p. p" + iffD2 (P): "\p. p" "\P Q p (h: _). mp \ _ \ _ \ (conjunct2 \ _ \ _ \ h)" iffD2 (Q): "Null" "\P Q q1 (h: _) q2. mp \ _ \ _ \ (spec \ _ \ q2 \ (conjunct2 \ _ \ _ \ h))" - iffD2: "Null" - "\P Q. iffD2 \ _ \ _" + iffD2: "Null" "iffD2" - iffI (P, Q): "\P Q pq qp. (pq, qp)" + iffI (P, Q): "Pair" "\P Q pq (h1 : _) qp (h2 : _). conjI_realizer \ - (\pq. \x. realizes x P \ realizes (pq x) Q) \ pq \ - (\qp. \x. realizes x Q \ realizes (qp x) P) \ qp \ + (\pq. \x. P x \ Q (pq x)) \ pq \ + (\qp. \x. Q x \ P (qp x)) \ qp \ (allI \ _ \ (\x. impI \ _ \ _ \ (h1 \ x))) \ (allI \ _ \ (\x. impI \ _ \ _ \ (h2 \ x)))" - iffI (P): "\P Q p. p" + iffI (P): "\p. p" "\P Q (h1 : _) p (h2 : _). conjI \ _ \ _ \ (allI \ _ \ (\x. impI \ _ \ _ \ (h1 \ x))) \ (impI \ _ \ _ \ h2)" - iffI (Q): "\P Q q. q" + iffI (Q): "\q. q" "\P Q q (h1 : _) (h2 : _). conjI \ _ \ _ \ (impI \ _ \ _ \ h1) \ (allI \ _ \ (\x. impI \ _ \ _ \ (h2 \ x)))" - iffI: "Null" - "\P Q. iffI \ _ \ _" + iffI: "Null" "iffI" +(* classical: "Null" "\P. classical \ _" +*) end diff -r 06ded8d18d02 -r 12404b452034 src/HOL/Tools/datatype_realizer.ML --- a/src/HOL/Tools/datatype_realizer.ML Mon Nov 25 20:32:29 2002 +0100 +++ b/src/HOL/Tools/datatype_realizer.ML Wed Nov 27 17:06:47 2002 +0100 @@ -36,6 +36,9 @@ fun is_unit t = snd (strip_type (fastype_of t)) = HOLogic.unitT; +fun tname_of (Type (s, _)) = s + | tname_of _ = ""; + fun mk_realizes T = Const ("realizes", T --> HOLogic.boolT --> HOLogic.boolT); fun make_ind sorts ({descr, rec_names, rec_rewrites, induction, ...} : datatype_info) (is, thy) = @@ -135,19 +138,15 @@ ((space_implode "_" (ind_name :: vs @ ["correctness"]), thm), []) |>> Theory.add_path (NameSpace.pack (if_none path [])); - val inst = map (fn ((((i, _), s), T), U) => ((s, 0), if i mem is then - Abs ("r", U, Abs ("x", T, mk_realizes U $ Bound 1 $ - (Var ((s, 0), T --> HOLogic.boolT) $ Bound 0))) - else Abs ("x", T, mk_realizes Extraction.nullT $ Extraction.nullt $ - (Var ((s, 0), T --> HOLogic.boolT) $ - Bound 0)))) (descr ~~ pnames ~~ map Type.varifyT recTs ~~ - map Type.varifyT rec_result_Ts); + val ivs = Drule.vars_of_terms + [Logic.varify (DatatypeProp.make_ind [descr] sorts)]; + val rvs = Drule.vars_of_terms [prop_of thm']; + val ivs1 = map Var (filter_out (fn (_, T) => + tname_of (body_type T) mem ["set", "bool"]) ivs); + val ivs2 = map (fn (ixn, _) => Var (ixn, the (assoc (rvs, ixn)))) ivs; - val ivs = map Var (Drule.vars_of_terms - [Logic.varify (DatatypeProp.make_ind [descr] sorts)]); - - val prf = foldr forall_intr_prf (ivs, - prf_subst_vars inst (foldr (fn ((f, p), prf) => + val prf = foldr forall_intr_prf (ivs2, + foldr (fn ((f, p), prf) => (case head_of (strip_abs_body f) of Free (s, T) => let val T' = Type.varifyT T @@ -156,10 +155,10 @@ end | _ => AbsP ("H", Some p, prf))) (rec_fns ~~ prems_of thm, Proofterm.proof_combP - (prf_of thm', map PBound (length prems - 1 downto 0))))); + (prf_of thm', map PBound (length prems - 1 downto 0)))); val r' = if null is then r else Logic.varify (foldr (uncurry lambda) - (map Logic.unvarify ivs @ filter_out is_unit + (map Logic.unvarify ivs1 @ filter_out is_unit (map (head_of o strip_abs_body) rec_fns), r)); in Extraction.add_realizers_i [(ind_name, (vs, r', prf))] thy' end; @@ -211,24 +210,19 @@ |> PureThy.store_thm ((exh_name ^ "_P_correctness", thm), []) |>> Theory.add_path (NameSpace.pack (if_none path [])); - val P = Var (("P", 0), HOLogic.boolT); + val P = Var (("P", 0), rT' --> HOLogic.boolT); val prf = forall_intr_prf (y, forall_intr_prf (P, - prf_subst_vars [(("P", 0), Abs ("r", rT', - mk_realizes rT' $ Bound 0 $ P))] (foldr (fn ((p, r), prf) => - forall_intr_prf (Logic.varify r, AbsP ("H", Some (Logic.varify p), - prf))) (prems ~~ rs, Proofterm.proof_combP (prf_of thm', - map PBound (length prems - 1 downto 0)))))); + foldr (fn ((p, r), prf) => + forall_intr_prf (Logic.varify r, AbsP ("H", Some (Logic.varify p), + prf))) (prems ~~ rs, Proofterm.proof_combP (prf_of thm', + map PBound (length prems - 1 downto 0))))); val r' = Logic.varify (Abs ("y", Type.varifyT T, - Abs ("P", HOLogic.boolT, list_abs (map dest_Free rs, list_comb (r, - map Bound ((length rs - 1 downto 0) @ [length rs + 1])))))); - - val prf' = forall_intr_prf (y, forall_intr_prf (P, prf_subst_vars - [(("P", 0), mk_realizes Extraction.nullT $ Extraction.nullt $ P)] - (prf_of exhaustion))); + list_abs (map dest_Free rs, list_comb (r, + map Bound ((length rs - 1 downto 0) @ [length rs]))))); in Extraction.add_realizers_i [(exh_name, (["P"], r', prf)), - (exh_name, ([], Extraction.nullt, prf'))] thy' + (exh_name, ([], Extraction.nullt, prf_of exhaustion))] thy' end; diff -r 06ded8d18d02 -r 12404b452034 src/HOL/Tools/inductive_realizer.ML --- a/src/HOL/Tools/inductive_realizer.ML Mon Nov 25 20:32:29 2002 +0100 +++ b/src/HOL/Tools/inductive_realizer.ML Wed Nov 27 17:06:47 2002 +0100 @@ -69,22 +69,7 @@ map constr_of_intr intrs) end; -fun gen_realizes (Const ("realizes", Type ("fun", [T, _])) $ t $ - (Const ("op :", Type ("fun", [U, _])) $ x $ Var (ixn, _))) = - Var (ixn, [T, U] ---> HOLogic.boolT) $ t $ x - | gen_realizes (Const ("op :", Type ("fun", [U, _])) $ x $ Var (ixn, _)) = - Var (ixn, U --> HOLogic.boolT) $ x - | gen_realizes (bla as Const ("realizes", Type ("fun", [T, _])) $ t $ P) = - if T = Extraction.nullT then P - else (case strip_comb P of - (Var (ixn, U), ts) => list_comb (Var (ixn, T --> U), t :: ts) - | _ => error "gen_realizes: variable expected") - | gen_realizes (t $ u) = gen_realizes t $ gen_realizes u - | gen_realizes (Abs (s, T, t)) = Abs (s, T, gen_realizes t) - | gen_realizes t = t; - fun mk_rlz T = Const ("realizes", [T, HOLogic.boolT] ---> HOLogic.boolT); -fun mk_rlz' T = Const ("realizes", [T, propT] ---> propT); (** turn "P" into "%r x. realizes r (P x)" or "%r x. realizes r (x : P)" **) @@ -268,30 +253,26 @@ fun mk_realizer thy vs params ((rule, rrule), rt) = let - val prems = prems_of rule; + val prems = prems_of rule ~~ prems_of rrule; + val rvs = map fst (relevant_vars (prop_of rule)); val xs = rev (Term.add_vars ([], prop_of rule)); - val rs = gen_rems (op = o pairself fst) - (rev (Term.add_vars ([], prop_of rrule)), xs); + val vs1 = map Var (filter_out (fn ((a, _), _) => a mem rvs) xs); + val rlzvs = rev (Term.add_vars ([], prop_of rrule)); + val vs2 = map (fn (ixn, _) => Var (ixn, the (assoc (rlzvs, ixn)))) xs; + val rs = gen_rems (op = o pairself fst) (rlzvs, xs); fun mk_prf _ [] prf = prf - | mk_prf rs (prem :: prems) prf = - let val T = Extraction.etype_of thy vs [] prem - in if T = Extraction.nullT - then AbsP ("H", Some (mk_rlz' T $ Extraction.nullt $ prem), - mk_prf rs prems prf) - else forall_intr_prf (Var (hd rs), AbsP ("H", Some (mk_rlz' T $ - Var (hd rs) $ prem), mk_prf (tl rs) prems prf)) - end; - - val subst = map (fn v as (ixn, _) => (ixn, gen_rvar vs (Var v))) xs; - val prf = Proofterm.map_proof_terms - (subst_vars ([], subst)) I (prf_of rrule); + | mk_prf rs ((prem, rprem) :: prems) prf = + if Extraction.etype_of thy vs [] prem = Extraction.nullT + then AbsP ("H", Some rprem, mk_prf rs prems prf) + else forall_intr_prf (Var (hd rs), AbsP ("H", Some rprem, + mk_prf (tl rs) prems prf)); in (Thm.name_of_thm rule, (vs, if rt = Extraction.nullt then rt else - foldr (uncurry lambda) (map Var xs, rt), - foldr forall_intr_prf (map Var xs, mk_prf rs prems (Proofterm.proof_combP - (prf, map PBound (length prems - 1 downto 0)))))) + foldr (uncurry lambda) (vs1, rt), + foldr forall_intr_prf (vs2, mk_prf rs prems (Proofterm.proof_combP + (prf_of rrule, map PBound (length prems - 1 downto 0)))))) end; fun add_rule (rss, r) = @@ -348,10 +329,10 @@ end else ((recs, dummies), replicate (length rs) Extraction.nullt)) ((get #rec_thms dt_info, dummies), rss); - val rintrs = map (fn (intr, c) => Pattern.eta_contract (gen_realizes + val rintrs = map (fn (intr, c) => Pattern.eta_contract (Extraction.realizes_of thy2 vs c (prop_of (forall_intr_list (map (cterm_of (sign_of thy2) o Var) - (rev (Term.add_vars ([], prop_of intr)) \\ params')) intr))))) + (rev (Term.add_vars ([], prop_of intr)) \\ params')) intr)))) (intrs ~~ flat constrss); val rlzsets = distinct (map (fn rintr => snd (HOLogic.dest_mem (HOLogic.dest_Trueprop (Logic.strip_assums_concl rintr)))) rintrs); @@ -377,8 +358,8 @@ let val r = indrule_realizer thy induct raw_induct rsets params' (vs @ Ps) rec_names rss intrs dummies; - val rlz = strip_all (Logic.unvarify (gen_realizes - (Extraction.realizes_of thy (vs @ Ps) r (prop_of induct)))); + val rlz = strip_all (Logic.unvarify + (Extraction.realizes_of thy (vs @ Ps) r (prop_of induct))); val rews = map mk_meta_eq (fst_conv :: snd_conv :: get #rec_thms dt_info); val thm = simple_prove_goal_cterm (cterm_of (sign_of thy) rlz) (fn prems => @@ -416,8 +397,8 @@ [Abs ("x", HOLogic.unitT, Const ("arbitrary", body_type T))] else []) @ map Bound ((length prems - 1 downto 0) @ [length prems]))); - val rlz = strip_all (Logic.unvarify (gen_realizes - (Extraction.realizes_of thy (vs @ Ps) r (prop_of elim)))); + val rlz = strip_all (Logic.unvarify + (Extraction.realizes_of thy (vs @ Ps) r (prop_of elim))); val rews = map mk_meta_eq case_thms; val thm = simple_prove_goal_cterm (cterm_of (sign_of thy) rlz) (fn prems => [cut_facts_tac [hd prems] 1,