src/HOL/ex/Tarski.thy
author dixon
Wed, 02 Mar 2005 10:33:10 +0100
changeset 15560 c862d556fb18
parent 14569 78b75a9eec01
child 16417 9bc16273c2d4
permissions -rw-r--r--
lucas - fixed bug with name capture variables bound outside redex could (previously)conflict with scheme variables that occur in the conditions of an equation, and which were renamed to avoid conflict with another instantiation. This has now been fixed.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
     1
(*  Title:      HOL/ex/Tarski.thy
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
     3
    Author:     Florian Kammüller, Cambridge University Computer Laboratory
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
     4
*)
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
     5
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
     6
header {* The Full Theorem of Tarski *}
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
     7
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
     8
theory Tarski = Main + FuncSet:
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
     9
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    10
text {*
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    11
  Minimal version of lattice theory plus the full theorem of Tarski:
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    12
  The fixedpoints of a complete lattice themselves form a complete
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    13
  lattice.
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    14
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    15
  Illustrates first-class theories, using the Sigma representation of
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    16
  structures.  Tidied and converted to Isar by lcp.
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    17
*}
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    18
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    19
record 'a potype =
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    20
  pset  :: "'a set"
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    21
  order :: "('a * 'a) set"
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    22
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    23
constdefs
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    24
  monotone :: "['a => 'a, 'a set, ('a *'a)set] => bool"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    25
  "monotone f A r == \<forall>x\<in>A. \<forall>y\<in>A. (x, y): r --> ((f x), (f y)) : r"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    26
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    27
  least :: "['a => bool, 'a potype] => 'a"
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
    28
  "least P po == @ x. x: pset po & P x &
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
    29
                       (\<forall>y \<in> pset po. P y --> (x,y): order po)"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    30
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    31
  greatest :: "['a => bool, 'a potype] => 'a"
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
    32
  "greatest P po == @ x. x: pset po & P x &
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
    33
                          (\<forall>y \<in> pset po. P y --> (y,x): order po)"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    34
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    35
  lub  :: "['a set, 'a potype] => 'a"
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
    36
  "lub S po == least (%x. \<forall>y\<in>S. (y,x): order po) po"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    37
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    38
  glb  :: "['a set, 'a potype] => 'a"
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
    39
  "glb S po == greatest (%x. \<forall>y\<in>S. (x,y): order po) po"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    40
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
    41
  isLub :: "['a set, 'a potype, 'a] => bool"
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
    42
  "isLub S po == %L. (L: pset po & (\<forall>y\<in>S. (y,L): order po) &
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
    43
                   (\<forall>z\<in>pset po. (\<forall>y\<in>S. (y,z): order po) --> (L,z): order po))"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    44
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
    45
  isGlb :: "['a set, 'a potype, 'a] => bool"
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
    46
  "isGlb S po == %G. (G: pset po & (\<forall>y\<in>S. (G,y): order po) &
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
    47
                 (\<forall>z \<in> pset po. (\<forall>y\<in>S. (z,y): order po) --> (z,G): order po))"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    48
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
    49
  "fix"    :: "[('a => 'a), 'a set] => 'a set"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    50
  "fix f A  == {x. x: A & f x = x}"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    51
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    52
  interval :: "[('a*'a) set,'a, 'a ] => 'a set"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    53
  "interval r a b == {x. (a,x): r & (x,b): r}"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    54
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    55
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    56
constdefs
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    57
  Bot :: "'a potype => 'a"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    58
  "Bot po == least (%x. True) po"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    59
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    60
  Top :: "'a potype => 'a"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    61
  "Top po == greatest (%x. True) po"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    62
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    63
  PartialOrder :: "('a potype) set"
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
    64
  "PartialOrder == {P. refl (pset P) (order P) & antisym (order P) &
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
    65
                       trans (order P)}"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    66
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    67
  CompleteLattice :: "('a potype) set"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    68
  "CompleteLattice == {cl. cl: PartialOrder &
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
    69
                        (\<forall>S. S <= pset cl --> (\<exists>L. isLub S cl L)) &
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
    70
                        (\<forall>S. S <= pset cl --> (\<exists>G. isGlb S cl G))}"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    71
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    72
  CLF :: "('a potype * ('a => 'a)) set"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    73
  "CLF == SIGMA cl: CompleteLattice.
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
    74
            {f. f: pset cl -> pset cl & monotone f (pset cl) (order cl)}"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    75
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    76
  induced :: "['a set, ('a * 'a) set] => ('a *'a)set"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    77
  "induced A r == {(a,b). a : A & b: A & (a,b): r}"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    78
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    79
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    80
constdefs
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    81
  sublattice :: "('a potype * 'a set)set"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    82
  "sublattice ==
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    83
      SIGMA cl: CompleteLattice.
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
    84
          {S. S <= pset cl &
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
    85
           (| pset = S, order = induced S (order cl) |): CompleteLattice }"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    86
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    87
syntax
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    88
  "@SL"  :: "['a set, 'a potype] => bool" ("_ <<= _" [51,50]50)
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    89
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    90
translations
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10797
diff changeset
    91
  "S <<= cl" == "S : sublattice `` {cl}"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    92
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    93
constdefs
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    94
  dual :: "'a potype => 'a potype"
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
    95
  "dual po == (| pset = pset po, order = converse (order po) |)"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
    96
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
    97
