123 by (rtac minor 1); |
123 by (rtac minor 1); |
124 by (assume_tac 2); |
124 by (assume_tac 2); |
125 by (Fast_tac 1); |
125 by (Fast_tac 1); |
126 qed "quotientE"; |
126 qed "quotientE"; |
127 |
127 |
128 (** Not needed by Theory Integ --> bypassed **) |
128 goalw Equiv.thy [equiv_def,refl_def,quotient_def] |
129 (**goalw Equiv.thy [equiv_def,refl_def,quotient_def] |
|
130 "!!A r. equiv A r ==> Union(A/r) = A"; |
129 "!!A r. equiv A r ==> Union(A/r) = A"; |
131 by (Fast_tac 1); |
130 by (blast_tac (!claset addSIs [equalityI]) 1); |
132 qed "Union_quotient"; |
131 qed "Union_quotient"; |
133 **) |
132 |
134 |
133 goalw Equiv.thy [quotient_def] |
135 (** Not needed by Theory Integ --> bypassed **) |
134 "!!A r. [| equiv A r; X: A/r; Y: A/r |] ==> X=Y | (X Int Y = {})"; |
136 (*goalw Equiv.thy [quotient_def] |
|
137 "!!A r. [| equiv A r; X: A/r; Y: A/r |] ==> X=Y | (X Int Y <= 0)"; |
|
138 by (safe_tac (!claset addSIs [equiv_class_eq])); |
135 by (safe_tac (!claset addSIs [equiv_class_eq])); |
139 by (assume_tac 1); |
136 by (assume_tac 1); |
140 by (rewrite_goals_tac [equiv_def,trans_def,sym_def]); |
137 by (rewrite_goals_tac [equiv_def,trans_def,sym_def]); |
141 by (Fast_tac 1); |
138 by (blast_tac (!claset addSIs [equalityI]) 1); |
142 qed "quotient_disj"; |
139 qed "quotient_disj"; |
143 **) |
140 |
144 |
141 |
145 (**** Defining unary operations upon equivalence classes ****) |
142 (**** Defining unary operations upon equivalence classes ****) |
146 |
143 |
147 (* theorem needed to prove UN_equiv_class *) |
144 (* theorem needed to prove UN_equiv_class *) |
148 goal Set.thy "!!A. [| a:A; ! y:A. b(y)=b(a) |] ==> (UN y:A. b(y))=b(a)"; |
145 goal Set.thy "!!A. [| a:A; ! y:A. b(y)=b(a) |] ==> (UN y:A. b(y))=b(a)"; |