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)" |