# HG changeset patch # User paulson # Date 1070625498 -3600 # Node ID 950c121390160d0429a81f66896bf52c4f967e53 # Parent 031a5a051bb4e6d453db7726a296f71612e52f21 stylistic changes diff -r 031a5a051bb4 -r 950c12139016 src/HOL/Induct/Mutil.thy --- a/src/HOL/Induct/Mutil.thy Fri Dec 05 10:28:02 2003 +0100 +++ b/src/HOL/Induct/Mutil.thy Fri Dec 05 12:58:18 2003 +0100 @@ -19,7 +19,8 @@ inductive "tiling A" intros empty [simp, intro]: "{} \ tiling A" - Un [simp, intro]: "a \ A ==> t \ tiling A ==> a \ t = {} ==> a \ t \ tiling A" + Un [simp, intro]: "[| a \ A; t \ tiling A; a \ t = {} |] + ==> a \ t \ tiling A" consts domino :: "(nat \ nat) set set" inductive domino @@ -27,39 +28,41 @@ horiz [simp]: "{(i, j), (i, Suc j)} \ domino" vertl [simp]: "{(i, j), (Suc i, j)} \ domino" +text {* \medskip Sets of squares of the given colour*} + constdefs coloured :: "nat => (nat \ nat) set" "coloured b == {(i, j). (i + j) mod 2 = b}" +syntax whites :: "(nat \ nat) set" + blacks :: "(nat \ nat) set" + +translations + "whites" == "coloured 0" + "blacks" == "coloured (Suc 0)" + text {* \medskip The union of two disjoint tilings is a tiling *} -lemma tiling_UnI [rule_format, intro]: - "t \ tiling A ==> u \ tiling A --> t \ u = {} --> t \ u \ tiling A" - apply (erule tiling.induct) - prefer 2 - apply (simp add: Un_assoc) - apply auto +lemma tiling_UnI [intro]: + "[|t \ tiling A; u \ tiling A; t \ u = {} |] ==> t \ u \ tiling A" + apply (induct set: tiling) + apply (auto simp add: Un_assoc) done text {* \medskip Chess boards *} lemma Sigma_Suc1 [simp]: - "lessThan (Suc n) \ B = ({n} \ B) \ ((lessThan n) \ B)" - apply (unfold lessThan_def) - apply auto - done + "lessThan (Suc n) \ B = ({n} \ B) \ ((lessThan n) \ B)" + by (auto simp add: lessThan_def) lemma Sigma_Suc2 [simp]: - "A \ lessThan (Suc n) = (A \ {n}) \ (A \ (lessThan n))" - apply (unfold lessThan_def) - apply auto - done + "A \ lessThan (Suc n) = (A \ {n}) \ (A \ (lessThan n))" + by (auto simp add: lessThan_def) lemma sing_Times_lemma: "({i} \ {n}) \ ({i} \ {m}) = {(i, m), (i, n)}" - apply auto - done + by auto lemma dominoes_tile_row [intro!]: "{i} \ lessThan (2 * n) \ tiling domino" apply (induct n) @@ -69,48 +72,40 @@ done lemma dominoes_tile_matrix: "(lessThan m) \ lessThan (2 * n) \ tiling domino" - apply (induct m) - apply auto - done + by (induct m, auto) text {* \medskip @{term coloured} and Dominoes *} lemma coloured_insert [simp]: - "coloured b \ (insert (i, j) t) = - (if (i + j) mod 2 = b then insert (i, j) (coloured b \ t) - else coloured b \ t)" - apply (unfold coloured_def) - apply auto - done + "coloured b \ (insert (i, j) t) = + (if (i + j) mod 2 = b then insert (i, j) (coloured b \ t) + else coloured b \ t)" + by (auto simp add: coloured_def) lemma domino_singletons: - "d \ domino ==> - (\i j. coloured 0 \ d = {(i, j)}) \ - (\m n. coloured 1 \ d = {(m, n)})" + "d \ domino ==> + (\i j. whites \ d = {(i, j)}) \ + (\m n. blacks \ d = {(m, n)})"; apply (erule domino.cases) apply (auto simp add: mod_Suc) done lemma domino_finite [simp]: "d \ domino ==> finite d" - apply (erule domino.cases) - apply auto - done + by (erule domino.cases, auto) text {* \medskip Tilings of dominoes *} lemma tiling_domino_finite [simp]: "t \ tiling domino ==> finite t" - apply (induct set: tiling) - apply auto - done + by (induct set: tiling, auto) declare Int_Un_distrib [simp] Diff_Int_distrib [simp] lemma tiling_domino_0_1: - "t \ tiling domino ==> card (coloured 0 \ t) = card (coloured (Suc 0) \ t)" + "t \ tiling domino ==> card(whites \ t) = card(blacks \ t)" apply (induct set: tiling) apply (drule_tac [2] domino_singletons) apply auto @@ -124,14 +119,14 @@ text {* \medskip Final argument is surprisingly complex *} theorem gen_mutil_not_tiling: - "t \ tiling domino ==> - (i + j) mod 2 = 0 ==> (m + n) mod 2 = 0 ==> - {(i, j), (m, n)} \ t - ==> (t - {(i, j)} - {(m, n)}) \ tiling domino" + "t \ tiling domino ==> + (i + j) mod 2 = 0 ==> (m + n) mod 2 = 0 ==> + {(i, j), (m, n)} \ t + ==> (t - {(i, j)} - {(m, n)}) \ tiling domino" apply (rule notI) apply (subgoal_tac - "card (coloured 0 \ (t - {(i, j)} - {(m, n)})) < - card (coloured (Suc 0) \ (t - {(i, j)} - {(m, n)}))") + "card (whites \ (t - {(i, j)} - {(m, n)})) < + card (blacks \ (t - {(i, j)} - {(m, n)}))") apply (force simp only: tiling_domino_0_1) apply (simp add: tiling_domino_0_1 [symmetric]) apply (simp add: coloured_def card_Diff2_less) @@ -140,8 +135,8 @@ text {* Apply the general theorem to the well-known case *} theorem mutil_not_tiling: - "t = lessThan (2 * Suc m) \ lessThan (2 * Suc n) - ==> t - {(0, 0)} - {(Suc (2 * m), Suc (2 * n))} \ tiling domino" + "t = lessThan (2 * Suc m) \ lessThan (2 * Suc n) + ==> t - {(0, 0)} - {(Suc (2 * m), Suc (2 * n))} \ tiling domino" apply (rule gen_mutil_not_tiling) apply (blast intro!: dominoes_tile_matrix) apply auto