src/HOL/Lifting.thy
changeset 47545 a2850a16e30f
parent 47544 e455cdaac479
child 47575 b90cd7016d4f
equal deleted inserted replaced
47544:e455cdaac479 47545:a2850a16e30f
   351 
   351 
   352 lemma typedef_bi_unique: "bi_unique T"
   352 lemma typedef_bi_unique: "bi_unique T"
   353   unfolding bi_unique_def T_def
   353   unfolding bi_unique_def T_def
   354   by (simp add: type_definition.Rep_inject [OF type])
   354   by (simp add: type_definition.Rep_inject [OF type])
   355 
   355 
   356 lemma typedef_right_total: "right_total T"
       
   357   unfolding right_total_def T_def by simp
       
   358 
       
   359 lemma typedef_rep_transfer: "(T ===> op =) (\<lambda>x. x) Rep"
   356 lemma typedef_rep_transfer: "(T ===> op =) (\<lambda>x. x) Rep"
   360   unfolding fun_rel_def T_def by simp
   357   unfolding fun_rel_def T_def by simp
   361 
   358 
   362 lemma typedef_transfer_All: "((T ===> op =) ===> op =) (Ball A) All"
   359 lemma typedef_All_transfer: "((T ===> op =) ===> op =) (Ball A) All"
   363   unfolding T_def fun_rel_def
   360   unfolding T_def fun_rel_def
   364   by (metis type_definition.Rep [OF type]
   361   by (metis type_definition.Rep [OF type]
   365     type_definition.Abs_inverse [OF type])
   362     type_definition.Abs_inverse [OF type])
   366 
   363 
   367 lemma typedef_transfer_Ex: "((T ===> op =) ===> op =) (Bex A) Ex"
   364 lemma typedef_Ex_transfer: "((T ===> op =) ===> op =) (Bex A) Ex"
   368   unfolding T_def fun_rel_def
   365   unfolding T_def fun_rel_def
   369   by (metis type_definition.Rep [OF type]
   366   by (metis type_definition.Rep [OF type]
   370     type_definition.Abs_inverse [OF type])
   367     type_definition.Abs_inverse [OF type])
   371 
   368 
   372 lemma typedef_transfer_bforall:
   369 lemma typedef_forall_transfer:
   373   "((T ===> op =) ===> op =)
   370   "((T ===> op =) ===> op =)
   374     (transfer_bforall (\<lambda>x. x \<in> A)) transfer_forall"
   371     (transfer_bforall (\<lambda>x. x \<in> A)) transfer_forall"
   375   unfolding transfer_bforall_def transfer_forall_def Ball_def [symmetric]
   372   unfolding transfer_bforall_def transfer_forall_def Ball_def [symmetric]
   376   by (rule typedef_transfer_All)
   373   by (rule typedef_All_transfer)
   377 
   374 
   378 end
   375 end
   379 
       
   380 text {* Generating transfer rules for a type copy. *}
       
   381 
       
   382 lemma copy_type_bi_total:
       
   383   assumes type: "type_definition Rep Abs UNIV"
       
   384   assumes T_def: "T \<equiv> (\<lambda>x y. x = Rep y)"
       
   385   shows "bi_total T"
       
   386   unfolding bi_total_def T_def
       
   387   by (metis type_definition.Abs_inverse [OF type] UNIV_I)
       
   388 
   376 
   389 text {* Generating the correspondence rule for a constant defined with
   377 text {* Generating the correspondence rule for a constant defined with
   390   @{text "lift_definition"}. *}
   378   @{text "lift_definition"}. *}
   391 
   379 
   392 lemma Quotient_to_transfer:
   380 lemma Quotient_to_transfer: