src/HOL/Isar_examples/KnasterTarski.thy
author nipkow
Mon, 07 Feb 2005 08:02:14 +0100
changeset 15502 9d012c7fadab
parent 10007 64bf7da1994a
child 16417 9bc16273c2d4
permissions -rw-r--r--
fixed latex problems
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
10007
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
     8
header {* Textbook-style reasoning: the Knaster-Tarski Theorem *}
6882
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
     9
10007
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    10
theory KnasterTarski = Main:
6882
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    11
7761
7fab9592384f improved presentation;
wenzelm
parents: 7480
diff changeset
    12
10007
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    13
subsection {* Prose version *}
7761
7fab9592384f improved presentation;
wenzelm
parents: 7480
diff changeset
    14
7153
wenzelm
parents: 7133
diff changeset
    15
text {*
7874
180364256231 improved presentation;
wenzelm
parents: 7860
diff changeset
    16
 According to the textbook \cite[pages 93--94]{davey-priestley}, the
180364256231 improved presentation;
wenzelm
parents: 7860
diff changeset
    17
 Knaster-Tarski fixpoint theorem is as follows.\footnote{We have
180364256231 improved presentation;
wenzelm
parents: 7860
diff changeset
    18
 dualized the argument, and tuned the notation a little bit.}
7153
wenzelm
parents: 7133
diff changeset
    19
7761
7fab9592384f improved presentation;
wenzelm
parents: 7480
diff changeset
    20
 \medskip \textbf{The Knaster-Tarski Fixpoint Theorem.}  Let $L$ be a
7153
wenzelm
parents: 7133
diff changeset
    21
 complete lattice and $f \colon L \to L$ an order-preserving map.
wenzelm
parents: 7133
diff changeset
    22
 Then $\bigwedge \{ x \in L \mid f(x) \le x \}$ is a fixpoint of $f$.
wenzelm
parents: 7133
diff changeset
    23
wenzelm
parents: 7133
diff changeset
    24
 \textbf{Proof.} Let $H = \{x \in L \mid f(x) \le x\}$ and $a =
wenzelm
parents: 7133
diff changeset
    25
 \bigwedge H$.  For all $x \in H$ we have $a \le x$, so $f(a) \le f(x)
wenzelm
parents: 7133
diff changeset
    26
 \le x$.  Thus $f(a)$ is a lower bound of $H$, whence $f(a) \le a$.
wenzelm
parents: 7133
diff changeset
    27
 We now use this inequality to prove the reverse one (!) and thereby
wenzelm
parents: 7133
diff changeset
    28
 complete the proof that $a$ is a fixpoint.  Since $f$ is
wenzelm
parents: 7133
diff changeset
    29
 order-preserving, $f(f(a)) \le f(a)$.  This says $f(a) \in H$, so $a
wenzelm
parents: 7133
diff changeset
    30
 \le f(a)$.
10007
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    31
*}
6883
f898679685b7 fixed order_trans;
wenzelm
parents: 6882
diff changeset
    32
7761
7fab9592384f improved presentation;
wenzelm
parents: 7480
diff changeset
    33
10007
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    34
subsection {* Formal versions *}
7761
7fab9592384f improved presentation;
wenzelm
parents: 7480
diff changeset
    35
6893
6e56603fb339 proper text;
wenzelm
parents: 6884
diff changeset
    36
text {*
7818
1acfb8cc3720 added structured version of the proof;
wenzelm
parents: 7761
diff changeset
    37
 The Isar proof below closely follows the original presentation.
1acfb8cc3720 added structured version of the proof;
wenzelm
parents: 7761
diff changeset
    38
 Virtually all of the prose narration has been rephrased in terms of
1acfb8cc3720 added structured version of the proof;
wenzelm
parents: 7761
diff changeset
    39
 formal Isar language elements.  Just as many textbook-style proofs,
7982
d534b897ce39 improved presentation;
wenzelm
parents: 7874
diff changeset
    40
 there is a strong bias towards forward proof, and several bends
d534b897ce39 improved presentation;
wenzelm
parents: 7874
diff changeset
    41
 in the course of reasoning.
10007
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    42
*}
6882
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    43
10007
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    44
theorem KnasterTarski: "mono f ==> EX a::'a set. f a = a"
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    45
proof
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    46
  let ?H = "{u. f u <= u}"
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    47
  let ?a = "Inter ?H"
