add transfer lemmas for quotients
authorhuffman
Thu, 05 Apr 2012 15:59:25 +0200
changeset 48234776254f89a18
parent 48233 8e6a45f1bf8f
child 48235 360d7ed4cc0f
add transfer lemmas for quotients
src/HOL/Lifting.thy
     1.1 --- a/src/HOL/Lifting.thy	Thu Apr 05 15:23:26 2012 +0200
     1.2 +++ b/src/HOL/Lifting.thy	Thu Apr 05 15:59:25 2012 +0200
     1.3 @@ -297,6 +297,31 @@
     1.4    show "transp (invariant P)" by (auto intro: transpI simp: invariant_def)
     1.5  qed
     1.6  
     1.7 +text {* Generating transfer rules for quotients. *}
     1.8 +
     1.9 +lemma Quotient_right_unique:
    1.10 +  assumes "Quotient R Abs Rep T" shows "right_unique T"
    1.11 +  using assms unfolding Quotient_alt_def right_unique_def by metis
    1.12 +
    1.13 +lemma Quotient_right_total:
    1.14 +  assumes "Quotient R Abs Rep T" shows "right_total T"
    1.15 +  using assms unfolding Quotient_alt_def right_total_def by metis
    1.16 +
    1.17 +lemma Quotient_rel_eq_transfer:
    1.18 +  assumes "Quotient R Abs Rep T"
    1.19 +  shows "(T ===> T ===> op =) R (op =)"
    1.20 +  using assms unfolding Quotient_alt_def fun_rel_def by simp
    1.21 +
    1.22 +lemma Quotient_bi_total:
    1.23 +  assumes "Quotient R Abs Rep T" and "reflp R"
    1.24 +  shows "bi_total T"
    1.25 +  using assms unfolding Quotient_alt_def bi_total_def reflp_def by auto
    1.26 +
    1.27 +lemma Quotient_id_abs_transfer:
    1.28 +  assumes "Quotient R Abs Rep T" and "reflp R"
    1.29 +  shows "(op = ===> T) (\<lambda>x. x) Abs"
    1.30 +  using assms unfolding Quotient_alt_def reflp_def fun_rel_def by simp
    1.31 +
    1.32  text {* Generating transfer rules for a type defined with @{text "typedef"}. *}
    1.33  
    1.34  lemma typedef_bi_unique: