223 [ (rtac minor 1), |
223 [ (rtac minor 1), |
224 (rtac (major RS SigmaD1) 1), |
224 (rtac (major RS SigmaD1) 1), |
225 (rtac (major RS SigmaD2) 1) ]); |
225 (rtac (major RS SigmaD2) 1) ]); |
226 |
226 |
227 val prems = goal Prod.thy |
227 val prems = goal Prod.thy |
228 "[| A<=C; !!x. x:A ==> B<=D |] ==> Sigma A (%x.B) <= Sigma C (%x.D)"; |
228 "[| A<=C; !!x. x:A ==> B x <= D x |] ==> Sigma A B <= Sigma C D"; |
229 by (cut_facts_tac prems 1); |
229 by (cut_facts_tac prems 1); |
230 by (fast_tac (set_cs addIs (prems RL [subsetD]) |
230 by (fast_tac (set_cs addIs (prems RL [subsetD]) |
231 addSIs [SigmaI] |
231 addSIs [SigmaI] |
232 addSEs [SigmaE]) 1); |
232 addSEs [SigmaE]) 1); |
233 qed "Sigma_mono"; |
233 qed "Sigma_mono"; |
234 |
234 |
235 qed_goal "Sigma_empty1" Prod.thy "Sigma {} B = {}" |
235 qed_goal "Sigma_empty1" Prod.thy "Sigma {} B = {}" |
236 (fn _ => [ (fast_tac (eq_cs addSEs [SigmaE]) 1) ]); |
236 (fn _ => [ (fast_tac (eq_cs addSEs [SigmaE]) 1) ]); |
237 |
237 |
238 qed_goal "Sigma_empty2" Prod.thy "Sigma A (%x.{}) = {}" |
238 qed_goal "Sigma_empty2" Prod.thy "A Times {} = {}" |
239 (fn _ => [ (fast_tac (eq_cs addSEs [SigmaE]) 1) ]); |
239 (fn _ => [ (fast_tac (eq_cs addSEs [SigmaE]) 1) ]); |
240 |
240 |
241 Addsimps [Sigma_empty1,Sigma_empty2]; |
241 Addsimps [Sigma_empty1,Sigma_empty2]; |
242 |
242 |
243 goal Prod.thy "((a,b): Sigma A B) = (a:A & b:B(a))"; |
243 goal Prod.thy "((a,b): Sigma A B) = (a:A & b:B(a))"; |