diff -r fba16c509af0 -r e8c96013ea8a src/HOL/Equiv_Relations.thy --- a/src/HOL/Equiv_Relations.thy Wed Mar 05 18:28:57 2025 +0100 +++ b/src/HOL/Equiv_Relations.thy Tue Mar 11 10:20:44 2025 +0100 @@ -11,14 +11,14 @@ subsection \Equivalence relations -- set version\ definition equiv :: "'a set \ ('a \ 'a) set \ bool" - where "equiv A r \ refl_on A r \ sym r \ trans r" + where "equiv A r \ r \ A \ A \ refl_on A r \ sym r \ trans r" -lemma equivI: "refl_on A r \ sym r \ trans r \ equiv A r" +lemma equivI: "r \ A \ A \ refl_on A r \ sym r \ trans r \ equiv A r" by (simp add: equiv_def) lemma equivE: assumes "equiv A r" - obtains "refl_on A r" and "sym r" and "trans r" + obtains "r \ A \ A" and "refl_on A r" and "sym r" and "trans r" using assms by (simp add: equiv_def) text \ @@ -30,24 +30,27 @@ lemma sym_trans_comp_subset: "sym r \ trans r \ r\ O r \ r" unfolding trans_def sym_def converse_unfold by blast -lemma refl_on_comp_subset: "refl_on A r \ r \ r\ O r" +lemma refl_on_comp_subset: "r \ A \ A \ refl_on A r \ r \ r\ O r" unfolding refl_on_def by blast lemma equiv_comp_eq: "equiv A r \ r\ O r = r" - unfolding equiv_def - by (iprover intro: sym_trans_comp_subset refl_on_comp_subset equalityI) + by (iprover elim: equivE intro: sym_trans_comp_subset refl_on_comp_subset equalityI) text \Second half.\ lemma comp_equivI: assumes "r\ O r = r" "Domain r = A" shows "equiv A r" -proof - +proof (rule equivI) + show "r \ A \ A" + using assms by auto + have *: "\x y. (x, y) \ r \ (y, x) \ r" using assms by blast - show ?thesis - unfolding equiv_def refl_on_def sym_def trans_def - using assms by (auto intro: *) + + thus "refl_on A r" "sym r" "trans r" + unfolding refl_on_def sym_def trans_def + using assms by auto qed @@ -57,8 +60,19 @@ \ \lemma for the next result\ unfolding equiv_def trans_def sym_def by blast -theorem equiv_class_eq: "equiv A r \ (a, b) \ r \ r``{a} = r``{b}" - by (intro equalityI equiv_class_subset; force simp add: equiv_def sym_def) +theorem equiv_class_eq: + assumes "equiv A r" and "(a, b) \ r" + shows "r``{a} = r``{b}" +proof (intro subset_antisym equiv_class_subset[OF \equiv A r\]) + show "(a, b) \ r" + using \(a, b) \ r\ . +next + have "sym r" + using \equiv A r\ by (auto elim: equivE) + thus "(b, a) \ r" + using \(a, b) \ r\ + by (auto dest: symD) +qed lemma equiv_class_self: "equiv A r \ a \ A \ a \ r``{a}" unfolding equiv_def refl_on_def by blast @@ -100,8 +114,17 @@ lemma Union_quotient: "equiv A r \ \(A//r) = A" unfolding equiv_def refl_on_def quotient_def by blast -lemma quotient_disj: "equiv A r \ X \ A//r \ Y \ A//r \ X = Y \ X \ Y = {}" - unfolding quotient_def equiv_def trans_def sym_def by blast +lemma quotient_disj: + assumes "equiv A r" and "X \ A//r" and "Y \ A//r" + shows "X = Y \ X \ Y = {}" +proof - + have "sym r" and "trans r" + using \equiv A r\ + by (auto elim: equivE) + thus ?thesis + using assms(2,3) + unfolding quotient_def equiv_def trans_def sym_def by blast +qed lemma quotient_eqI: assumes "equiv A r" "X \ A//r" "Y \ A//r" and xy: "x \ X" "y \ Y" "(x, y) \ r" @@ -109,8 +132,11 @@ proof - obtain a b where "a \ A" and a: "X = r `` {a}" and "b \ A" and b: "Y = r `` {b}" using assms by (auto elim!: quotientE) - then have "(a,b) \ r" - using xy \equiv A r\ unfolding equiv_def sym_def trans_def by blast + moreover have "sym r" and "trans r" + using \equiv A r\ + by (auto elim: equivE) + ultimately have "(a,b) \ r" + using xy unfolding sym_def trans_def by blast then show ?thesis unfolding a b by (rule equiv_class_eq [OF \equiv A r\]) qed