equal
deleted
inserted
replaced
321 apply (drule prod.reindex) |
321 apply (drule prod.reindex) |
322 apply auto |
322 apply auto |
323 done |
323 done |
324 then have "\<forall>x \<in> E. [(p-x) mod p = - x](mod p)" |
324 then have "\<forall>x \<in> E. [(p-x) mod p = - x](mod p)" |
325 by (metis cong_def minus_mod_self1 mod_mod_trivial) |
325 by (metis cong_def minus_mod_self1 mod_mod_trivial) |
326 then have "[prod ((\<lambda>x. x mod p) o (op - p)) E = prod (uminus) E](mod p)" |
326 then have "[prod ((\<lambda>x. x mod p) \<circ> (op - p)) E = prod (uminus) E](mod p)" |
327 using finite_E p_ge_2 cong_prod [of E "(\<lambda>x. x mod p) o (op - p)" uminus p] |
327 using finite_E p_ge_2 cong_prod [of E "(\<lambda>x. x mod p) \<circ> (op - p)" uminus p] |
328 by auto |
328 by auto |
329 then have two: "[prod id F = prod (uminus) E](mod p)" |
329 then have two: "[prod id F = prod (uminus) E](mod p)" |
330 by (metis FE cong_cong_mod_int cong_refl cong_prod minus_mod_self1) |
330 by (metis FE cong_cong_mod_int cong_refl cong_prod minus_mod_self1) |
331 have "prod uminus E = (-1) ^ card E * prod id E" |
331 have "prod uminus E = (-1) ^ card E * prod id E" |
332 using finite_E by (induct set: finite) auto |
332 using finite_E by (induct set: finite) auto |