src/HOL/Isar_examples/Minimal.thy
author wenzelm
Mon, 29 Nov 1999 15:52:49 +0100
changeset 8039 a901bafe4578
parent 8037 18f10850aca5
permissions -rw-r--r--
Goal: tuned pris;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8037
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
     1
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
     2
header {* The mimimality principle *};
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
     3
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
     4
theory Minimal = Main:;
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
     5
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
     6
consts
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
     7
  rel :: "'a => 'a => bool"  (infixl "<<" 50);
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
     8
axioms
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
     9
  induct: "(ALL m. m << n --> P m ==> P n) ==> P n";
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    10
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    11
theorem "A ~= {} ==> EX n. n:A & (ALL m. m << n --> m ~: A)"
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    12
  (concl is "Ex ?minimal");
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    13
proof -;
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    14
  assume "A ~= {}";
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    15
  hence "EX n. n:A"; by blast;
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    16
  thus ?thesis;
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    17
  proof;
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    18
    fix n; assume h: "n:A";
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    19
    have "n:A --> Ex ?minimal" (is "?P n");
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    20
    proof (rule induct [of n]);
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    21
      fix m;
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    22
      assume hyp: "ALL m. m << n --> ?P m";
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    23
      show "?P n";
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    24
      proof;
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    25
	show "Ex ?minimal";
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    26
	proof (rule case_split);
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    27
	  assume "EX m. m << n & m:A";
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    28
	  with hyp; show ?thesis; by blast;
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    29
	next;
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    30
	  assume "~ (EX m. m << n & m:A)";
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    31
	  with h; have "?minimal n"; by blast;
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    32
	  thus ?thesis; ..;
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    33
	qed;
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    34
      qed;
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    35
    qed;
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    36
    thus ?thesis; ..;
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    37
  qed;
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    38
qed;
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    39
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    40
text {* \medskip Prefer a short, tactic script-style proof? *};
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    41
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    42
theorem "A ~= {} ==> EX n. n:A & (ALL m. m << n --> m ~: A)";
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    43
proof -;
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    44
  assume "A ~= {}";
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    45
  {{; fix n; have "n:A --> ?thesis"; by (rule induct [of n]) blast; }};
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    46
  thus ?thesis; by (force! simp add: not_empty);
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    47
qed;
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    48
18f10850aca5 Minimal.thy;
wenzelm
parents:
diff changeset
    49
end;