src/HOL/Isar_examples/KnasterTarski.thy
author wenzelm
Mon, 05 Jul 1999 09:52:25 +0200
changeset 6898 2650bd68c0ba
parent 6897 cc6e50f36da8
child 6939 c7c365b4f615
permissions -rw-r--r--
variant version;
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
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
     8
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
     9
theory KnasterTarski = Main:;
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    10
6883
f898679685b7 fixed order_trans;
wenzelm
parents: 6882
diff changeset
    11
f898679685b7 fixed order_trans;
wenzelm
parents: 6882
diff changeset
    12
theorems [dest] = monoD;  (* FIXME [dest!!] *)
6882
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    13
6893
6e56603fb339 proper text;
wenzelm
parents: 6884
diff changeset
    14
text {*
6898
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    15
 The proofs of Knaster-Tarski below closely follows the presentation in
6883
f898679685b7 fixed order_trans;
wenzelm
parents: 6882
diff changeset
    16
 'Introduction to Lattices' and Order by Davey/Priestley, pages
6884
wenzelm
parents: 6883
diff changeset
    17
 93--94.  All of their narration has been rephrased in terms of formal
6897
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    18
 Isar language elements.  Just as many textbook-style proofs, there is
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    19
 a strong bias towards forward reasoning, and little hierarchical
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    20
 structure.
6893
6e56603fb339 proper text;
wenzelm
parents: 6884
diff changeset
    21
*};
6882
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    22
6898
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    23
theorem KnasterTarski1: "mono f ==> EX a::'a set. f a = a";
6882
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    24
proof;
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    25
  let ??H = "{u. f u <= u}";
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    26
  let ??a = "Inter ??H";
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    27
6897
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    28
  assume mono: "mono f";
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    29
  show "f ??a = ??a";
6882
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    30
  proof same;
6897
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    31
    {{;
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    32
      fix x;
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    33
      assume mem: "x : ??H";
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    34
      hence "??a <= x"; by (rule Inter_lower);
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    35
      with mono; have "f ??a <= f x"; ..;
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    36
      also; from mem; have "... <= x"; ..;
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    37
      finally (order_trans); have "f ??a <= x"; .;
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    38
    }};
6882
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    39
    hence ge: "f ??a <= ??a"; by (rule Inter_greatest);
6897
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    40
    thus ??thesis;
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    41
    proof (rule order_antisym);
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    42
      from mono ge; have "f (f ??a) <= f ??a"; ..;
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    43
      hence "f ??a : ??H"; ..;
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    44
      thus "??a <= f ??a"; by (rule Inter_lower);
cc6e50f36da8 fixed scope of x:??H;
wenzelm
parents: 6893
diff changeset
    45
    qed;
6882
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    46
  qed;
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    47
qed;
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    48
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    49
6898
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    50
theorem KnasterTarski2: "mono f ==> EX a::'a set. f a = a";
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    51
proof;
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    52
  let ??H = "{u. f u <= u}";
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    53
  let ??a = "Inter ??H";
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    54
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    55
  assume mono: "mono f";
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    56
  show "f ??a = ??a";
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    57
  proof same;
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    58
    {{;
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    59
      fix x;
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    60
      assume mem: "x : ??H";
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    61
      hence "??a <= x"; by (rule Inter_lower);
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    62
      with mono; have "f ??a <= f x"; ..;
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    63
      also; from mem; have "... <= x"; ..;
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    64
      finally (order_trans); have "f ??a <= x"; .;
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    65
    }};
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    66
    hence ge: "f ??a <= ??a"; by (rule Inter_greatest);
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    67
    {{;
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    68
      also; presume "... <= f ??a";
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    69
      finally (order_antisym); show ??thesis; .;
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    70
    }};
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    71
    from mono ge; have "f (f ??a) <= f ??a"; ..;
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    72
    hence "f ??a : ??H"; ..;
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    73
    thus "??a <= f ??a"; by (rule Inter_lower);
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    74
  qed;
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    75
qed;
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    76
2650bd68c0ba variant version;
wenzelm
parents: 6897
diff changeset
    77
6882
fe4e3d26fa8f added KnasterTarski.thy;
wenzelm
parents:
diff changeset
    78
end;