diff -r 487d764fca4a -r 1a474286f315 src/HOL/Hilbert_Choice.thy --- a/src/HOL/Hilbert_Choice.thy Mon Jul 04 19:46:19 2016 +0200 +++ b/src/HOL/Hilbert_Choice.thy Mon Jul 04 19:46:19 2016 +0200 @@ -811,6 +811,73 @@ subsection \More on injections, bijections, and inverses\ +locale bijection = + fixes f :: "'a \ 'a" + assumes bij: "bij f" +begin + +lemma bij_inv: + "bij (inv f)" + using bij by (rule bij_imp_bij_inv) + +lemma surj [simp]: + "surj f" + using bij by (rule bij_is_surj) + +lemma inj: + "inj f" + using bij by (rule bij_is_inj) + +lemma surj_inv [simp]: + "surj (inv f)" + using inj by (rule inj_imp_surj_inv) + +lemma inj_inv: + "inj (inv f)" + using surj by (rule surj_imp_inj_inv) + +lemma eqI: + "f a = f b \ a = b" + using inj by (rule injD) + +lemma eq_iff [simp]: + "f a = f b \ a = b" + by (auto intro: eqI) + +lemma eq_invI: + "inv f a = inv f b \ a = b" + using inj_inv by (rule injD) + +lemma eq_inv_iff [simp]: + "inv f a = inv f b \ a = b" + by (auto intro: eq_invI) + +lemma inv_left [simp]: + "inv f (f a) = a" + using inj by (simp add: inv_f_eq) + +lemma inv_comp_left [simp]: + "inv f \ f = id" + by (simp add: fun_eq_iff) + +lemma inv_right [simp]: + "f (inv f a) = a" + using surj by (simp add: surj_f_inv_f) + +lemma inv_comp_right [simp]: + "f \ inv f = id" + by (simp add: fun_eq_iff) + +lemma inv_left_eq_iff [simp]: + "inv f a = b \ f b = a" + by auto + +lemma inv_right_eq_iff [simp]: + "b = inv f a \ f b = a" + by auto + +end + lemma infinite_imp_bij_betw: assumes INF: "\ finite A" shows "\h. bij_betw h A (A - {a})"