src/HOL/Lifting.thy
changeset 47501 0b9294e093db
parent 47436 d8fad618a67a
child 47521 69f95ac85c3d
equal deleted inserted replaced
47500:5024b37c489c 47501:0b9294e093db
   254 by (rule identity_equivp)
   254 by (rule identity_equivp)
   255 
   255 
   256 lemma typedef_to_Quotient:
   256 lemma typedef_to_Quotient:
   257   assumes "type_definition Rep Abs S"
   257   assumes "type_definition Rep Abs S"
   258   and T_def: "T \<equiv> (\<lambda>x y. x = Rep y)"
   258   and T_def: "T \<equiv> (\<lambda>x y. x = Rep y)"
   259   shows "Quotient (Lifting.invariant (\<lambda>x. x \<in> S)) Abs Rep T"
   259   shows "Quotient (invariant (\<lambda>x. x \<in> S)) Abs Rep T"
   260 proof -
   260 proof -
   261   interpret type_definition Rep Abs S by fact
   261   interpret type_definition Rep Abs S by fact
   262   from Rep Abs_inject Rep_inverse Abs_inverse T_def show ?thesis
   262   from Rep Abs_inject Rep_inverse Abs_inverse T_def show ?thesis
   263     by (auto intro!: QuotientI simp: invariant_def fun_eq_iff)
   263     by (auto intro!: QuotientI simp: invariant_def fun_eq_iff)
   264 qed
   264 qed
   265 
   265 
   266 lemma typedef_to_part_equivp:
   266 lemma typedef_to_part_equivp:
   267   assumes "type_definition Rep Abs S"
   267   assumes "type_definition Rep Abs S"
   268   shows "part_equivp (Lifting.invariant (\<lambda>x. x \<in> S))"
   268   shows "part_equivp (invariant (\<lambda>x. x \<in> S))"
   269 proof (intro part_equivpI)
   269 proof (intro part_equivpI)
   270   interpret type_definition Rep Abs S by fact
   270   interpret type_definition Rep Abs S by fact
   271   show "\<exists>x. Lifting.invariant (\<lambda>x. x \<in> S) x x" using Rep by (auto simp: invariant_def)
   271   show "\<exists>x. invariant (\<lambda>x. x \<in> S) x x" using Rep by (auto simp: invariant_def)
   272 next
   272 next
   273   show "symp (Lifting.invariant (\<lambda>x. x \<in> S))" by (auto intro: sympI simp: invariant_def)
   273   show "symp (invariant (\<lambda>x. x \<in> S))" by (auto intro: sympI simp: invariant_def)
   274 next
   274 next
   275   show "transp (Lifting.invariant (\<lambda>x. x \<in> S))" by (auto intro: transpI simp: invariant_def)
   275   show "transp (invariant (\<lambda>x. x \<in> S))" by (auto intro: transpI simp: invariant_def)
   276 qed
   276 qed
   277 
   277 
   278 lemma open_typedef_to_Quotient:
   278 lemma open_typedef_to_Quotient:
   279   assumes "type_definition Rep Abs {x. P x}"
   279   assumes "type_definition Rep Abs {x. P x}"
   280   and T_def: "T \<equiv> (\<lambda>x y. x = Rep y)"
   280   and T_def: "T \<equiv> (\<lambda>x y. x = Rep y)"