src/HOL/Finite_Set.thy
changeset 15228 4d332d10fa3d
parent 15140 322485b816ac
child 15234 ec91a90c604e
equal deleted inserted replaced
15227:804ecdc08cf2 15228:4d332d10fa3d
  1284     (setprod f (A Un B) :: 'a ::{field})
  1284     (setprod f (A Un B) :: 'a ::{field})
  1285       = setprod f A * setprod f B / setprod f (A Int B)"
  1285       = setprod f A * setprod f B / setprod f (A Int B)"
  1286   apply (subst setprod_Un_Int [symmetric], auto)
  1286   apply (subst setprod_Un_Int [symmetric], auto)
  1287   apply (subgoal_tac "finite (A Int B)")
  1287   apply (subgoal_tac "finite (A Int B)")
  1288   apply (frule setprod_nonzero_field [of "A Int B" f], assumption)
  1288   apply (frule setprod_nonzero_field [of "A Int B" f], assumption)
  1289   apply (subst times_divide_eq_right [THEN sym], auto)
  1289   apply (subst times_divide_eq_right [THEN sym], auto simp add: divide_self)
  1290   done
  1290   done
  1291 
  1291 
  1292 lemma setprod_diff1: "finite A ==> f a \<noteq> 0 ==>
  1292 lemma setprod_diff1: "finite A ==> f a \<noteq> 0 ==>
  1293     (setprod f (A - {a}) :: 'a :: {field}) =
  1293     (setprod f (A - {a}) :: 'a :: {field}) =
  1294       (if a:A then setprod f A / f a else setprod f A)"
  1294       (if a:A then setprod f A / f a else setprod f A)"
  1295   apply (erule finite_induct)
  1295   apply (erule finite_induct)
  1296    apply (auto simp add: insert_Diff_if)
  1296    apply (auto simp add: insert_Diff_if)
  1297   apply (subgoal_tac "f a * setprod f F / f a = setprod f F * f a / f a")
  1297   apply (subgoal_tac "f a * setprod f F / f a = setprod f F * f a / f a")
  1298   apply (erule ssubst)
  1298   apply (erule ssubst)
  1299   apply (subst times_divide_eq_right [THEN sym])
  1299   apply (subst times_divide_eq_right [THEN sym])
  1300   apply (auto simp add: mult_ac)
  1300   apply (auto simp add: mult_ac divide_self)
  1301   done
  1301   done
  1302 
  1302 
  1303 lemma setprod_inversef: "finite A ==>
  1303 lemma setprod_inversef: "finite A ==>
  1304     ALL x: A. f x \<noteq> (0::'a::{field,division_by_zero}) ==>
  1304     ALL x: A. f x \<noteq> (0::'a::{field,division_by_zero}) ==>
  1305       setprod (inverse \<circ> f) A = inverse (setprod f A)"
  1305       setprod (inverse \<circ> f) A = inverse (setprod f A)"