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: |