202 lemma case_sum_map_sum: "case_sum l r (map_sum f g x) = case_sum (l \<circ> f) (r \<circ> g) x" |
202 lemma case_sum_map_sum: "case_sum l r (map_sum f g x) = case_sum (l \<circ> f) (r \<circ> g) x" |
203 by (case_tac x) simp+ |
203 by (case_tac x) simp+ |
204 |
204 |
205 lemma case_sum_transfer: |
205 lemma case_sum_transfer: |
206 "rel_fun (rel_fun R T) (rel_fun (rel_fun S T) (rel_fun (rel_sum R S) T)) case_sum case_sum" |
206 "rel_fun (rel_fun R T) (rel_fun (rel_fun S T) (rel_fun (rel_sum R S) T)) case_sum case_sum" |
207 unfolding rel_fun_def rel_sum_def by (auto split: sum.splits) |
207 unfolding rel_fun_def by (auto split: sum.splits) |
208 |
208 |
209 lemma case_prod_map_prod: "case_prod h (map_prod f g x) = case_prod (\<lambda>l r. h (f l) (g r)) x" |
209 lemma case_prod_map_prod: "case_prod h (map_prod f g x) = case_prod (\<lambda>l r. h (f l) (g r)) x" |
210 by (case_tac x) simp+ |
210 by (case_tac x) simp+ |
211 |
211 |
212 lemma case_prod_o_map_prod: "case_prod f \<circ> map_prod g1 g2 = case_prod (\<lambda>l r. f (g1 l) (g2 r))" |
212 lemma case_prod_o_map_prod: "case_prod f \<circ> map_prod g1 g2 = case_prod (\<lambda>l r. f (g1 l) (g2 r))" |
213 unfolding comp_def by auto |
213 unfolding comp_def by auto |
214 |
214 |
215 lemma case_prod_transfer: |
215 lemma case_prod_transfer: |
216 "(rel_fun (rel_fun A (rel_fun B C)) (rel_fun (rel_prod A B) C)) case_prod case_prod" |
216 "(rel_fun (rel_fun A (rel_fun B C)) (rel_fun (rel_prod A B) C)) case_prod case_prod" |
217 unfolding rel_fun_def rel_prod_def by simp |
217 unfolding rel_fun_def by simp |
218 |
|
219 lemma prod_inj_map: "inj f \<Longrightarrow> inj g \<Longrightarrow> inj (map_prod f g)" |
|
220 by (simp add: inj_on_def) |
|
221 |
218 |
222 lemma eq_ifI: "(P \<longrightarrow> t = u1) \<Longrightarrow> (\<not> P \<longrightarrow> t = u2) \<Longrightarrow> t = (if P then u1 else u2)" |
219 lemma eq_ifI: "(P \<longrightarrow> t = u1) \<Longrightarrow> (\<not> P \<longrightarrow> t = u2) \<Longrightarrow> t = (if P then u1 else u2)" |
223 by simp |
220 by simp |
224 |
221 |
225 lemma comp_transfer: |
222 lemma comp_transfer: |
244 lemma Inr_transfer: |
241 lemma Inr_transfer: |
245 "rel_fun T (rel_sum S T) Inr Inr" |
242 "rel_fun T (rel_sum S T) Inr Inr" |
246 by auto |
243 by auto |
247 |
244 |
248 lemma Pair_transfer: "rel_fun A (rel_fun B (rel_prod A B)) Pair Pair" |
245 lemma Pair_transfer: "rel_fun A (rel_fun B (rel_prod A B)) Pair Pair" |
249 unfolding rel_fun_def rel_prod_def by simp |
246 unfolding rel_fun_def by simp |
250 |
247 |
251 ML_file "Tools/BNF/bnf_fp_util.ML" |
248 ML_file "Tools/BNF/bnf_fp_util.ML" |
252 ML_file "Tools/BNF/bnf_fp_def_sugar_tactics.ML" |
249 ML_file "Tools/BNF/bnf_fp_def_sugar_tactics.ML" |
253 ML_file "Tools/BNF/bnf_fp_def_sugar.ML" |
250 ML_file "Tools/BNF/bnf_fp_def_sugar.ML" |
254 ML_file "Tools/BNF/bnf_fp_n2m_tactics.ML" |
251 ML_file "Tools/BNF/bnf_fp_n2m_tactics.ML" |