diff -r 7247cb62406c -r 1d43f86f48be src/HOL/Number_Theory/Cong.thy --- a/src/HOL/Number_Theory/Cong.thy Mon Dec 28 18:03:26 2015 +0100 +++ b/src/HOL/Number_Theory/Cong.thy Mon Dec 28 19:23:15 2015 +0100 @@ -178,32 +178,32 @@ by (induct k) (auto simp add: cong_mult_int) lemma cong_setsum_nat [rule_format]: - "(ALL x: A. [((f x)::nat) = g x] (mod m)) \ - [(SUM x:A. f x) = (SUM x:A. g x)] (mod m)" + "(\x\A. [((f x)::nat) = g x] (mod m)) \ + [(\x\A. f x) = (\x\A. g x)] (mod m)" apply (cases "finite A") apply (induct set: finite) apply (auto intro: cong_add_nat) done lemma cong_setsum_int [rule_format]: - "(ALL x: A. [((f x)::int) = g x] (mod m)) \ - [(SUM x:A. f x) = (SUM x:A. g x)] (mod m)" + "(\x\A. [((f x)::int) = g x] (mod m)) \ + [(\x\A. f x) = (\x\A. g x)] (mod m)" apply (cases "finite A") apply (induct set: finite) apply (auto intro: cong_add_int) done lemma cong_setprod_nat [rule_format]: - "(ALL x: A. [((f x)::nat) = g x] (mod m)) \ - [(PROD x:A. f x) = (PROD x:A. g x)] (mod m)" + "(\x\A. [((f x)::nat) = g x] (mod m)) \ + [(\x\A. f x) = (\x\A. g x)] (mod m)" apply (cases "finite A") apply (induct set: finite) apply (auto intro: cong_mult_nat) done lemma cong_setprod_int [rule_format]: - "(ALL x: A. [((f x)::int) = g x] (mod m)) \ - [(PROD x:A. f x) = (PROD x:A. g x)] (mod m)" + "(\x\A. [((f x)::int) = g x] (mod m)) \ + [(\x\A. f x) = (\x\A. g x)] (mod m)" apply (cases "finite A") apply (induct set: finite) apply (auto intro: cong_mult_int) @@ -566,18 +566,18 @@ by (auto simp add: cong_altdef_int lcm_least_int) [1] lemma cong_cong_setprod_coprime_nat [rule_format]: "finite A \ - (ALL i:A. (ALL j:A. i \ j \ coprime (m i) (m j))) \ - (ALL i:A. [(x::nat) = y] (mod m i)) \ - [x = y] (mod (PROD i:A. m i))" + (\i\A. (\j\A. i \ j \ coprime (m i) (m j))) \ + (\i\A. [(x::nat) = y] (mod m i)) \ + [x = y] (mod (\i\A. m i))" apply (induct set: finite) apply auto apply (metis One_nat_def coprime_cong_mult_nat gcd.commute setprod_coprime_nat) done lemma cong_cong_setprod_coprime_int [rule_format]: "finite A \ - (ALL i:A. (ALL j:A. i \ j \ coprime (m i) (m j))) \ - (ALL i:A. [(x::int) = y] (mod m i)) \ - [x = y] (mod (PROD i:A. m i))" + (\i\A. (\j\A. i \ j \ coprime (m i) (m j))) \ + (\i\A. [(x::int) = y] (mod m i)) \ + [x = y] (mod (\i\A. m i))" apply (induct set: finite) apply auto apply (metis coprime_cong_mult_int gcd.commute setprod_coprime_int) @@ -758,18 +758,18 @@ and m :: "'a \ nat" assumes fin: "finite A" and cop: "ALL i : A. (ALL j : A. i \ j \ coprime (m i) (m j))" - shows "EX b. (ALL i : A. [b i = 1] (mod m i) \ [b i = 0] (mod (PROD j : A - {i}. m j)))" + shows "EX b. (ALL i : A. [b i = 1] (mod m i) \ [b i = 0] (mod (\j \ A - {i}. m j)))" proof (rule finite_set_choice, rule fin, rule ballI) fix i assume "i : A" - with cop have "coprime (PROD j : A - {i}. m j) (m i)" + with cop have "coprime (\j \ A - {i}. m j) (m i)" by (intro setprod_coprime_nat, auto) - then have "EX x. [(PROD j : A - {i}. m j) * x = 1] (mod m i)" + then have "EX x. [(\j \ A - {i}. m j) * x = 1] (mod m i)" by (elim cong_solve_coprime_nat) - then obtain x where "[(PROD j : A - {i}. m j) * x = 1] (mod m i)" + then obtain x where "[(\j \ A - {i}. m j) * x = 1] (mod m i)" by auto - moreover have "[(PROD j : A - {i}. m j) * x = 0] - (mod (PROD j : A - {i}. m j))" + moreover have "[(\j \ A - {i}. m j) * x = 0] + (mod (\j \ A - {i}. m j))" by (subst mult.commute, rule cong_mult_self_nat) ultimately show "\a. [a = 1] (mod m i) \ [a = 0] (mod setprod m (A - {i}))" @@ -786,22 +786,22 @@ proof - from chinese_remainder_aux_nat [OF fin cop] obtain b where bprop: "ALL i:A. [b i = 1] (mod m i) \ - [b i = 0] (mod (PROD j : A - {i}. m j))" + [b i = 0] (mod (\j \ A - {i}. m j))" by blast - let ?x = "SUM i:A. (u i) * (b i)" + let ?x = "\i\A. (u i) * (b i)" show "?thesis" proof (rule exI, clarify) fix i assume a: "i : A" show "[?x = u i] (mod m i)" proof - - from fin a have "?x = (SUM j:{i}. u j * b j) + - (SUM j:A-{i}. u j * b j)" + from fin a have "?x = (\j \ {i}. u j * b j) + + (\j \ A - {i}. u j * b j)" by (subst setsum.union_disjoint [symmetric], auto intro: setsum.cong) - then have "[?x = u i * b i + (SUM j:A-{i}. u j * b j)] (mod m i)" + then have "[?x = u i * b i + (\j \ A - {i}. u j * b j)] (mod m i)" by auto - also have "[u i * b i + (SUM j:A-{i}. u j * b j) = - u i * 1 + (SUM j:A-{i}. u j * 0)] (mod m i)" + also have "[u i * b i + (\j \ A - {i}. u j * b j) = + u i * 1 + (\j \ A - {i}. u j * 0)] (mod m i)" apply (rule cong_add_nat) apply (rule cong_scalar2_nat) using bprop a apply blast @@ -822,9 +822,9 @@ qed lemma coprime_cong_prod_nat [rule_format]: "finite A \ - (ALL i: A. (ALL j: A. i \ j \ coprime (m i) (m j))) \ - (ALL i: A. [(x::nat) = y] (mod m i)) \ - [x = y] (mod (PROD i:A. m i))" + (\i\A. (\j\A. i \ j \ coprime (m i) (m j))) \ + (\i\A. [(x::nat) = y] (mod m i)) \ + [x = y] (mod (\i\A. m i))" apply (induct set: finite) apply auto apply (metis One_nat_def coprime_cong_mult_nat gcd.commute setprod_coprime_nat) @@ -835,17 +835,17 @@ and m :: "'a \ nat" and u :: "'a \ nat" assumes fin: "finite A" - and nz: "ALL i:A. m i \ 0" - and cop: "ALL i:A. (ALL j : A. i \ j \ coprime (m i) (m j))" - shows "EX! x. x < (PROD i:A. m i) \ (ALL i:A. [x = u i] (mod m i))" + and nz: "\i\A. m i \ 0" + and cop: "\i\A. (\j\A. i \ j \ coprime (m i) (m j))" + shows "EX! x. x < (\i\A. m i) \ (\i\A. [x = u i] (mod m i))" proof - from chinese_remainder_nat [OF fin cop] obtain y where one: "(ALL i:A. [y = u i] (mod m i))" by blast - let ?x = "y mod (PROD i:A. m i)" - from fin nz have prodnz: "(PROD i:A. m i) \ 0" + let ?x = "y mod (\i\A. m i)" + from fin nz have prodnz: "(\i\A. m i) \ 0" by auto - then have less: "?x < (PROD i:A. m i)" + then have less: "?x < (\i\A. m i)" by auto have cong: "ALL i:A. [?x = u i] (mod m i)" apply auto @@ -859,11 +859,11 @@ apply (rule fin) apply assumption done - have unique: "ALL z. z < (PROD i:A. m i) \ + have unique: "ALL z. z < (\i\A. m i) \ (ALL i:A. [z = u i] (mod m i)) \ z = ?x" proof (clarify) fix z - assume zless: "z < (PROD i:A. m i)" + assume zless: "z < (\i\A. m i)" assume zcong: "(ALL i:A. [z = u i] (mod m i))" have "ALL i:A. [?x = z] (mod m i)" apply clarify @@ -872,7 +872,7 @@ apply (rule cong_sym_nat) using zcong apply auto done - with fin cop have "[?x = z] (mod (PROD i:A. m i))" + with fin cop have "[?x = z] (mod (\i\A. m i))" apply (intro coprime_cong_prod_nat) apply auto done