6882
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    48
10007
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    49
  assume mono: "mono f"
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    50
  show "f ?a = ?a"
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    51
  proof -
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    52
    {
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    53
      fix x
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    54
      assume H: "x : ?H"
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    55
      hence "?a <= x" by (rule Inter_lower)
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    56
      with mono have "f ?a <= f x" ..
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    57
      also from H have "... <= x" ..
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    58
      finally have "f ?a <= x" .
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    59
    }
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    60
    hence ge: "f ?a <= ?a" by (rule Inter_greatest)
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    61
    {
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    62
      also presume "... <= f ?a"
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    63
      finally (order_antisym) show ?thesis .
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    64
    }
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    65
    from mono ge have "f (f ?a) <= f ?a" ..
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    66
    hence "f ?a : ?H" ..
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    67
    thus "?a <= f ?a" by (rule Inter_lower)
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    68
  qed
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    69
qed
6898
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    70
7818
1acfb8cc3720 added structured version of the proof;
wenzelm
parents: 7761
diff changeset
    71
text {*
1acfb8cc3720 added structured version of the proof;
wenzelm
parents: 7761
diff changeset
    72
 Above we have used several advanced Isar language elements, such as
1acfb8cc3720 added structured version of the proof;
wenzelm
parents: 7761
diff changeset
    73
 explicit block structure and weak assumptions.  Thus we have mimicked
1acfb8cc3720 added structured version of the proof;
wenzelm
parents: 7761
diff changeset
    74
 the particular way of reasoning of the original text.
1acfb8cc3720 added structured version of the proof;
wenzelm
parents: 7761
diff changeset
    75
7982
d534b897ce39 improved presentation;
wenzelm
parents: 7874
diff changeset
    76
 In the subsequent version the order of reasoning is changed to
d534b897ce39 improved presentation;
wenzelm
parents: 7874
diff changeset
    77
 achieve structured top-down decomposition of the problem at the outer
d534b897ce39 improved presentation;
wenzelm
parents: 7874
diff changeset
    78
 level, while only the inner steps of reasoning are done in a forward
d534b897ce39 improved presentation;
wenzelm
parents: 7874
diff changeset
    79
 manner.  We are certainly more at ease here, requiring only the most
d534b897ce39 improved presentation;
wenzelm
parents: 7874
diff changeset
    80
 basic features of the Isar language.
10007
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    81
*}
7818
1acfb8cc3720 added structured version of the proof;
wenzelm
parents: 7761
diff changeset
    82
10007
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    83
theorem KnasterTarski': "mono f ==> EX a::'a set. f a = a"
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    84
proof
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    85
  let ?H = "{u. f u <= u}"
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    86
  let ?a = "Inter ?H"
7818
1acfb8cc3720 added structured version of the proof;
wenzelm
parents: 7761
diff changeset
    87
10007
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    88
  assume mono: "mono f"
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    89
  show "f ?a = ?a"
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    90
  proof (rule order_antisym)
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    91
    show ge: "f ?a <= ?a"
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    92
    proof (rule Inter_greatest)
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    93
      fix x
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    94
      assume H: "x : ?H"
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    95
      hence "?a <= x" by (rule Inter_lower)
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    96
      with mono have "f ?a <= f x" ..
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    97
      also from H have "... <= x" ..
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    98
      finally show "f ?a <= x" .
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
    99
    qed
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
   100
    show "?a <= f ?a"
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
   101
    proof (rule Inter_lower)
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
   102
      from mono ge have "f (f ?a) <= f ?a" ..
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
   103
      thus "f ?a : ?H" ..
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
   104
    qed
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
   105
  qed
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
   106
qed
7818
1acfb8cc3720 added structured version of the proof;
wenzelm
parents: 7761
diff changeset
   107
10007
64bf7da1994a isar-strip-terminators;
wenzelm
parents: 8902
diff changeset
   108
end