locale (open) PO =
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
    98
  fixes cl :: "'a potype"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
    99
    and A  :: "'a set"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   100
    and r  :: "('a * 'a) set"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   101
  assumes cl_po:  "cl : PartialOrder"
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
   102
  defines A_def: "A == pset cl"
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
   103
     and  r_def: "r == order cl"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
   104
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   105
locale (open) CL = PO +
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   106
  assumes cl_co:  "cl : CompleteLattice"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
   107
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   108
locale (open) CLF = CL +
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   109
  fixes f :: "'a => 'a"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   110
    and P :: "'a set"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   111
  assumes f_cl:  "(cl,f) : CLF" (*was the equivalent "f : CLF``{cl}"*)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   112
  defines P_def: "P == fix f A"
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
   113
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
   114
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   115
locale (open) Tarski = CLF +
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   116
  fixes Y     :: "'a set"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   117
    and intY1 :: "'a set"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   118
    and v     :: "'a"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   119
  assumes
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   120
    Y_ss: "Y <= P"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   121
  defines
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   122
    intY1_def: "intY1 == interval r (lub Y cl) (Top cl)"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   123
    and v_def: "v == glb {x. ((%x: intY1. f x) x, x): induced intY1 r &
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   124
                             x: intY1}
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   125
                      (| pset=intY1, order=induced intY1 r|)"
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   126
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   127
14569
78b75a9eec01 Added ex/Exceptions.thy
nipkow
parents: 13585
diff changeset
   128
