abbreviation
RESPECTS ::"[i\i, i] \ o" (infixr \respects\ 80) where "f respects r \ congruent(r,f)"
abbreviation
RESPECTS2 ::"[i\i\i, i] \ o" (infixr \respects2 \ 80) where "f respects2 r \ congruent2(r,r,f)" \<comment> \<open>Abbreviation for the common case where the relations are identical\<close>
subsection\<open>Suppes, Theorem 70: \<^term>\<open>r\<close> is an equiv relation iff \<^term>\<open>converse(r) O r = r\<close>\<close>
(** first half: equiv(A,r) \<Longrightarrow> converse(r) O r = r **)
lemma sym_trans_comp_subset: "\sym(r); trans(r)\ \ converse(r) O r \ r" by (unfold trans_def sym_def, blast)
lemma refl_comp_subset: "\refl(A,r); r \ A*A\ \ r \ converse(r) O r" by (unfold refl_def, blast)
lemma equiv_comp_eq: "equiv(A,r) \ converse(r) O r = r" unfolding equiv_def apply (blast del: subsetI intro!: sym_trans_comp_subset refl_comp_subset) done
(*second half*) lemma comp_equivI: "\converse(r) O r = r; domain(r) = A\ \ equiv(A,r)" unfolding equiv_def refl_def sym_def trans_def apply (erule equalityE) apply (subgoal_tac "\x y. \x,y\ \ r \ \y,x\ \ r", blast+) done
(** Equivalence classes **)
(*Lemma for the next result*) lemma equiv_class_subset: "\sym(r); trans(r); \a,b\: r\ \ r``{a} \ r``{b}" by (unfold trans_def sym_def, blast)
(*type checking of @{term"\<Union>x\<in>r``{a}. b(x)"} *) lemma UN_equiv_class_type: "\equiv(A,r); b respects r; X \ A//r; \x. x \ A \ b(x) \ B\ \<Longrightarrow> (\<Union>x\<in>X. b(x)) \<in> B" apply (unfold quotient_def, safe) apply (simp (no_asm_simp) add: UN_equiv_class) done
(*Sufficient conditions for injectiveness. Could weaken premises! major premise could be an inclusion; bcong could be \<And>y. y \<in> A \<Longrightarrow> b(y):B
*) lemma UN_equiv_class_inject: "\equiv(A,r); b respects r;
(\<Union>x\<in>X. b(x))=(\<Union>y\<in>Y. b(y)); X \<in> A//r; Y \<in> A//r; \<And>x y. \<lbrakk>x \<in> A; y \<in> A; b(x)=b(y)\<rbrakk> \<Longrightarrow> \<langle>x,y\<rangle>:r\<rbrakk> \<Longrightarrow> X=Y" apply (unfold quotient_def, safe) apply (rule equiv_class_eq, assumption) apply (simp add: UN_equiv_class [of A r b]) done
subsection\<open>Defining Binary Operations upon Equivalence Classes\<close>
lemma congruent2_implies_congruent: "\equiv(A,r1); congruent2(r1,r2,b); a \ A\ \ congruent(r2,b(a))" by (unfold congruent_def congruent2_def equiv_def refl_def, blast)
(*Suggested by John Harrison -- the two subproofs may be MUCH simpler
than the direct proof*) lemma congruent2I: "\equiv(A1,r1); equiv(A2,r2); \<And>y z w. \<lbrakk>w \<in> A2; \<langle>y,z\<rangle> \<in> r1\<rbrakk> \<Longrightarrow> b(y,w) = b(z,w); \<And>y z w. \<lbrakk>w \<in> A1; \<langle>y,z\<rangle> \<in> r2\<rbrakk> \<Longrightarrow> b(w,y) = b(w,z) \<rbrakk> \<Longrightarrow> congruent2(r1,r2,b)" apply (unfold congruent2_def equiv_def refl_def, safe) apply (blast intro: trans) done
lemma congruent2_commuteI: assumes equivA: "equiv(A,r)" and commute: "\y z. \y \ A; z \ A\ \ b(y,z) = b(z,y)" and congt: "\y z w. \w \ A; \y,z\: r\ \ b(w,y) = b(w,z)" shows"b respects2 r" apply (insert equivA [THEN equiv_type, THEN subsetD]) apply (rule congruent2I [OF equivA equivA]) apply (rule commute [THEN trans]) apply (rule_tac [3] commute [THEN trans, symmetric]) apply (rule_tac [5] sym) apply (blast intro: congt)+ done
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.0Bemerkung:
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.