src/HOL/Isar_examples/KnasterTarski.thy
author wenzelm
Fri, 08 Oct 1999 15:09:14 +0200
changeset 7800 8ee919e42174
parent 7761 7fab9592384f
child 7818 1acfb8cc3720
permissions -rw-r--r--
improved presentation;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6882
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
     1
(*  Title:      HOL/Isar_examples/KnasterTarski.thy
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
     3
    Author:     Markus Wenzel, TU Muenchen
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
     4
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
     5
Typical textbook proof example.
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
     6
*)
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
     7
7761
7fab9592384f improved presentation;
wenzelm
parents: 7480
diff changeset
     8
header {* Textbook-style reasoning: the Knaster-Tarski Theorem *};
6882
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
     9
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    10
theory KnasterTarski = Main:;
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    11
7761
7fab9592384f improved presentation;
wenzelm
parents: 7480
diff changeset
    12
7fab9592384f improved presentation;
wenzelm
parents: 7480
diff changeset
    13
subsection {* Prose version *};
7fab9592384f improved presentation;
wenzelm
parents: 7480
diff changeset
    14
7153
wenzelm
parents: 7133
diff changeset
    15
text {*
wenzelm
parents: 7133
diff changeset
    16
 According to the book ``Introduction to Lattices and Order'' (by
wenzelm
parents: 7133
diff changeset
    17
 B. A. Davey and H. A. Priestley, CUP 1990), the Knaster-Tarski
7761
7fab9592384f improved presentation;
wenzelm
parents: 7480
diff changeset
    18
 fixpoint theorem is as follows (pages 93--94).\footnote{We have
7fab9592384f improved presentation;
wenzelm
parents: 7480
diff changeset
    19
 dualized their argument, and tuned the notation a little bit.}
7153
wenzelm
parents: 7133
diff changeset
    20
7761
7fab9592384f improved presentation;
wenzelm
parents: 7480
diff changeset
    21
 \medskip \textbf{The Knaster-Tarski Fixpoint Theorem.}  Let $L$ be a
7153
wenzelm
parents: 7133
diff changeset
    22
 complete lattice and $f \colon L \to L$ an order-preserving map.
wenzelm
parents: 7133
diff changeset
    23
 Then $\bigwedge \{ x \in L \mid f(x) \le x \}$ is a fixpoint of $f$.
wenzelm
parents: 7133
diff changeset
    24
wenzelm
parents: 7133
diff changeset
    25
 \textbf{Proof.} Let $H = \{x \in L \mid f(x) \le x\}$ and $a =
wenzelm
parents: 7133
diff changeset
    26
 \bigwedge H$.  For all $x \in H$ we have $a \le x$, so $f(a) \le f(x)
wenzelm
parents: 7133
diff changeset
    27
 \le x$.  Thus $f(a)$ is a lower bound of $H$, whence $f(a) \le a$.
wenzelm
parents: 7133
diff changeset
    28
 We now use this inequality to prove the reverse one (!) and thereby
wenzelm
parents: 7133
diff changeset
    29
 complete the proof that $a$ is a fixpoint.  Since $f$ is
wenzelm
parents: 7133
diff changeset
    30
 order-preserving, $f(f(a)) \le f(a)$.  This says $f(a) \in H$, so $a
wenzelm
parents: 7133
diff changeset
    31
 \le f(a)$.
wenzelm
parents: 7133
diff changeset
    32
*};
6883
f898679685b7 fixed order_trans;
wenzelm
parents: 6882
diff changeset
    33
7761
7fab9592384f improved presentation;
wenzelm
parents: 7480
diff changeset
    34
7fab9592384f improved presentation;
wenzelm
parents: 7480
diff changeset
    35
subsection {* Formal version *};
7fab9592384f improved presentation;
wenzelm
parents: 7480
diff changeset
    36
6893
6e56603fb339 proper text;
wenzelm
parents: 6884
diff changeset
    37
text {*
7761
7fab9592384f improved presentation;
wenzelm
parents: 7480
diff changeset
    38
 Our proof below closely follows the original presentation.  Virtually
7fab9592384f improved presentation;
wenzelm
parents: 7480
diff changeset
    39
 all of the prose narration has been rephrased in terms of formal Isar
7153
wenzelm
parents: 7133
diff changeset
    40
 language elements.  Just as many textbook-style proofs, there is a
wenzelm
parents: 7133
diff changeset
    41
 strong bias towards forward reasoning, and little hierarchical
6897
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    42
 structure.
6893
6e56603fb339 proper text;
wenzelm
parents: 6884
diff changeset
    43
*};
6882
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    44
6939
c7c365b4f615 removed old version;
wenzelm
parents: 6898
diff changeset
    45
theorem KnasterTarski: "mono f ==> EX a::'a set. f a = a";
6882
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    46
proof;
7480
0a0e0dbe1269 replaced ?? by ?;
wenzelm
parents: 7253
diff changeset
    47
  let ?H = "{u. f u <= u}";
0a0e0dbe1269 replaced ?? by ?;
wenzelm
parents: 7253
diff changeset
    48
  let ?a = "Inter ?H";
6882
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    49
6897
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    50
  assume mono: "mono f";
7480
0a0e0dbe1269 replaced ?? by ?;
wenzelm
parents: 7253
diff changeset
    51
  show "f ?a = ?a";
7133
64c9f2364dae renamed 'same' to '-';
wenzelm
parents: 6957
diff changeset
    52
  proof -;
6897
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    53
    {{;
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    54
      fix x;
7480
0a0e0dbe1269 replaced ?? by ?;
wenzelm
parents: 7253
diff changeset
    55
      assume mem: "x : ?H";
0a0e0dbe1269 replaced ?? by ?;
wenzelm
parents: 7253
diff changeset
    56
      hence "?a <= x"; by (rule Inter_lower);
0a0e0dbe1269 replaced ?? by ?;
wenzelm
parents: 7253
diff changeset
    57
      with mono; have "f ?a <= f x"; ..;
6897
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    58
      also; from mem; have "... <= x"; ..;
7480
0a0e0dbe1269 replaced ?? by ?;
wenzelm
parents: 7253
diff changeset
    59
      finally; have "f ?a <= x"; .;
6898
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    60
    }};
7480
0a0e0dbe1269 replaced ?? by ?;
wenzelm
parents: 7253
diff changeset
    61
    hence ge: "f ?a <= ?a"; by (rule Inter_greatest);
6898
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    62
    {{;
7480
0a0e0dbe1269 replaced ?? by ?;
wenzelm
parents: 7253
diff changeset
    63
      also; presume "... <= f ?a";
0a0e0dbe1269 replaced ?? by ?;
wenzelm
parents: 7253
diff changeset
    64
      finally (order_antisym); show ?thesis; .;
6898
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    65
    }};
7480
0a0e0dbe1269 replaced ?? by ?;
wenzelm
parents: 7253
diff changeset
    66
    from mono ge; have "f (f ?a) <= f ?a"; ..;
0a0e0dbe1269 replaced ?? by ?;
wenzelm
parents: 7253
diff changeset
    67
    hence "f ?a : ?H"; ..;
0a0e0dbe1269 replaced ?? by ?;
wenzelm
parents: 7253
diff changeset
    68
    thus "?a <= f ?a"; by (rule Inter_lower);
6898
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    69
  qed;
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    70
qed;
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    71
6882
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    72
end;