src/HOL/Transfer.thy
changeset 62324 ae44f16dcea5
parent 61630 608520e0e8e2
child 63092 a949b2a5f51d
equal deleted inserted replaced
62323:8c3eec5812d8 62324:ae44f16dcea5
   227 lemma bi_uniqueI: "left_unique R \<Longrightarrow> right_unique R \<Longrightarrow> bi_unique R"
   227 lemma bi_uniqueI: "left_unique R \<Longrightarrow> right_unique R \<Longrightarrow> bi_unique R"
   228 unfolding bi_unique_alt_def ..
   228 unfolding bi_unique_alt_def ..
   229 
   229 
   230 end
   230 end
   231 
   231 
   232 subsection \<open>Equality restricted by a predicate\<close>
   232 
   233 
       
   234 definition eq_onp :: "('a \<Rightarrow> bool) \<Rightarrow> 'a \<Rightarrow> 'a \<Rightarrow> bool"
       
   235   where "eq_onp R = (\<lambda>x y. R x \<and> x = y)"
       
   236 
       
   237 lemma eq_onp_Grp: "eq_onp P = BNF_Def.Grp (Collect P) id"
       
   238 unfolding eq_onp_def Grp_def by auto
       
   239 
       
   240 lemma eq_onp_to_eq:
       
   241   assumes "eq_onp P x y"
       
   242   shows "x = y"
       
   243 using assms by (simp add: eq_onp_def)
       
   244 
       
   245 lemma eq_onp_top_eq_eq: "eq_onp top = op="
       
   246 by (simp add: eq_onp_def)
       
   247 
       
   248 lemma eq_onp_same_args:
       
   249   shows "eq_onp P x x = P x"
       
   250 using assms by (auto simp add: eq_onp_def)
       
   251 
       
   252 lemma Ball_Collect: "Ball A P = (A \<subseteq> (Collect P))"
       
   253 by auto
       
   254 
   233 
   255 ML_file "Tools/Transfer/transfer.ML"
   234 ML_file "Tools/Transfer/transfer.ML"
   256 declare refl [transfer_rule]
   235 declare refl [transfer_rule]
   257 
   236 
   258 hide_const (open) Rel
   237 hide_const (open) Rel
   555   shows "((A ===> B ===> op =) ===> op =) left_unique left_unique"
   534   shows "((A ===> B ===> op =) ===> op =) left_unique left_unique"
   556 unfolding left_unique_def[abs_def] by transfer_prover
   535 unfolding left_unique_def[abs_def] by transfer_prover
   557 
   536 
   558 lemma prod_pred_parametric [transfer_rule]:
   537 lemma prod_pred_parametric [transfer_rule]:
   559   "((A ===> op =) ===> (B ===> op =) ===> rel_prod A B ===> op =) pred_prod pred_prod"
   538   "((A ===> op =) ===> (B ===> op =) ===> rel_prod A B ===> op =) pred_prod pred_prod"
   560 unfolding pred_prod_def[abs_def] Basic_BNFs.fsts_def Basic_BNFs.snds_def fstsp.simps sndsp.simps 
   539 unfolding prod.pred_set[abs_def] Basic_BNFs.fsts_def Basic_BNFs.snds_def fstsp.simps sndsp.simps 
   561 by simp transfer_prover
   540 by simp transfer_prover
   562 
   541 
   563 lemma apfst_parametric [transfer_rule]:
   542 lemma apfst_parametric [transfer_rule]:
   564   "((A ===> B) ===> rel_prod A C ===> rel_prod B C) apfst apfst"
   543   "((A ===> B) ===> rel_prod A C ===> rel_prod B C) apfst apfst"
   565 unfolding apfst_def[abs_def] by transfer_prover
   544 unfolding apfst_def[abs_def] by transfer_prover