src/HOL/Tools/quickcheck_generators.ML
changeset 32970 fbd2bb2489a8
parent 32740 9dd0a2f83429
child 33029 2fefe039edf1
equal deleted inserted replaced
32969:15489e162b21 32970:fbd2bb2489a8
   147       |> Drule.instantiate ([(aT, icT)],
   147       |> Drule.instantiate ([(aT, icT)],
   148            [(cT_random_aux, cert t_random_aux), (cT_rhs, cert t_rhs)]);
   148            [(cT_random_aux, cert t_random_aux), (cT_rhs, cert t_rhs)]);
   149     val tac = ALLGOALS (rtac rule)
   149     val tac = ALLGOALS (rtac rule)
   150       THEN ALLGOALS (simp_tac rew_ss)
   150       THEN ALLGOALS (simp_tac rew_ss)
   151       THEN (ALLGOALS (ProofContext.fact_tac (flat eqs2)))
   151       THEN (ALLGOALS (ProofContext.fact_tac (flat eqs2)))
   152     val simp = SkipProof.prove lthy' [v] [] eq (K tac);
   152     val simp = Skip_Proof.prove lthy' [v] [] eq (K tac);
   153   in (simp, lthy') end;
   153   in (simp, lthy') end;
   154 
   154 
   155 end;
   155 end;
   156 
   156 
   157 fun random_aux_primrec_multi auxname [eq] lthy =
   157 fun random_aux_primrec_multi auxname [eq] lthy =
   183             val proj_simps = map (snd o snd) proj_defs;
   183             val proj_simps = map (snd o snd) proj_defs;
   184             fun tac { context = ctxt, prems = _ } =
   184             fun tac { context = ctxt, prems = _ } =
   185               ALLGOALS (simp_tac (HOL_ss addsimps proj_simps))
   185               ALLGOALS (simp_tac (HOL_ss addsimps proj_simps))
   186               THEN ALLGOALS (EqSubst.eqsubst_tac ctxt [0] [aux_simp])
   186               THEN ALLGOALS (EqSubst.eqsubst_tac ctxt [0] [aux_simp])
   187               THEN ALLGOALS (simp_tac (HOL_ss addsimps [fst_conv, snd_conv]));
   187               THEN ALLGOALS (simp_tac (HOL_ss addsimps [fst_conv, snd_conv]));
   188           in (map (fn prop => SkipProof.prove lthy [v] [] prop tac) eqs, lthy) end;
   188           in (map (fn prop => Skip_Proof.prove lthy [v] [] prop tac) eqs, lthy) end;
   189       in
   189       in
   190         lthy
   190         lthy
   191         |> random_aux_primrec aux_eq'
   191         |> random_aux_primrec aux_eq'
   192         ||>> fold_map (LocalTheory.define Thm.definitionK) proj_defs
   192         ||>> fold_map (LocalTheory.define Thm.definitionK) proj_defs
   193         |-> (fn (aux_simp, proj_defs) => prove_eqs aux_simp proj_defs)
   193         |-> (fn (aux_simp, proj_defs) => prove_eqs aux_simp proj_defs)
   204     val proto_eqs = map mk_proto_eq eqs;
   204     val proto_eqs = map mk_proto_eq eqs;
   205     fun prove_simps proto_simps lthy =
   205     fun prove_simps proto_simps lthy =
   206       let
   206       let
   207         val ext_simps = map (fn thm => fun_cong OF [fun_cong OF [thm]]) proto_simps;
   207         val ext_simps = map (fn thm => fun_cong OF [fun_cong OF [thm]]) proto_simps;
   208         val tac = ALLGOALS (ProofContext.fact_tac ext_simps);
   208         val tac = ALLGOALS (ProofContext.fact_tac ext_simps);
   209       in (map (fn prop => SkipProof.prove lthy vs [] prop (K tac)) eqs, lthy) end;
   209       in (map (fn prop => Skip_Proof.prove lthy vs [] prop (K tac)) eqs, lthy) end;
   210     val b = Binding.qualify true prfx (Binding.qualify true name (Binding.name "simps"));
   210     val b = Binding.qualify true prfx (Binding.qualify true name (Binding.name "simps"));
   211   in
   211   in
   212     lthy
   212     lthy
   213     |> random_aux_primrec_multi (name ^ prfx) proto_eqs
   213     |> random_aux_primrec_multi (name ^ prfx) proto_eqs
   214     |-> (fn proto_simps => prove_simps proto_simps)
   214     |-> (fn proto_simps => prove_simps proto_simps)