equal
deleted
inserted
replaced
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) |