src/HOL/Isar_examples/MutilatedCheckerboard.thy
changeset 8297 f5fdb69ad4d2
parent 8281 188e2924433e
child 8674 ac6c028e0249
equal deleted inserted replaced
8296:c72122020380 8297:f5fdb69ad4d2
    33   "t : tiling A --> u : tiling A --> t Int u = {}
    33   "t : tiling A --> u : tiling A --> t Int u = {}
    34     --> t Un u : tiling A";
    34     --> t Un u : tiling A";
    35 proof;
    35 proof;
    36   assume "t : tiling A" (is "_ : ?T");
    36   assume "t : tiling A" (is "_ : ?T");
    37   thus "u : ?T --> t Int u = {} --> t Un u : ?T" (is "?P t");
    37   thus "u : ?T --> t Int u = {} --> t Un u : ?T" (is "?P t");
    38   proof (induct t in set: tiling);
    38   proof induct;
    39     show "?P {}"; by simp;
    39     show "?P {}"; by simp;
    40 
    40 
    41     fix a t;
    41     fix a t;
    42     assume "a : A" "t : ?T" "?P t" "a <= - t";
    42     assume "a : A" "t : ?T" "?P t" "a <= - t";
    43     show "?P (a Un t)";
    43     show "?P (a Un t)";
   166   "[| d : domino; b < 2 |] ==> EX i j. evnodd d b = {(i, j)}";
   166   "[| d : domino; b < 2 |] ==> EX i j. evnodd d b = {(i, j)}";
   167 proof -;
   167 proof -;
   168   assume b: "b < 2";
   168   assume b: "b < 2";
   169   assume "d : domino";
   169   assume "d : domino";
   170   thus ?thesis (is "?P d");
   170   thus ?thesis (is "?P d");
   171   proof (induct d in set: domino);
   171   proof induct;
   172     from b; have b_cases: "b = 0 | b = 1"; by arith;
   172     from b; have b_cases: "b = 0 | b = 1"; by arith;
   173     fix i j;
   173     fix i j;
   174     note [simp] = evnodd_empty evnodd_insert mod_Suc;
   174     note [simp] = evnodd_empty evnodd_insert mod_Suc;
   175     from b_cases; show "?P {(i, j), (i, j + 1)}"; by rule auto;
   175     from b_cases; show "?P {(i, j), (i, j + 1)}"; by rule auto;
   176     from b_cases; show "?P {(i, j), (i + 1, j)}"; by rule auto;
   176     from b_cases; show "?P {(i, j), (i + 1, j)}"; by rule auto;
   190 lemma tiling_domino_finite:
   190 lemma tiling_domino_finite:
   191   "t : tiling domino ==> finite t" (is "t : ?T ==> ?F t");
   191   "t : tiling domino ==> finite t" (is "t : ?T ==> ?F t");
   192 proof -;
   192 proof -;
   193   assume "t : ?T";
   193   assume "t : ?T";
   194   thus "?F t";
   194   thus "?F t";
   195   proof (induct t in set: tiling);
   195   proof induct;
   196     show "?F {}"; by (rule Finites.emptyI);
   196     show "?F {}"; by (rule Finites.emptyI);
   197     fix a t; assume "?F t";
   197     fix a t; assume "?F t";
   198     assume "a : domino"; hence "?F a"; by (rule domino_finite);
   198     assume "a : domino"; hence "?F a"; by (rule domino_finite);
   199     thus "?F (a Un t)"; by (rule finite_UnI);
   199     thus "?F (a Un t)"; by (rule finite_UnI);
   200   qed;
   200   qed;
   204   "t : tiling domino ==> card (evnodd t 0) = card (evnodd t 1)"
   204   "t : tiling domino ==> card (evnodd t 0) = card (evnodd t 1)"
   205   (is "t : ?T ==> ?P t");
   205   (is "t : ?T ==> ?P t");
   206 proof -;
   206 proof -;
   207   assume "t : ?T";
   207   assume "t : ?T";
   208   thus "?P t";
   208   thus "?P t";
   209   proof (induct t in set: tiling);
   209   proof induct;
   210     show "?P {}"; by (simp add: evnodd_def);
   210     show "?P {}"; by (simp add: evnodd_def);
   211 
   211 
   212     fix a t;
   212     fix a t;
   213     let ?e = evnodd;
   213     let ?e = evnodd;
   214     assume "a : domino" "t : ?T"
   214     assume "a : domino" "t : ?T"