src/HOL/Isar_examples/MutilatedCheckerboard.thy
changeset 7874 180364256231
parent 7800 8ee919e42174
child 7968 964b65b4e433
equal deleted inserted replaced
7873:5d1200c7a671 7874:180364256231
    52     qed;
    52     qed;
    53   qed;
    53   qed;
    54 qed;
    54 qed;
    55 
    55 
    56 
    56 
    57 subsection {* Basic properties of below *};
    57 subsection {* Basic properties of ``below'' *};
    58 
    58 
    59 constdefs
    59 constdefs
    60   below :: "nat => nat set"
    60   below :: "nat => nat set"
    61   "below n == {i. i < n}";
    61   "below n == {i. i < n}";
    62 
    62 
    75   by (simp add: below_def less_Suc_eq) blast;
    75   by (simp add: below_def less_Suc_eq) blast;
    76 
    76 
    77 lemmas Sigma_Suc = Sigma_Suc1 Sigma_Suc2;
    77 lemmas Sigma_Suc = Sigma_Suc1 Sigma_Suc2;
    78 
    78 
    79 
    79 
    80 subsection {* Basic properties of evnodd *};
    80 subsection {* Basic properties of ``evnodd'' *};
    81 
    81 
    82 constdefs
    82 constdefs
    83   evnodd :: "(nat * nat) set => nat => (nat * nat) set"
    83   evnodd :: "(nat * nat) set => nat => (nat * nat) set"
    84   "evnodd A b == A Int {(i, j). (i + j) mod 2 = b}";
    84   "evnodd A b == A Int {(i, j). (i + j) mod 2 = b}";
    85 
    85 
   221       fix b; assume "b < 2";
   221       fix b; assume "b < 2";
   222       have "EX i j. ?e a b = {(i, j)}"; by (rule domino_singleton);
   222       have "EX i j. ?e a b = {(i, j)}"; by (rule domino_singleton);
   223       thus "?thesis b";
   223       thus "?thesis b";
   224       proof (elim exE);
   224       proof (elim exE);
   225 	have "?e (a Un t) b = ?e a b Un ?e t b"; by (rule evnodd_Un);
   225 	have "?e (a Un t) b = ?e a b Un ?e t b"; by (rule evnodd_Un);
   226 	also; fix i j; assume e: "?e a b = {(i, j)}";
   226 	also; fix i j; assume "?e a b = {(i, j)}";
   227 	also; have "... Un ?e t b = insert (i, j) (?e t b)"; by simp;
   227 	also; have "... Un ?e t b = insert (i, j) (?e t b)"; by simp;
   228 	also; have "card ... = Suc (card (?e t b))";
   228 	also; have "card ... = Suc (card (?e t b))";
   229 	proof (rule card_insert_disjoint);
   229 	proof (rule card_insert_disjoint);
   230 	  show "finite (?e t b)";
   230 	  show "finite (?e t b)";
   231             by (rule evnodd_finite, rule tiling_domino_finite);
   231             by (rule evnodd_finite, rule tiling_domino_finite);
   290     also; from t; have "... = card (?e ?t 1)";
   290     also; from t; have "... = card (?e ?t 1)";
   291       by (rule tiling_domino_01);
   291       by (rule tiling_domino_01);
   292     also; have "?e ?t 1 = ?e ?t'' 1"; by simp;
   292     also; have "?e ?t 1 = ?e ?t'' 1"; by simp;
   293     also; from t''; have "card ... = card (?e ?t'' 0)";
   293     also; from t''; have "card ... = card (?e ?t'' 0)";
   294       by (rule tiling_domino_01 [RS sym]);
   294       by (rule tiling_domino_01 [RS sym]);
   295     finally; show False; ..;
   295     finally; have "... < ..."; .; thus False; ..;
   296   qed;
   296   qed;
   297 qed;
   297 qed;
   298 
   298 
   299 end;
   299 end;