subsection {* Partial Order *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   129
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   130
lemma (in PO) PO_imp_refl: "refl A r"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   131
apply (insert cl_po)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   132
apply (simp add: PartialOrder_def A_def r_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   133
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   134
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   135
lemma (in PO) PO_imp_sym: "antisym r"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   136
apply (insert cl_po)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   137
apply (simp add: PartialOrder_def A_def r_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   138
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   139
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   140
lemma (in PO) PO_imp_trans: "trans r"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   141
apply (insert cl_po)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   142
apply (simp add: PartialOrder_def A_def r_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   143
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   144
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   145
lemma (in PO) reflE: "[| refl A r; x \<in> A|] ==> (x, x) \<in> r"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   146
apply (insert cl_po)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   147
apply (simp add: PartialOrder_def refl_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   148
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   149
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   150
lemma (in PO) antisymE: "[| antisym r; (a, b) \<in> r; (b, a) \<in> r |] ==> a = b"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   151
apply (insert cl_po)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   152
apply (simp add: PartialOrder_def antisym_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   153
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   154
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   155
lemma (in PO) transE: "[| trans r; (a, b) \<in> r; (b, c) \<in> r|] ==> (a,c) \<in> r"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   156
apply (insert cl_po)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   157
apply (simp add: PartialOrder_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   158
apply (unfold trans_def, fast)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   159
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   160
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   161
lemma (in PO) monotoneE:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   162
     "[| monotone f A r;  x \<in> A; y \<in> A; (x, y) \<in> r |] ==> (f x, f y) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   163
by (simp add: monotone_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   164
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   165
lemma (in PO) po_subset_po:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   166
     "S <= A ==> (| pset = S, order = induced S r |) \<in> PartialOrder"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   167
apply (simp (no_asm) add: PartialOrder_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   168
apply auto
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   169
-- {* refl *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   170
apply (simp add: refl_def induced_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   171
apply (blast intro: PO_imp_refl [THEN reflE])
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   172
-- {* antisym *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   173
apply (simp add: antisym_def induced_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   174
apply (blast intro: PO_imp_sym [THEN antisymE])
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   175
-- {* trans *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   176
apply (simp add: trans_def induced_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   177
apply (blast intro: PO_imp_trans [THEN transE])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   178
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   179
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   180
lemma (in PO) indE: "[| (x, y) \<in> induced S r; S <= A |] ==> (x, y) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   181
by (simp add: add: induced_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   182
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   183
lemma (in PO) indI: "[| (x, y) \<in> r; x \<in> S; y \<in> S |] ==> (x, y) \<in> induced S r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   184
by (simp add: add: induced_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   185
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   186
lemma (in CL) CL_imp_ex_isLub: "S <= A ==> \<exists>L. isLub S cl L"
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   187
apply (insert cl_co)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   188
apply (simp add: CompleteLattice_def A_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   189
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   190
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   191
declare (in CL) cl_co [simp]
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   192
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   193
lemma isLub_lub: "(\<exists>L. isLub S cl L) = isLub S cl (lub S cl)"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   194
by (simp add: lub_def least_def isLub_def some_eq_ex [symmetric])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   195
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   196
lemma isGlb_glb: "(\<exists>G. isGlb S cl G) = isGlb S cl (glb S cl)"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   197
by (simp add: glb_def greatest_def isGlb_def some_eq_ex [symmetric])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   198
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   199
lemma isGlb_dual_isLub: "isGlb S cl = isLub S (dual cl)"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   200
by (simp add: isLub_def isGlb_def dual_def converse_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   201
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   202
lemma isLub_dual_isGlb: "isLub S cl = isGlb S (dual cl)"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   203
by (simp add: isLub_def isGlb_def dual_def converse_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   204
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   205
lemma (in PO) dualPO: "dual cl \<in> PartialOrder"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   206
apply (insert cl_po)
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   207
apply (simp add: PartialOrder_def dual_def refl_converse
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   208
                 trans_converse antisym_converse)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   209
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   210
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   211
lemma Rdual:
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   212
     "\<forall>S. (S <= A -->( \<exists>L. isLub S (| pset = A, order = r|) L))
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   213
      ==> \<forall>S. (S <= A --> (\<exists>G. isGlb S (| pset = A, order = r|) G))"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   214
apply safe
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   215
apply (rule_tac x = "lub {y. y \<in> A & (\<forall>k \<in> S. (y, k) \<in> r)}
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   216
                      (|pset = A, order = r|) " in exI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   217
apply (drule_tac x = "{y. y \<in> A & (\<forall>k \<in> S. (y,k) \<in> r) }" in spec)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   218
apply (drule mp, fast)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   219
apply (simp add: isLub_lub isGlb_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   220
apply (simp add: isLub_def, blast)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   221
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   222
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   223
lemma lub_dual_glb: "lub S cl = glb S (dual cl)"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   224
by (simp add: lub_def glb_def least_def greatest_def dual_def converse_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   225
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   226
lemma glb_dual_lub: "glb S cl = lub S (dual cl)"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   227
by (simp add: lub_def glb_def least_def greatest_def dual_def converse_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   228
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   229
lemma CL_subset_PO: "CompleteLattice <= PartialOrder"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   230
by (simp add: PartialOrder_def CompleteLattice_def, fast)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   231
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   232
lemmas CL_imp_PO = CL_subset_PO [THEN subsetD]
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   233
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   234
declare CL_imp_PO [THEN Tarski.PO_imp_refl, simp]
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   235
declare CL_imp_PO [THEN Tarski.PO_imp_sym, simp]
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   236
declare CL_imp_PO [THEN Tarski.PO_imp_trans, simp]
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   237
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   238
lemma (in CL) CO_refl: "refl A r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   239
by (rule PO_imp_refl)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   240
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   241
lemma (in CL) CO_antisym: "antisym r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   242
by (rule PO_imp_sym)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   243
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   244
lemma (in CL) CO_trans: "trans r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   245
by (rule PO_imp_trans)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   246
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   247
lemma CompleteLatticeI:
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
   248
     "[| po \<in> PartialOrder; (\<forall>S. S <= pset po --> (\<exists>L. isLub S po L));
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
   249
         (\<forall>S. S <= pset po --> (\<exists>G. isGlb S po G))|]
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   250
      ==> po \<in> CompleteLattice"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   251
apply (unfold CompleteLattice_def, blast)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   252
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   253
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   254
lemma (in CL) CL_dualCL: "dual cl \<in> CompleteLattice"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   255
apply (insert cl_co)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   256
apply (simp add: CompleteLattice_def dual_def)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   257
apply (fold dual_def)
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   258
apply (simp add: isLub_dual_isGlb [symmetric] isGlb_dual_isLub [symmetric]
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   259
                 dualPO)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   260
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   261
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
   262
lemma (in PO) dualA_iff: "pset (dual cl) = pset cl"
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   263
by (simp add: dual_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   264
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
   265
lemma (in PO) dualr_iff: "((x, y) \<in> (order(dual cl))) = ((y, x) \<in> order cl)"
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   266
by (simp add: dual_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   267
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   268
lemma (in PO) monotone_dual:
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
   269
     "monotone f (pset cl) (order cl) 
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
   270
     ==> monotone f (pset (dual cl)) (order(dual cl))"
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
   271
by (simp add: monotone_def dualA_iff dualr_iff)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   272
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   273
lemma (in PO) interval_dual:
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
   274
     "[| x \<in> A; y \<in> A|] ==> interval r x y = interval (order(dual cl)) y x"
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   275
apply (simp add: interval_def dualr_iff)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   276
apply (fold r_def, fast)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   277
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   278
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   279
lemma (in PO) interval_not_empty:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   280
     "[| trans r; interval r a b \<noteq> {} |] ==> (a, b) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   281
apply (simp add: interval_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   282
apply (unfold trans_def, blast)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   283
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   284
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   285
lemma (in PO) interval_imp_mem: "x \<in> interval r a b ==> (a, x) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   286
by (simp add: interval_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   287
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   288
lemma (in PO) left_in_interval:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   289
     "[| a \<in> A; b \<in> A; interval r a b \<noteq> {} |] ==> a \<in> interval r a b"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   290
apply (simp (no_asm_simp) add: interval_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   291
apply (simp add: PO_imp_trans interval_not_empty)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   292
apply (simp add: PO_imp_refl [THEN reflE])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   293
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   294
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   295
lemma (in PO) right_in_interval:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   296
     "[| a \<in> A; b \<in> A; interval r a b \<noteq> {} |] ==> b \<in> interval r a b"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   297
apply (simp (no_asm_simp) add: interval_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   298
apply (simp add: PO_imp_trans interval_not_empty)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   299
apply (simp add: PO_imp_refl [THEN reflE])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   300
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   301
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   302
14569
78b75a9eec01 Added ex/Exceptions.thy
nipkow
parents: 13585
diff changeset
   303
subsection {* sublattice *}
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   304
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   305
lemma (in PO) sublattice_imp_CL:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   306
     "S <<= cl  ==> (| pset = S, order = induced S r |) \<in> CompleteLattice"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   307
by (simp add: sublattice_def CompleteLattice_def A_def r_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   308
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   309
lemma (in CL) sublatticeI:
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   310
     "[| S <= A; (| pset = S, order = induced S r |) \<in> CompleteLattice |]
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   311
      ==> S <<= cl"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   312
by (simp add: sublattice_def A_def r_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   313
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   314
14569
78b75a9eec01 Added ex/Exceptions.thy
nipkow
parents: 13585
diff changeset
   315
subsection {* lub *}
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   316
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   317
lemma (in CL) lub_unique: "[| S <= A; isLub S cl x; isLub S cl L|] ==> x = L"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   318
apply (rule antisymE)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   319
apply (rule CO_antisym)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   320
apply (auto simp add: isLub_def r_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   321
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   322
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   323
lemma (in CL) lub_upper: "[|S <= A; x \<in> S|] ==> (x, lub S cl) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   324
apply (rule CL_imp_ex_isLub [THEN exE], assumption)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   325
apply (unfold lub_def least_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   326
apply (rule some_equality [THEN ssubst])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   327
  apply (simp add: isLub_def)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   328
 apply (simp add: lub_unique A_def isLub_def)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   329
apply (simp add: isLub_def r_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   330
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   331
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   332
lemma (in CL) lub_least:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   333
     "[| S <= A; L \<in> A; \<forall>x \<in> S. (x,L) \<in> r |] ==> (lub S cl, L) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   334
apply (rule CL_imp_ex_isLub [THEN exE], assumption)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   335
apply (unfold lub_def least_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   336
apply (rule_tac s=x in some_equality [THEN ssubst])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   337
  apply (simp add: isLub_def)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   338
 apply (simp add: lub_unique A_def isLub_def)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   339
apply (simp add: isLub_def r_def A_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   340
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   341
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   342
lemma (in CL) lub_in_lattice: "S <= A ==> lub S cl \<in> A"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   343
apply (rule CL_imp_ex_isLub [THEN exE], assumption)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   344
apply (unfold lub_def least_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   345
apply (subst some_equality)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   346
apply (simp add: isLub_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   347
prefer 2 apply (simp add: isLub_def A_def)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   348
apply (simp add: lub_unique A_def isLub_def)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   349
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   350
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   351
lemma (in CL) lubI:
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   352
     "[| S <= A; L \<in> A; \<forall>x \<in> S. (x,L) \<in> r;
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   353
         \<forall>z \<in> A. (\<forall>y \<in> S. (y,z) \<in> r) --> (L,z) \<in> r |] ==> L = lub S cl"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   354
apply (rule lub_unique, assumption)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   355
apply (simp add: isLub_def A_def r_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   356
apply (unfold isLub_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   357
apply (rule conjI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   358
apply (fold A_def r_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   359
apply (rule lub_in_lattice, assumption)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   360
apply (simp add: lub_upper lub_least)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   361
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   362
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   363
lemma (in CL) lubIa: "[| S <= A; isLub S cl L |] ==> L = lub S cl"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   364
by (simp add: lubI isLub_def A_def r_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   365
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   366
lemma (in CL) isLub_in_lattice: "isLub S cl L ==> L \<in> A"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   367
by (simp add: isLub_def  A_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   368
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   369
lemma (in CL) isLub_upper: "[|isLub S cl L; y \<in> S|] ==> (y, L) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   370
by (simp add: isLub_def r_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   371
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   372
lemma (in CL) isLub_least:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   373
     "[| isLub S cl L; z \<in> A; \<forall>y \<in> S. (y, z) \<in> r|] ==> (L, z) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   374
by (simp add: isLub_def A_def r_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   375
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   376
lemma (in CL) isLubI:
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   377
     "[| L \<in> A; \<forall>y \<in> S. (y, L) \<in> r;
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   378
         (\<forall>z \<in> A. (\<forall>y \<in> S. (y, z):r) --> (L, z) \<in> r)|] ==> isLub S cl L"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   379
by (simp add: isLub_def A_def r_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   380
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   381
14569
78b75a9eec01 Added ex/Exceptions.thy
nipkow
parents: 13585
diff changeset
   382
subsection {* glb *}
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   383
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   384
lemma (in CL) glb_in_lattice: "S <= A ==> glb S cl \<in> A"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   385
apply (subst glb_dual_lub)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   386
apply (simp add: A_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   387
apply (rule dualA_iff [THEN subst])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   388
apply (rule Tarski.lub_in_lattice)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   389
apply (rule dualPO)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   390
apply (rule CL_dualCL)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   391
apply (simp add: dualA_iff)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   392
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   393
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   394
lemma (in CL) glb_lower: "[|S <= A; x \<in> S|] ==> (glb S cl, x) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   395
apply (subst glb_dual_lub)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   396
apply (simp add: r_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   397
apply (rule dualr_iff [THEN subst])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   398
apply (rule Tarski.lub_upper [rule_format])
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   399
apply (rule dualPO)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   400
apply (rule CL_dualCL)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   401
apply (simp add: dualA_iff A_def, assumption)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   402
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   403
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   404
text {*
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   405
  Reduce the sublattice property by using substructural properties;
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   406
  abandoned see @{text "Tarski_4.ML"}.
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   407
*}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   408
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   409
lemma (in CLF) [simp]:
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
   410
    "f: pset cl -> pset cl & monotone f (pset cl) (order cl)"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   411
apply (insert f_cl)
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   412
apply (simp add: CLF_def)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   413
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   414
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   415
declare (in CLF) f_cl [simp]
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   416
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   417
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
   418
lemma (in CLF) f_in_funcset: "f \<in> A -> A"
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   419
by (simp add: A_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   420
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   421
lemma (in CLF) monotone_f: "monotone f A r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   422
by (simp add: A_def r_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   423
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   424
lemma (in CLF) CLF_dual: "(cl,f) \<in> CLF ==> (dual cl, f) \<in> CLF"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   425
apply (simp add: CLF_def  CL_dualCL monotone_dual)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   426
apply (simp add: dualA_iff)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   427
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   428
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   429
14569
78b75a9eec01 Added ex/Exceptions.thy
nipkow
parents: 13585
diff changeset
   430
subsection {* fixed points *}
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   431
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   432
lemma fix_subset: "fix f A <= A"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   433
by (simp add: fix_def, fast)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   434
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   435
lemma fix_imp_eq: "x \<in> fix f A ==> f x = x"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   436
by (simp add: fix_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   437
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   438
lemma fixf_subset:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   439
     "[| A <= B; x \<in> fix (%y: A. f y) A |] ==> x \<in> fix f B"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   440
apply (simp add: fix_def, auto)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   441
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   442
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   443
14569
78b75a9eec01 Added ex/Exceptions.thy
nipkow
parents: 13585
diff changeset
   444
subsection {* lemmas for Tarski, lub *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   445
lemma (in CLF) lubH_le_flubH:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   446
     "H = {x. (x, f x) \<in> r & x \<in> A} ==> (lub H cl, f (lub H cl)) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   447
apply (rule lub_least, fast)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   448
apply (rule f_in_funcset [THEN funcset_mem])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   449
apply (rule lub_in_lattice, fast)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   450
-- {* @{text "\<forall>x:H. (x, f (lub H r)) \<in> r"} *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   451
apply (rule ballI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   452
apply (rule transE)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   453
apply (rule CO_trans)
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
   454
-- {* instantiates @{text "(x, ???z) \<in> order cl to (x, f x)"}, *}
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   455
-- {* because of the def of @{text H} *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   456
apply fast
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   457
-- {* so it remains to show @{text "(f x, f (lub H cl)) \<in> r"} *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   458
apply (rule_tac f = "f" in monotoneE)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   459
apply (rule monotone_f, fast)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   460
apply (rule lub_in_lattice, fast)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   461
apply (rule lub_upper, fast)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   462
apply assumption
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   463
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   464
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   465
lemma (in CLF) flubH_le_lubH:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   466
     "[|  H = {x. (x, f x) \<in> r & x \<in> A} |] ==> (f (lub H cl), lub H cl) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   467
apply (rule lub_upper, fast)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   468
apply (rule_tac t = "H" in ssubst, assumption)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   469
apply (rule CollectI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   470
apply (rule conjI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   471
apply (rule_tac [2] f_in_funcset [THEN funcset_mem])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   472
apply (rule_tac [2] lub_in_lattice)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   473
prefer 2 apply fast
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   474
apply (rule_tac f = "f" in monotoneE)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   475
apply (rule monotone_f)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   476
  apply (blast intro: lub_in_lattice)
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   477
 apply (blast intro: lub_in_lattice f_in_funcset [THEN funcset_mem])
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   478
apply (simp add: lubH_le_flubH)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   479
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   480
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   481
lemma (in CLF) lubH_is_fixp:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   482
     "H = {x. (x, f x) \<in> r & x \<in> A} ==> lub H cl \<in> fix f A"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   483
apply (simp add: fix_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   484
apply (rule conjI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   485
apply (rule lub_in_lattice, fast)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   486
apply (rule antisymE)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   487
apply (rule CO_antisym)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   488
apply (simp add: flubH_le_lubH)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   489
apply (simp add: lubH_le_flubH)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   490
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   491
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   492
lemma (in CLF) fix_in_H:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   493
     "[| H = {x. (x, f x) \<in> r & x \<in> A};  x \<in> P |] ==> x \<in> H"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   494
by (simp add: P_def fix_imp_eq [of _ f A] reflE CO_refl
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   495
                    fix_subset [of f A, THEN subsetD])
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   496
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   497
lemma (in CLF) fixf_le_lubH:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   498
     "H = {x. (x, f x) \<in> r & x \<in> A} ==> \<forall>x \<in> fix f A. (x, lub H cl) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   499
apply (rule ballI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   500
apply (rule lub_upper, fast)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   501
apply (rule fix_in_H)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   502
apply (simp_all add: P_def)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   503
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   504
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   505
lemma (in CLF) lubH_least_fixf:
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   506
     "H = {x. (x, f x) \<in> r & x \<in> A}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   507
      ==> \<forall>L. (\<forall>y \<in> fix f A. (y,L) \<in> r) --> (lub H cl, L) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   508
apply (rule allI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   509
apply (rule impI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   510
apply (erule bspec)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   511
apply (rule lubH_is_fixp, assumption)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   512
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   513
14569
78b75a9eec01 Added ex/Exceptions.thy
nipkow
parents: 13585
diff changeset
   514
subsection {* Tarski fixpoint theorem 1, first part *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   515
lemma (in CLF) T_thm_1_lub: "lub P cl = lub {x. (x, f x) \<in> r & x \<in> A} cl"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   516
apply (rule sym)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   517
apply (simp add: P_def)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   518
apply (rule lubI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   519
apply (rule fix_subset)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   520
apply (rule lub_in_lattice, fast)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   521
apply (simp add: fixf_le_lubH)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   522
apply (simp add: lubH_least_fixf)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   523
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   524
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   525
lemma (in CLF) glbH_is_fixp: "H = {x. (f x, x) \<in> r & x \<in> A} ==> glb H cl \<in> P"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   526
  -- {* Tarski for glb *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   527
apply (simp add: glb_dual_lub P_def A_def r_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   528
apply (rule dualA_iff [THEN subst])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   529
apply (rule Tarski.lubH_is_fixp)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   530
apply (rule dualPO)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   531
apply (rule CL_dualCL)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   532
apply (rule f_cl [THEN CLF_dual])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   533
apply (simp add: dualr_iff dualA_iff)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   534
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   535
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   536
lemma (in CLF) T_thm_1_glb: "glb P cl = glb {x. (f x, x) \<in> r & x \<in> A} cl"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   537
apply (simp add: glb_dual_lub P_def A_def r_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   538
apply (rule dualA_iff [THEN subst])
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   539
apply (simp add: Tarski.T_thm_1_lub [of _ f, OF dualPO CL_dualCL]
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   540
                 dualPO CL_dualCL CLF_dual dualr_iff)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   541
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   542
14569
78b75a9eec01 Added ex/Exceptions.thy
nipkow
parents: 13585
diff changeset
   543
subsection {* interval *}
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   544
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   545
lemma (in CLF) rel_imp_elem: "(x, y) \<in> r ==> x \<in> A"
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   546
apply (insert CO_refl)
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   547
apply (simp add: refl_def, blast)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   548
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   549
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   550
lemma (in CLF) interval_subset: "[| a \<in> A; b \<in> A |] ==> interval r a b <= A"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   551
apply (simp add: interval_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   552
apply (blast intro: rel_imp_elem)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   553
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   554
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   555
lemma (in CLF) intervalI:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   556
     "[| (a, x) \<in> r; (x, b) \<in> r |] ==> x \<in> interval r a b"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   557
apply (simp add: interval_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   558
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   559
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   560
lemma (in CLF) interval_lemma1:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   561
     "[| S <= interval r a b; x \<in> S |] ==> (a, x) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   562
apply (unfold interval_def, fast)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   563
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   564
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   565
lemma (in CLF) interval_lemma2:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   566
     "[| S <= interval r a b; x \<in> S |] ==> (x, b) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   567
apply (unfold interval_def, fast)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   568
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   569
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   570
lemma (in CLF) a_less_lub:
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   571
     "[| S <= A; S \<noteq> {};
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   572
         \<forall>x \<in> S. (a,x) \<in> r; \<forall>y \<in> S. (y, L) \<in> r |] ==> (a,L) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   573
by (blast intro: transE PO_imp_trans)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   574
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   575
lemma (in CLF) glb_less_b:
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   576
     "[| S <= A; S \<noteq> {};
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   577
         \<forall>x \<in> S. (x,b) \<in> r; \<forall>y \<in> S. (G, y) \<in> r |] ==> (G,b) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   578
by (blast intro: transE PO_imp_trans)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   579
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   580
lemma (in CLF) S_intv_cl:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   581
     "[| a \<in> A; b \<in> A; S <= interval r a b |]==> S <= A"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   582
by (simp add: subset_trans [OF _ interval_subset])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   583
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   584
lemma (in CLF) L_in_interval:
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   585
     "[| a \<in> A; b \<in> A; S <= interval r a b;
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   586
         S \<noteq> {}; isLub S cl L; interval r a b \<noteq> {} |] ==> L \<in> interval r a b"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   587
apply (rule intervalI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   588
apply (rule a_less_lub)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   589
prefer 2 apply assumption
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   590
apply (simp add: S_intv_cl)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   591
apply (rule ballI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   592
apply (simp add: interval_lemma1)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   593
apply (simp add: isLub_upper)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   594
-- {* @{text "(L, b) \<in> r"} *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   595
apply (simp add: isLub_least interval_lemma2)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   596
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   597
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   598
lemma (in CLF) G_in_interval:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   599
     "[| a \<in> A; b \<in> A; interval r a b \<noteq> {}; S <= interval r a b; isGlb S cl G;
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   600
         S \<noteq> {} |] ==> G \<in> interval r a b"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   601
apply (simp add: interval_dual)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   602
apply (simp add: Tarski.L_in_interval [of _ f]
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   603
                 dualA_iff A_def dualPO CL_dualCL CLF_dual isGlb_dual_isLub)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   604
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   605
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   606
lemma (in CLF) intervalPO:
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   607
     "[| a \<in> A; b \<in> A; interval r a b \<noteq> {} |]
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   608
      ==> (| pset = interval r a b, order = induced (interval r a b) r |)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   609
          \<in> PartialOrder"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   610
apply (rule po_subset_po)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   611
apply (simp add: interval_subset)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   612
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   613
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   614
lemma (in CLF) intv_CL_lub:
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   615
 "[| a \<in> A; b \<in> A; interval r a b \<noteq> {} |]
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   616
  ==> \<forall>S. S <= interval r a b -->
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   617
          (\<exists>L. isLub S (| pset = interval r a b,
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   618
                          order = induced (interval r a b) r |)  L)"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   619
apply (intro strip)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   620
apply (frule S_intv_cl [THEN CL_imp_ex_isLub])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   621
prefer 2 apply assumption
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   622
apply assumption
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   623
apply (erule exE)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   624
-- {* define the lub for the interval as *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   625
apply (rule_tac x = "if S = {} then a else L" in exI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   626
apply (simp (no_asm_simp) add: isLub_def split del: split_if)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   627
apply (intro impI conjI)
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   628
-- {* @{text "(if S = {} then a else L) \<in> interval r a b"} *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   629
apply (simp add: CL_imp_PO L_in_interval)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   630
apply (simp add: left_in_interval)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   631
-- {* lub prop 1 *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   632
apply (case_tac "S = {}")
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   633
-- {* @{text "S = {}, y \<in> S = False => everything"} *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   634
apply fast
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   635
-- {* @{text "S \<noteq> {}"} *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   636
apply simp
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   637
-- {* @{text "\<forall>y:S. (y, L) \<in> induced (interval r a b) r"} *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   638
apply (rule ballI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   639
apply (simp add: induced_def  L_in_interval)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   640
apply (rule conjI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   641
apply (rule subsetD)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   642
apply (simp add: S_intv_cl, assumption)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   643
apply (simp add: isLub_upper)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   644
-- {* @{text "\<forall>z:interval r a b. (\<forall>y:S. (y, z) \<in> induced (interval r a b) r \<longrightarrow> (if S = {} then a else L, z) \<in> induced (interval r a b) r"} *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   645
apply (rule ballI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   646
apply (rule impI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   647
apply (case_tac "S = {}")
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   648
-- {* @{text "S = {}"} *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   649
apply simp
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   650
apply (simp add: induced_def  interval_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   651
apply (rule conjI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   652
apply (rule reflE)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   653
apply (rule CO_refl, assumption)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   654
apply (rule interval_not_empty)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   655
apply (rule CO_trans)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   656
apply (simp add: interval_def)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   657
-- {* @{text "S \<noteq> {}"} *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   658
apply simp
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   659
apply (simp add: induced_def  L_in_interval)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   660
apply (rule isLub_least, assumption)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   661
apply (rule subsetD)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   662
prefer 2 apply assumption
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   663
apply (simp add: S_intv_cl, fast)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   664
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   665
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   666
lemmas (in CLF) intv_CL_glb = intv_CL_lub [THEN Rdual]
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   667
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   668
lemma (in CLF) interval_is_sublattice:
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   669
     "[| a \<in> A; b \<in> A; interval r a b \<noteq> {} |]
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   670
        ==> interval r a b <<= cl"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   671
apply (rule sublatticeI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   672
apply (simp add: interval_subset)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   673
apply (rule CompleteLatticeI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   674
apply (simp add: intervalPO)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   675
 apply (simp add: intv_CL_lub)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   676
apply (simp add: intv_CL_glb)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   677
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   678
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   679
lemmas (in CLF) interv_is_compl_latt =
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   680
    interval_is_sublattice [THEN sublattice_imp_CL]
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   681
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   682
14569
78b75a9eec01 Added ex/Exceptions.thy
nipkow
parents: 13585
diff changeset
   683
subsection {* Top and Bottom *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   684
lemma (in CLF) Top_dual_Bot: "Top cl = Bot (dual cl)"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   685
by (simp add: Top_def Bot_def least_def greatest_def dualA_iff dualr_iff)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   686
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   687
lemma (in CLF) Bot_dual_Top: "Bot cl = Top (dual cl)"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   688
by (simp add: Top_def Bot_def least_def greatest_def dualA_iff dualr_iff)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   689
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   690
lemma (in CLF) Bot_in_lattice: "Bot cl \<in> A"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   691
apply (simp add: Bot_def least_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   692
apply (rule someI2)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   693
apply (fold A_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   694
apply (erule_tac [2] conjunct1)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   695
apply (rule conjI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   696
apply (rule glb_in_lattice)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   697
apply (rule subset_refl)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   698
apply (fold r_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   699
apply (simp add: glb_lower)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   700
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   701
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   702
lemma (in CLF) Top_in_lattice: "Top cl \<in> A"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   703
apply (simp add: Top_dual_Bot A_def)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   704
apply (rule dualA_iff [THEN subst])
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   705
apply (blast intro!: Tarski.Bot_in_lattice dualPO CL_dualCL CLF_dual f_cl)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   706
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   707
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   708
lemma (in CLF) Top_prop: "x \<in> A ==> (x, Top cl) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   709
apply (simp add: Top_def greatest_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   710
apply (rule someI2)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   711
apply (fold r_def  A_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   712
prefer 2 apply fast
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   713
apply (intro conjI ballI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   714
apply (rule_tac [2] lub_upper)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   715
apply (auto simp add: lub_in_lattice)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   716
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   717
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   718
lemma (in CLF) Bot_prop: "x \<in> A ==> (Bot cl, x) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   719
apply (simp add: Bot_dual_Top r_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   720
apply (rule dualr_iff [THEN subst])
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   721
apply (simp add: Tarski.Top_prop [of _ f]
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   722
                 dualA_iff A_def dualPO CL_dualCL CLF_dual)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   723
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   724
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   725
lemma (in CLF) Top_intv_not_empty: "x \<in> A  ==> interval r x (Top cl) \<noteq> {}"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   726
apply (rule notI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   727
apply (drule_tac a = "Top cl" in equals0D)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   728
apply (simp add: interval_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   729
apply (simp add: refl_def Top_in_lattice Top_prop)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   730
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   731
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   732
lemma (in CLF) Bot_intv_not_empty: "x \<in> A ==> interval r (Bot cl) x \<noteq> {}"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   733
apply (simp add: Bot_dual_Top)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   734
apply (subst interval_dual)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   735
prefer 2 apply assumption
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   736
apply (simp add: A_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   737
apply (rule dualA_iff [THEN subst])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   738
apply (blast intro!: Tarski.Top_in_lattice
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   739
                 f_cl dualPO CL_dualCL CLF_dual)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   740
apply (simp add: Tarski.Top_intv_not_empty [of _ f]
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   741
                 dualA_iff A_def dualPO CL_dualCL CLF_dual)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   742
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   743
14569
78b75a9eec01 Added ex/Exceptions.thy
nipkow
parents: 13585
diff changeset
   744
subsection {* fixed points form a partial order *}
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   745
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   746
lemma (in CLF) fixf_po: "(| pset = P, order = induced P r|) \<in> PartialOrder"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   747
by (simp add: P_def fix_subset po_subset_po)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   748
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   749
lemma (in Tarski) Y_subset_A: "Y <= A"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   750
apply (rule subset_trans [OF _ fix_subset])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   751
apply (rule Y_ss [simplified P_def])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   752
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   753
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   754
lemma (in Tarski) lubY_in_A: "lub Y cl \<in> A"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   755
by (simp add: Y_subset_A [THEN lub_in_lattice])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   756
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   757
lemma (in Tarski) lubY_le_flubY: "(lub Y cl, f (lub Y cl)) \<in> r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   758
apply (rule lub_least)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   759
apply (rule Y_subset_A)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   760
apply (rule f_in_funcset [THEN funcset_mem])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   761
apply (rule lubY_in_A)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   762
-- {* @{text "Y <= P ==> f x = x"} *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   763
apply (rule ballI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   764
apply (rule_tac t = "x" in fix_imp_eq [THEN subst])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   765
apply (erule Y_ss [simplified P_def, THEN subsetD])
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   766
-- {* @{text "reduce (f x, f (lub Y cl)) \<in> r to (x, lub Y cl) \<in> r"} by monotonicity *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   767
apply (rule_tac f = "f" in monotoneE)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   768
apply (rule monotone_f)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   769
apply (simp add: Y_subset_A [THEN subsetD])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   770
apply (rule lubY_in_A)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   771
apply (simp add: lub_upper Y_subset_A)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   772
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   773
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   774
lemma (in Tarski) intY1_subset: "intY1 <= A"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   775
apply (unfold intY1_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   776
apply (rule interval_subset)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   777
apply (rule lubY_in_A)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   778
apply (rule Top_in_lattice)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   779
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   780
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   781
lemmas (in Tarski) intY1_elem = intY1_subset [THEN subsetD]
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   782
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   783
lemma (in Tarski) intY1_f_closed: "x \<in> intY1 \<Longrightarrow> f x \<in> intY1"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   784
apply (simp add: intY1_def  interval_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   785
apply (rule conjI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   786
apply (rule transE)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   787
apply (rule CO_trans)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   788
apply (rule lubY_le_flubY)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   789
-- {* @{text "(f (lub Y cl), f x) \<in> r"} *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   790
apply (rule_tac f=f in monotoneE)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   791
apply (rule monotone_f)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   792
apply (rule lubY_in_A)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   793
apply (simp add: intY1_def interval_def  intY1_elem)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   794
apply (simp add: intY1_def  interval_def)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   795
-- {* @{text "(f x, Top cl) \<in> r"} *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   796
apply (rule Top_prop)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   797
apply (rule f_in_funcset [THEN funcset_mem])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   798
apply (simp add: intY1_def interval_def  intY1_elem)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   799
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   800
13585
db4005b40cc6 Converted Fun to Isar style.
paulson
parents: 13383
diff changeset
   801
lemma (in Tarski) intY1_func: "(%x: intY1. f x) \<in> intY1 -> intY1"
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   802
apply (rule restrictI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   803
apply (erule intY1_f_closed)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   804
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   805
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   806
lemma (in Tarski) intY1_mono:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   807
     "monotone (%x: intY1. f x) intY1 (induced intY1 r)"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   808
apply (auto simp add: monotone_def induced_def intY1_f_closed)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   809
apply (blast intro: intY1_elem monotone_f [THEN monotoneE])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   810
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   811
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   812
lemma (in Tarski) intY1_is_cl:
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   813
    "(| pset = intY1, order = induced intY1 r |) \<in> CompleteLattice"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   814
apply (unfold intY1_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   815
apply (rule interv_is_compl_latt)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   816
apply (rule lubY_in_A)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   817
apply (rule Top_in_lattice)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   818
apply (rule Top_intv_not_empty)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   819
apply (rule lubY_in_A)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   820
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   821
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   822
lemma (in Tarski) v_in_P: "v \<in> P"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   823
apply (unfold P_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   824
apply (rule_tac A = "intY1" in fixf_subset)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   825
apply (rule intY1_subset)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   826
apply (simp add: Tarski.glbH_is_fixp [OF _ intY1_is_cl, simplified]
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   827
                 v_def CL_imp_PO intY1_is_cl CLF_def intY1_func intY1_mono)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   828
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   829
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   830
lemma (in Tarski) z_in_interval:
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   831
     "[| z \<in> P; \<forall>y\<in>Y. (y, z) \<in> induced P r |] ==> z \<in> intY1"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   832
apply (unfold intY1_def P_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   833
apply (rule intervalI)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   834
prefer 2
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   835
 apply (erule fix_subset [THEN subsetD, THEN Top_prop])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   836
apply (rule lub_least)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   837
apply (rule Y_subset_A)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   838
apply (fast elim!: fix_subset [THEN subsetD])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   839
apply (simp add: induced_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   840
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   841
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   842
lemma (in Tarski) f'z_in_int_rel: "[| z \<in> P; \<forall>y\<in>Y. (y, z) \<in> induced P r |]
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   843
      ==> ((%x: intY1. f x) z, z) \<in> induced intY1 r"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   844
apply (simp add: induced_def  intY1_f_closed z_in_interval P_def)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   845
apply (simp add: fix_imp_eq [of _ f A] fix_subset [of f A, THEN subsetD]
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   846
                 CO_refl [THEN reflE])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   847
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   848
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   849
lemma (in Tarski) tarski_full_lemma:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   850
     "\<exists>L. isLub Y (| pset = P, order = induced P r |) L"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   851
apply (rule_tac x = "v" in exI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   852
apply (simp add: isLub_def)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   853
-- {* @{text "v \<in> P"} *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   854
apply (simp add: v_in_P)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   855
apply (rule conjI)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   856
-- {* @{text v} is lub *}
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   857
-- {* @{text "1. \<forall>y:Y. (y, v) \<in> induced P r"} *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   858
apply (rule ballI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   859
apply (simp add: induced_def subsetD v_in_P)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   860
apply (rule conjI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   861
apply (erule Y_ss [THEN subsetD])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   862
apply (rule_tac b = "lub Y cl" in transE)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   863
apply (rule CO_trans)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   864
apply (rule lub_upper)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   865
apply (rule Y_subset_A, assumption)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   866
apply (rule_tac b = "Top cl" in interval_imp_mem)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   867
apply (simp add: v_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   868
apply (fold intY1_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   869
apply (rule Tarski.glb_in_lattice [OF _ intY1_is_cl, simplified])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   870
 apply (simp add: CL_imp_PO intY1_is_cl, force)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   871
-- {* @{text v} is LEAST ub *}
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   872
apply clarify
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   873
apply (rule indI)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   874
  prefer 3 apply assumption
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   875
 prefer 2 apply (simp add: v_in_P)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   876
apply (unfold v_def)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   877
apply (rule indE)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   878
apply (rule_tac [2] intY1_subset)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   879
apply (rule Tarski.glb_lower [OF _ intY1_is_cl, simplified])
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   880
  apply (simp add: CL_imp_PO intY1_is_cl)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   881
 apply force
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   882
apply (simp add: induced_def intY1_f_closed z_in_interval)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   883
apply (simp add: P_def fix_imp_eq [of _ f A]
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   884
                 fix_subset [of f A, THEN subsetD]
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   885
                 CO_refl [THEN reflE])
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   886
done
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   887
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   888
lemma CompleteLatticeI_simp:
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   889
     "[| (| pset = A, order = r |) \<in> PartialOrder;
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   890
         \<forall>S. S <= A --> (\<exists>L. isLub S (| pset = A, order = r |)  L) |]
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   891
    ==> (| pset = A, order = r |) \<in> CompleteLattice"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   892
by (simp add: CompleteLatticeI Rdual)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   893
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   894
theorem (in CLF) Tarski_full:
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   895
     "(| pset = P, order = induced P r|) \<in> CompleteLattice"
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   896
apply (rule CompleteLatticeI_simp)
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   897
apply (rule fixf_po, clarify)
13383
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   898
apply (simp add: P_def A_def r_def)
041d78bf9403 adapted locales;
wenzelm
parents: 13115
diff changeset
   899
apply (blast intro!: Tarski.tarski_full_lemma cl_po cl_co f_cl)
13115
0a6fbdedcde2 Tidied and converted to Isar by lcp
paulson
parents: 12459
diff changeset
   900
done
7112
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
   901
b142788d79e8 back again, supposedly with correct perms;
wenzelm
parents:
diff changeset
   902
end