src/HOL/Metis_Examples/Tarski.thy
author haftmann
Thu, 19 Jun 2025 17:15:40 +0200
changeset 82734 89347c0cc6a3
parent 82248 e8c96013ea8a
permissions -rw-r--r--
treat map_filter similar to list_all, list_ex, list_ex1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41141
ad923cdd4a5d added example to exercise higher-order reasoning with Sledgehammer and Metis
blanchet
parents: 38991
diff changeset
     1
(*  Title:      HOL/Metis_Examples/Tarski.thy
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
     2
    Author:     Lawrence C. Paulson, Cambridge University Computer Laboratory
41144
509e51b7509a example tuning
blanchet
parents: 41141
diff changeset
     3
    Author:     Jasmin Blanchette, TU Muenchen
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
     4
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
     5
Metis example featuring the full theorem of Tarski.
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
     6
*)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
     7
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
     8
section \<open>Metis Example Featuring the Full Theorem of Tarski\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
     9
27368
9f90ac19e32b established Plain theory and image
haftmann
parents: 26806
diff changeset
    10
theory Tarski
68188
2af1f142f855 move FuncSet back to HOL-Library (amending 493b818e8e10)
immler
parents: 68072
diff changeset
    11
imports Main "HOL-Library.FuncSet"
27368
9f90ac19e32b established Plain theory and image
haftmann
parents: 26806
diff changeset
    12
begin
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    13
50705
0e943b33d907 use new skolemizer for reconstructing skolemization steps in Isar proofs (because the old skolemizer messes up the order of the Skolem arguments)
blanchet
parents: 47040
diff changeset
    14
declare [[metis_new_skolem]]
42103
6066a35f6678 Metis examples use the new Skolemizer to test it
blanchet
parents: 41413
diff changeset
    15
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    16
(*Many of these higher-order problems appear to be impossible using the
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    17
current linkup. They often seem to need either higher-order unification
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    18
or explicit reasoning about connectives such as conjunction. The numerous
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    19
set comprehensions are to blame.*)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    20
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    21
record 'a potype =
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    22
  pset  :: "'a set"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    23
  order :: "('a * 'a) set"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    24
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35054
diff changeset
    25
definition monotone :: "['a => 'a, 'a set, ('a *'a)set] => bool" where
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    26
  "monotone f A r == \<forall>x\<in>A. \<forall>y\<in>A. (x, y) \<in> r --> ((f x), (f y)) \<in> r"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    27
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35054
diff changeset
    28
definition least :: "['a => bool, 'a potype] => 'a" where
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    29
  "least P po \<equiv> SOME x. x \<in> pset po \<and> P x \<and>
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    30
                       (\<forall>y \<in> pset po. P y \<longrightarrow> (x,y) \<in> order po)"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    31
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35054
diff changeset
    32
definition greatest :: "['a => bool, 'a potype] => 'a" where
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    33
  "greatest P po \<equiv> SOME x. x \<in> pset po \<and> P x \<and>
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    34
                          (\<forall>y \<in> pset po. P y \<longrightarrow> (y,x) \<in> order po)"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    35
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35054
diff changeset
    36
definition lub  :: "['a set, 'a potype] => 'a" where
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    37
  "lub S po == least (\<lambda>x. \<forall>y\<in>S. (y,x) \<in> order po) po"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    38
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35054
diff changeset
    39
definition glb  :: "['a set, 'a potype] => 'a" where
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    40
  "glb S po \<equiv> greatest (\<lambda>x. \<forall>y\<in>S. (x,y) \<in> order po) po"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    41
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35054
diff changeset
    42
definition isLub :: "['a set, 'a potype, 'a] => bool" where
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    43
  "isLub S po \<equiv> \<lambda>L. (L \<in> pset po \<and> (\<forall>y\<in>S. (y,L) \<in> order po) \<and>
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    44
                   (\<forall>z\<in>pset po. (\<forall>y\<in>S. (y,z) \<in> order po) \<longrightarrow> (L,z) \<in> order po))"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    45
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35054
diff changeset
    46
definition isGlb :: "['a set, 'a potype, 'a] => bool" where
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    47
  "isGlb S po \<equiv> \<lambda>G. (G \<in> pset po \<and> (\<forall>y\<in>S. (G,y) \<in> order po) \<and>
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    48
                 (\<forall>z \<in> pset po. (\<forall>y\<in>S. (z,y) \<in> order po) \<longrightarrow> (z,G) \<in> order po))"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    49
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35054
diff changeset
    50
definition "fix"    :: "[('a => 'a), 'a set] => 'a set" where
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    51
  "fix f A  \<equiv> {x. x \<in> A \<and> f x = x}"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    52
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35054
diff changeset
    53
definition interval :: "[('a*'a) set,'a, 'a ] => 'a set" where
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    54
  "interval r a b == {x. (a,x) \<in> r & (x,b) \<in> r}"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    55
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35054
diff changeset
    56
definition Bot :: "'a potype => 'a" where
64913
3a9eb793fa10 more symbols;
wenzelm
parents: 63167
diff changeset
    57
  "Bot po == least (\<lambda>x. True) po"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    58
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35054
diff changeset
    59
definition Top :: "'a potype => 'a" where
64913
3a9eb793fa10 more symbols;
wenzelm
parents: 63167
diff changeset
    60
  "Top po == greatest (\<lambda>x. True) po"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    61
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35054
diff changeset
    62
definition PartialOrder :: "('a potype) set" where
82248
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
    63
  "PartialOrder \<equiv> {P. order P \<subseteq> pset P \<times> pset P \<and>
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
    64
    refl_on (pset P) (order P) \<and> antisym (order P) \<and> trans (order P)}"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    65
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35054
diff changeset
    66
definition CompleteLattice :: "('a potype) set" where
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    67
  "CompleteLattice == {cl. cl \<in> PartialOrder \<and>
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    68
                        (\<forall>S. S \<subseteq> pset cl \<longrightarrow> (\<exists>L. isLub S cl L)) \<and>
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    69
                        (\<forall>S. S \<subseteq> pset cl \<longrightarrow> (\<exists>G. isGlb S cl G))}"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    70
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35054
diff changeset
    71
definition induced :: "['a set, ('a * 'a) set] => ('a *'a)set" where
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    72
  "induced A r \<equiv> {(a,b). a \<in> A \<and> b \<in> A \<and> (a,b) \<in> r}"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    73
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35054
diff changeset
    74
definition sublattice :: "('a potype * 'a set)set" where
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    75
  "sublattice \<equiv>
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    76
      SIGMA cl : CompleteLattice.
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    77
          {S. S \<subseteq> pset cl \<and>
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    78
           \<lparr>pset = S, order = induced S (order cl)\<rparr> \<in> CompleteLattice}"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    79
35054
a5db9779b026 modernized some syntax translations;
wenzelm
parents: 33027
diff changeset
    80
abbreviation
80914
d97fdabd9e2b standardize mixfix annotations via "isabelle update -a -u mixfix_cartouches" --- to simplify systematic editing;
wenzelm
parents: 73346
diff changeset
    81
  sublattice_syntax :: "['a set, 'a potype] => bool" (\<open>_ <<= _\<close> [51, 50] 50)
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    82
  where "S <<= cl \<equiv> S \<in> sublattice `` {cl}"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    83
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35054
diff changeset
    84
definition dual :: "'a potype => 'a potype" where
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    85
  "dual po == (| pset = pset po, order = converse (order po) |)"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    86
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
    87
locale PO =
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    88
  fixes cl :: "'a potype"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    89
    and A  :: "'a set"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    90
    and r  :: "('a * 'a) set"
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    91
  assumes cl_po:  "cl \<in> PartialOrder"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    92
  defines A_def: "A == pset cl"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    93
     and  r_def: "r == order cl"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    94
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
    95
locale CL = PO +
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
    96
  assumes cl_co:  "cl \<in> CompleteLattice"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
    97
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
    98
definition CLF_set :: "('a potype * ('a => 'a)) set" where
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
    99
  "CLF_set = (SIGMA cl: CompleteLattice.
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
   100
            {f. f \<in> pset cl \<rightarrow> pset cl \<and> monotone f (pset cl) (order cl)})"
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   101
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   102
locale CLF = CL +
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   103
  fixes f :: "'a => 'a"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   104
    and P :: "'a set"
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
   105
  assumes f_cl:  "(cl,f) \<in> CLF_set" (*was the equivalent "f : CLF``{cl}"*)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   106
  defines P_def: "P == fix f A"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   107
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   108
locale Tarski = CLF +
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   109
  fixes Y     :: "'a set"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   110
    and intY1 :: "'a set"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   111
    and v     :: "'a"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   112
  assumes
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   113
    Y_ss: "Y \<subseteq> P"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   114
  defines
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   115
    intY1_def: "intY1 == interval r (lub Y cl) (Top cl)"
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
   116
    and v_def: "v == glb {x. ((\<lambda>x \<in> intY1. f x) x, x) \<in> induced intY1 r \<and>
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
   117
                             x \<in> intY1}
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
   118
                      \<lparr>pset=intY1, order=induced intY1 r\<rparr>"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   119
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   120
subsection \<open>Partial Order\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   121
30198
922f944f03b2 name changes
nipkow
parents: 28592
diff changeset
   122
lemma (in PO) PO_imp_refl_on: "refl_on A r"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   123
apply (insert cl_po)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   124
apply (simp add: PartialOrder_def A_def r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   125
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   126
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   127
lemma (in PO) PO_imp_sym: "antisym r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   128
apply (insert cl_po)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   129
apply (simp add: PartialOrder_def r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   130
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   131
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   132
lemma (in PO) PO_imp_trans: "trans r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   133
apply (insert cl_po)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   134
apply (simp add: PartialOrder_def r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   135
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   136
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   137
lemma (in PO) reflE: "x \<in> A ==> (x, x) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   138
apply (insert cl_po)
30198
922f944f03b2 name changes
nipkow
parents: 28592
diff changeset
   139
apply (simp add: PartialOrder_def refl_on_def A_def r_def)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   140
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   141
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   142
lemma (in PO) antisymE: "[| (a, b) \<in> r; (b, a) \<in> r |] ==> a = b"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   143
apply (insert cl_po)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   144
apply (simp add: PartialOrder_def antisym_def r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   145
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   146
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   147
lemma (in PO) transE: "[| (a, b) \<in> r; (b, c) \<in> r|] ==> (a,c) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   148
apply (insert cl_po)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   149
apply (simp add: PartialOrder_def r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   150
apply (unfold trans_def, fast)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   151
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   152
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   153
lemma (in PO) monotoneE:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   154
     "[| monotone f A r;  x \<in> A; y \<in> A; (x, y) \<in> r |] ==> (f x, f y) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   155
by (simp add: monotone_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   156
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   157
lemma (in PO) po_subset_po:
82248
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   158
  assumes "S \<subseteq> A"
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   159
  shows "(| pset = S, order = induced S r |) \<in> PartialOrder"
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   160
  unfolding PartialOrder_def mem_Collect_eq potype.simps
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   161
proof (intro conjI)
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   162
  show "induced S r \<subseteq> S \<times> S"
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   163
    by (metis (no_types, lifting) case_prodD induced_def mem_Collect_eq
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   164
        mem_Sigma_iff subrelI)
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   165
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   166
  show "refl_on S (induced S r)"
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   167
    using \<open>S \<subseteq> A\<close>
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   168
    by (simp add: induced_def reflE refl_on_def subsetD)
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   169
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   170
  show "antisym (induced S r)"
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   171
    by (metis (lifting) BNF_Def.Collect_case_prodD PO_imp_sym antisym_subset induced_def
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   172
        prod.collapse subsetI)
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   173
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   174
  show "trans (induced S r)"
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   175
    by (metis (no_types, lifting) case_prodD case_prodI induced_def local.transE mem_Collect_eq
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   176
        trans_on_def)
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   177
qed
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   178
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   179
lemma (in PO) indE: "[| (x, y) \<in> induced S r; S \<subseteq> A |] ==> (x, y) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   180
by (simp add: add: induced_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   181
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   182
lemma (in PO) indI: "[| (x, y) \<in> r; x \<in> S; y \<in> S |] ==> (x, y) \<in> induced S r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   183
by (simp add: add: induced_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   184
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   185
lemma (in CL) CL_imp_ex_isLub: "S \<subseteq> A ==> \<exists>L. isLub S cl L"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   186
apply (insert cl_co)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   187
apply (simp add: CompleteLattice_def A_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   188
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   189
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   190
declare (in CL) cl_co [simp]
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   191
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   192
lemma isLub_lub: "(\<exists>L. isLub S cl L) = isLub S cl (lub S cl)"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   193
by (simp add: lub_def least_def isLub_def some_eq_ex [symmetric])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   194
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   195
lemma isGlb_glb: "(\<exists>G. isGlb S cl G) = isGlb S cl (glb S cl)"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   196
by (simp add: glb_def greatest_def isGlb_def some_eq_ex [symmetric])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   197
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   198
lemma isGlb_dual_isLub: "isGlb S cl = isLub S (dual cl)"
46752
e9e7209eb375 more fundamental pred-to-set conversions, particularly by means of inductive_set; associated consolidation of some theorem names (c.f. NEWS)
haftmann
parents: 45970
diff changeset
   199
by (simp add: isLub_def isGlb_def dual_def converse_unfold)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   200
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   201
lemma isLub_dual_isGlb: "isLub S cl = isGlb S (dual cl)"
46752
e9e7209eb375 more fundamental pred-to-set conversions, particularly by means of inductive_set; associated consolidation of some theorem names (c.f. NEWS)
haftmann
parents: 45970
diff changeset
   202
by (simp add: isLub_def isGlb_def dual_def converse_unfold)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   203
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   204
lemma (in PO) dualPO: "dual cl \<in> PartialOrder"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   205
apply (insert cl_po)
82248
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   206
  apply (simp add: PartialOrder_def dual_def converse_Times flip: converse_subset_swap)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   207
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   208
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   209
lemma Rdual:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   210
     "\<forall>S. (S \<subseteq> A -->( \<exists>L. isLub S (| pset = A, order = r|) L))
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   211
      ==> \<forall>S. (S \<subseteq> A --> (\<exists>G. isGlb S (| pset = A, order = r|) G))"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   212
apply safe
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   213
apply (rule_tac x = "lub {y. y \<in> A & (\<forall>k \<in> S. (y, k) \<in> r)}
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   214
                      (|pset = A, order = r|) " in exI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   215
apply (drule_tac x = "{y. y \<in> A & (\<forall>k \<in> S. (y,k) \<in> r) }" in spec)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   216
apply (drule mp, fast)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   217
apply (simp add: isLub_lub isGlb_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   218
apply (simp add: isLub_def, blast)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   219
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   220
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   221
lemma lub_dual_glb: "lub S cl = glb S (dual cl)"
46752
e9e7209eb375 more fundamental pred-to-set conversions, particularly by means of inductive_set; associated consolidation of some theorem names (c.f. NEWS)
haftmann
parents: 45970
diff changeset
   222
by (simp add: lub_def glb_def least_def greatest_def dual_def converse_unfold)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   223
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   224
lemma glb_dual_lub: "glb S cl = lub S (dual cl)"
46752
e9e7209eb375 more fundamental pred-to-set conversions, particularly by means of inductive_set; associated consolidation of some theorem names (c.f. NEWS)
haftmann
parents: 45970
diff changeset
   225
by (simp add: lub_def glb_def least_def greatest_def dual_def converse_unfold)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   226
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   227
lemma CL_subset_PO: "CompleteLattice \<subseteq> PartialOrder"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   228
by (simp add: PartialOrder_def CompleteLattice_def, fast)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   229
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   230
lemmas CL_imp_PO = CL_subset_PO [THEN subsetD]
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   231
30198
922f944f03b2 name changes
nipkow
parents: 28592
diff changeset
   232
declare PO.PO_imp_refl_on  [OF PO.intro [OF CL_imp_PO], simp]
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   233
declare PO.PO_imp_sym   [OF PO.intro [OF CL_imp_PO], simp]
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   234
declare PO.PO_imp_trans [OF PO.intro [OF CL_imp_PO], simp]
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   235
30198
922f944f03b2 name changes
nipkow
parents: 28592
diff changeset
   236
lemma (in CL) CO_refl_on: "refl_on A r"
922f944f03b2 name changes
nipkow
parents: 28592
diff changeset
   237
by (rule PO_imp_refl_on)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   238
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   239
lemma (in CL) CO_antisym: "antisym r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   240
by (rule PO_imp_sym)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   241
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   242
lemma (in CL) CO_trans: "trans r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   243
by (rule PO_imp_trans)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   244
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   245
lemma CompleteLatticeI:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   246
     "[| po \<in> PartialOrder; (\<forall>S. S \<subseteq> pset po --> (\<exists>L. isLub S po L));
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   247
         (\<forall>S. S \<subseteq> pset po --> (\<exists>G. isGlb S po G))|]
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   248
      ==> po \<in> CompleteLattice"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   249
apply (unfold CompleteLattice_def, blast)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   250
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   251
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   252
lemma (in CL) CL_dualCL: "dual cl \<in> CompleteLattice"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   253
apply (insert cl_co)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   254
apply (simp add: CompleteLattice_def dual_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   255
apply (fold dual_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   256
apply (simp add: isLub_dual_isGlb [symmetric] isGlb_dual_isLub [symmetric]
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   257
                 dualPO)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   258
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   259
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   260
lemma (in PO) dualA_iff: "pset (dual cl) = pset cl"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   261
by (simp add: dual_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   262
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   263
lemma (in PO) dualr_iff: "((x, y) \<in> (order(dual cl))) = ((y, x) \<in> order cl)"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   264
by (simp add: dual_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   265
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   266
lemma (in PO) monotone_dual:
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
   267
     "monotone f (pset cl) (order cl)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   268
     ==> monotone f (pset (dual cl)) (order(dual cl))"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   269
by (simp add: monotone_def dualA_iff dualr_iff)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   270
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   271
lemma (in PO) interval_dual:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   272
     "[| x \<in> A; y \<in> A|] ==> interval r x y = interval (order(dual cl)) y x"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   273
apply (simp add: interval_def dualr_iff)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   274
apply (fold r_def, fast)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   275
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   276
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   277
lemma (in PO) interval_not_empty:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   278
     "[| trans r; interval r a b \<noteq> {} |] ==> (a, b) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   279
apply (simp add: interval_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   280
apply (unfold trans_def, blast)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   281
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   282
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   283
lemma (in PO) interval_imp_mem: "x \<in> interval r a b ==> (a, x) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   284
by (simp add: interval_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   285
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   286
lemma (in PO) left_in_interval:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   287
     "[| a \<in> A; b \<in> A; interval r a b \<noteq> {} |] ==> a \<in> interval r a b"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   288
apply (simp (no_asm_simp) add: interval_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   289
apply (simp add: PO_imp_trans interval_not_empty)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   290
apply (simp add: reflE)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   291
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   292
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   293
lemma (in PO) right_in_interval:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   294
     "[| a \<in> A; b \<in> A; interval r a b \<noteq> {} |] ==> b \<in> interval r a b"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   295
apply (simp (no_asm_simp) add: interval_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   296
apply (simp add: PO_imp_trans interval_not_empty)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   297
apply (simp add: reflE)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   298
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   299
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   300
subsection \<open>sublattice\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   301
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   302
lemma (in PO) sublattice_imp_CL:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   303
     "S <<= cl  ==> (| pset = S, order = induced S r |) \<in> CompleteLattice"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   304
by (simp add: sublattice_def CompleteLattice_def A_def r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   305
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   306
lemma (in CL) sublatticeI:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   307
     "[| S \<subseteq> A; (| pset = S, order = induced S r |) \<in> CompleteLattice |]
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   308
      ==> S <<= cl"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   309
by (simp add: sublattice_def A_def r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   310
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   311
subsection \<open>lub\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   312
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   313
lemma (in CL) lub_unique: "[| S \<subseteq> A; isLub S cl x; isLub S cl L|] ==> x = L"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   314
apply (rule antisymE)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   315
apply (auto simp add: isLub_def r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   316
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   317
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   318
lemma (in CL) lub_upper: "[|S \<subseteq> A; x \<in> S|] ==> (x, lub S cl) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   319
apply (rule CL_imp_ex_isLub [THEN exE], assumption)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   320
apply (unfold lub_def least_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   321
apply (rule some_equality [THEN ssubst])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   322
  apply (simp add: isLub_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   323
 apply (simp add: lub_unique A_def isLub_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   324
apply (simp add: isLub_def r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   325
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   326
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   327
lemma (in CL) lub_least:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   328
     "[| S \<subseteq> A; L \<in> A; \<forall>x \<in> S. (x,L) \<in> r |] ==> (lub S cl, L) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   329
apply (rule CL_imp_ex_isLub [THEN exE], assumption)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   330
apply (unfold lub_def least_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   331
apply (rule_tac s=x in some_equality [THEN ssubst])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   332
  apply (simp add: isLub_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   333
 apply (simp add: lub_unique A_def isLub_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   334
apply (simp add: isLub_def r_def A_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   335
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   336
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   337
lemma (in CL) lub_in_lattice: "S \<subseteq> A ==> lub S cl \<in> A"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   338
apply (rule CL_imp_ex_isLub [THEN exE], assumption)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   339
apply (unfold lub_def least_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   340
apply (subst some_equality)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   341
apply (simp add: isLub_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   342
prefer 2 apply (simp add: isLub_def A_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   343
apply (simp add: lub_unique A_def isLub_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   344
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   345
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   346
lemma (in CL) lubI:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   347
     "[| S \<subseteq> A; L \<in> A; \<forall>x \<in> S. (x,L) \<in> r;
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   348
         \<forall>z \<in> A. (\<forall>y \<in> S. (y,z) \<in> r) --> (L,z) \<in> r |] ==> L = lub S cl"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   349
apply (rule lub_unique, assumption)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   350
apply (simp add: isLub_def A_def r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   351
apply (unfold isLub_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   352
apply (rule conjI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   353
apply (fold A_def r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   354
apply (rule lub_in_lattice, assumption)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   355
apply (simp add: lub_upper lub_least)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   356
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   357
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   358
lemma (in CL) lubIa: "[| S \<subseteq> A; isLub S cl L |] ==> L = lub S cl"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   359
by (simp add: lubI isLub_def A_def r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   360
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   361
lemma (in CL) isLub_in_lattice: "isLub S cl L ==> L \<in> A"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   362
by (simp add: isLub_def  A_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   363
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   364
lemma (in CL) isLub_upper: "[|isLub S cl L; y \<in> S|] ==> (y, L) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   365
by (simp add: isLub_def r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   366
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   367
lemma (in CL) isLub_least:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   368
     "[| isLub S cl L; z \<in> A; \<forall>y \<in> S. (y, z) \<in> r|] ==> (L, z) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   369
by (simp add: isLub_def A_def r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   370
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   371
lemma (in CL) isLubI:
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
   372
     "\<lbrakk>L \<in> A; \<forall>y \<in> S. (y, L) \<in> r;
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
   373
         (\<forall>z \<in> A. (\<forall>y \<in> S. (y, z) \<in> r) \<longrightarrow> (L, z) \<in> r)\<rbrakk> \<Longrightarrow> isLub S cl L"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   374
by (simp add: isLub_def A_def r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   375
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   376
subsection \<open>glb\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   377
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   378
lemma (in CL) glb_in_lattice: "S \<subseteq> A ==> glb S cl \<in> A"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   379
apply (subst glb_dual_lub)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   380
apply (simp add: A_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   381
apply (rule dualA_iff [THEN subst])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   382
apply (rule CL.lub_in_lattice)
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   383
apply (rule CL.intro)
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   384
apply (rule PO.intro)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   385
apply (rule dualPO)
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   386
apply (rule CL_axioms.intro)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   387
apply (rule CL_dualCL)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   388
apply (simp add: dualA_iff)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   389
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   390
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   391
lemma (in CL) glb_lower: "[|S \<subseteq> A; x \<in> S|] ==> (glb S cl, x) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   392
apply (subst glb_dual_lub)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   393
apply (simp add: r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   394
apply (rule dualr_iff [THEN subst])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   395
apply (rule CL.lub_upper)
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   396
apply (rule CL.intro)
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   397
apply (rule PO.intro)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   398
apply (rule dualPO)
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   399
apply (rule CL_axioms.intro)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   400
apply (rule CL_dualCL)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   401
apply (simp add: dualA_iff A_def, assumption)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   402
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   403
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   404
text \<open>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   405
  Reduce the sublattice property by using substructural properties;
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   406
  abandoned see \<open>Tarski_4.ML\<close>.
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   407
\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   408
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   409
declare (in CLF) f_cl [simp]
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   410
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   411
lemma (in CLF) [simp]:
67613
ce654b0e6d69 more symbols;
wenzelm
parents: 66453
diff changeset
   412
    "f \<in> pset cl \<rightarrow> pset cl \<and> monotone f (pset cl) (order cl)"
42762
0b3c3cf28218 prove one more lemma using Sledgehammer, with some guidance, and replace clumsy old proof that relied on old extensionality behavior
blanchet
parents: 42103
diff changeset
   413
proof -
0b3c3cf28218 prove one more lemma using Sledgehammer, with some guidance, and replace clumsy old proof that relied on old extensionality behavior
blanchet
parents: 42103
diff changeset
   414
  have "\<forall>u v. (v, u) \<in> CLF_set \<longrightarrow> u \<in> {R \<in> pset v \<rightarrow> pset v. monotone R (pset v) (order v)}"
0b3c3cf28218 prove one more lemma using Sledgehammer, with some guidance, and replace clumsy old proof that relied on old extensionality behavior
blanchet
parents: 42103
diff changeset
   415
    unfolding CLF_set_def using SigmaE2 by blast
0b3c3cf28218 prove one more lemma using Sledgehammer, with some guidance, and replace clumsy old proof that relied on old extensionality behavior
blanchet
parents: 42103
diff changeset
   416
  hence F1: "\<forall>u v. (v, u) \<in> CLF_set \<longrightarrow> u \<in> pset v \<rightarrow> pset v \<and> monotone u (pset v) (order v)"
0b3c3cf28218 prove one more lemma using Sledgehammer, with some guidance, and replace clumsy old proof that relied on old extensionality behavior
blanchet
parents: 42103
diff changeset
   417
    using CollectE by blast
0b3c3cf28218 prove one more lemma using Sledgehammer, with some guidance, and replace clumsy old proof that relied on old extensionality behavior
blanchet
parents: 42103
diff changeset
   418
  hence "Tarski.monotone f (pset cl) (order cl)" by (metis f_cl)
0b3c3cf28218 prove one more lemma using Sledgehammer, with some guidance, and replace clumsy old proof that relied on old extensionality behavior
blanchet
parents: 42103
diff changeset
   419
  hence "(cl, f) \<in> CLF_set \<and> Tarski.monotone f (pset cl) (order cl)"
0b3c3cf28218 prove one more lemma using Sledgehammer, with some guidance, and replace clumsy old proof that relied on old extensionality behavior
blanchet
parents: 42103
diff changeset
   420
    by (metis f_cl)
0b3c3cf28218 prove one more lemma using Sledgehammer, with some guidance, and replace clumsy old proof that relied on old extensionality behavior
blanchet
parents: 42103
diff changeset
   421
  thus "f \<in> pset cl \<rightarrow> pset cl \<and> Tarski.monotone f (pset cl) (order cl)"
0b3c3cf28218 prove one more lemma using Sledgehammer, with some guidance, and replace clumsy old proof that relied on old extensionality behavior
blanchet
parents: 42103
diff changeset
   422
    using F1 by metis
0b3c3cf28218 prove one more lemma using Sledgehammer, with some guidance, and replace clumsy old proof that relied on old extensionality behavior
blanchet
parents: 42103
diff changeset
   423
qed
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   424
61384
9f5145281888 prefer symbols;
wenzelm
parents: 58944
diff changeset
   425
lemma (in CLF) f_in_funcset: "f \<in> A \<rightarrow> A"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   426
by (simp add: A_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   427
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   428
lemma (in CLF) monotone_f: "monotone f A r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   429
by (simp add: A_def r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   430
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   431
(*never proved, 2007-01-22*)
45705
blanchet
parents: 43197
diff changeset
   432
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   433
declare (in CLF) CLF_set_def [simp] CL_dualCL [simp] monotone_dual [simp] dualA_iff [simp]
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   434
42762
0b3c3cf28218 prove one more lemma using Sledgehammer, with some guidance, and replace clumsy old proof that relied on old extensionality behavior
blanchet
parents: 42103
diff changeset
   435
lemma (in CLF) CLF_dual: "(dual cl, f) \<in> CLF_set"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   436
apply (simp del: dualA_iff)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   437
apply (simp)
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
   438
done
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   439
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   440
declare (in CLF) CLF_set_def[simp del] CL_dualCL[simp del] monotone_dual[simp del]
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   441
          dualA_iff[simp del]
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   442
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   443
subsection \<open>fixed points\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   444
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   445
lemma fix_subset: "fix f A \<subseteq> A"
69144
f13b82281715 new theory Abstract_Topology with lots of stuff from HOL Light's metric.sml
paulson <lp15@cam.ac.uk>
parents: 68188
diff changeset
   446
by (auto simp add: fix_def)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   447
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   448
lemma fix_imp_eq: "x \<in> fix f A ==> f x = x"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   449
by (simp add: fix_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   450
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   451
lemma fixf_subset:
64913
3a9eb793fa10 more symbols;
wenzelm
parents: 63167
diff changeset
   452
     "[| A \<subseteq> B; x \<in> fix (\<lambda>y \<in> A. f y) A |] ==> x \<in> fix f B"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   453
by (simp add: fix_def, auto)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   454
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   455
subsection \<open>lemmas for Tarski, lub\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   456
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   457
(*never proved, 2007-01-22*)
45705
blanchet
parents: 43197
diff changeset
   458
blanchet
parents: 43197
diff changeset
   459
declare CL.lub_least[intro] CLF.f_in_funcset[intro] funcset_mem[intro] CL.lub_in_lattice[intro] PO.transE[intro] PO.monotoneE[intro] CLF.monotone_f[intro] CL.lub_upper[intro]
blanchet
parents: 43197
diff changeset
   460
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   461
lemma (in CLF) lubH_le_flubH:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   462
     "H = {x. (x, f x) \<in> r & x \<in> A} ==> (lub H cl, f (lub H cl)) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   463
apply (rule lub_least, fast)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   464
apply (rule f_in_funcset [THEN funcset_mem])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   465
apply (rule lub_in_lattice, fast)
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   466
\<comment> \<open>\<open>\<forall>x:H. (x, f (lub H r)) \<in> r\<close>\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   467
apply (rule ballI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   468
(*never proved, 2007-01-22*)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   469
apply (rule transE)
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   470
\<comment> \<open>instantiates \<open>(x, ?z) \<in> order cl to (x, f x)\<close>,\<close>
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   471
\<comment> \<open>because of the definition of \<open>H\<close>\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   472
apply fast
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   473
\<comment> \<open>so it remains to show \<open>(f x, f (lub H cl)) \<in> r\<close>\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   474
apply (rule_tac f = "f" in monotoneE)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   475
apply (rule monotone_f, fast)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   476
apply (rule lub_in_lattice, fast)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   477
apply (rule lub_upper, fast)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   478
apply assumption
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   479
done
45705
blanchet
parents: 43197
diff changeset
   480
blanchet
parents: 43197
diff changeset
   481
declare CL.lub_least[rule del] CLF.f_in_funcset[rule del]
blanchet
parents: 43197
diff changeset
   482
        funcset_mem[rule del] CL.lub_in_lattice[rule del]
blanchet
parents: 43197
diff changeset
   483
        PO.transE[rule del] PO.monotoneE[rule del]
blanchet
parents: 43197
diff changeset
   484
        CLF.monotone_f[rule del] CL.lub_upper[rule del]
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   485
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   486
(*never proved, 2007-01-22*)
45705
blanchet
parents: 43197
diff changeset
   487
blanchet
parents: 43197
diff changeset
   488
declare CLF.f_in_funcset[intro] funcset_mem[intro] CL.lub_in_lattice[intro]
blanchet
parents: 43197
diff changeset
   489
     PO.monotoneE[intro] CLF.monotone_f[intro] CL.lub_upper[intro]
blanchet
parents: 43197
diff changeset
   490
     CLF.lubH_le_flubH[simp]
blanchet
parents: 43197
diff changeset
   491
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   492
lemma (in CLF) flubH_le_lubH:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   493
     "[|  H = {x. (x, f x) \<in> r & x \<in> A} |] ==> (f (lub H cl), lub H cl) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   494
apply (rule lub_upper, fast)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   495
apply (rule_tac t = "H" in ssubst, assumption)
82248
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   496
  apply (rule CollectI)
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   497
  by (metis (lifting) Pi_iff f_in_funcset lubH_le_flubH lub_in_lattice
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   498
      mem_Collect_eq monotoneE monotone_f subsetI)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   499
45705
blanchet
parents: 43197
diff changeset
   500
declare CLF.f_in_funcset[rule del] funcset_mem[rule del]
blanchet
parents: 43197
diff changeset
   501
        CL.lub_in_lattice[rule del] PO.monotoneE[rule del]
blanchet
parents: 43197
diff changeset
   502
        CLF.monotone_f[rule del] CL.lub_upper[rule del]
blanchet
parents: 43197
diff changeset
   503
        CLF.lubH_le_flubH[simp del]
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   504
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   505
(*never proved, 2007-01-22*)
45705
blanchet
parents: 43197
diff changeset
   506
37622
b3f572839570 no setup is necessary anymore
blanchet
parents: 36554
diff changeset
   507
(* Single-step version fails. The conjecture clauses refer to local abstraction
b3f572839570 no setup is necessary anymore
blanchet
parents: 36554
diff changeset
   508
functions (Frees). *)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   509
lemma (in CLF) lubH_is_fixp:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   510
     "H = {x. (x, f x) \<in> r & x \<in> A} ==> lub H cl \<in> fix f A"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   511
apply (simp add: fix_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   512
apply (rule conjI)
36554
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
   513
proof -
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
   514
  assume A1: "H = {x. (x, f x) \<in> r \<and> x \<in> A}"
42762
0b3c3cf28218 prove one more lemma using Sledgehammer, with some guidance, and replace clumsy old proof that relied on old extensionality behavior
blanchet
parents: 42103
diff changeset
   515
  have F1: "\<forall>u v. v \<inter> u \<subseteq> u" by (metis Int_commute Int_lower1)
0b3c3cf28218 prove one more lemma using Sledgehammer, with some guidance, and replace clumsy old proof that relied on old extensionality behavior
blanchet
parents: 42103
diff changeset
   516
  have "{R. (R, f R) \<in> r} \<inter> {R. R \<in> A} = H" using A1 by (metis Collect_conj_eq)
0b3c3cf28218 prove one more lemma using Sledgehammer, with some guidance, and replace clumsy old proof that relied on old extensionality behavior
blanchet
parents: 42103
diff changeset
   517
  hence "H \<subseteq> {R. R \<in> A}" using F1 by metis
0b3c3cf28218 prove one more lemma using Sledgehammer, with some guidance, and replace clumsy old proof that relied on old extensionality behavior
blanchet
parents: 42103
diff changeset
   518
  hence "H \<subseteq> A" by (metis Collect_mem_eq)
0b3c3cf28218 prove one more lemma using Sledgehammer, with some guidance, and replace clumsy old proof that relied on old extensionality behavior
blanchet
parents: 42103
diff changeset
   519
  hence "lub H cl \<in> A" by (metis lub_in_lattice)
0b3c3cf28218 prove one more lemma using Sledgehammer, with some guidance, and replace clumsy old proof that relied on old extensionality behavior
blanchet
parents: 42103
diff changeset
   520
  thus "lub {x. (x, f x) \<in> r \<and> x \<in> A} cl \<in> A" using A1 by metis
36554
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
   521
next
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
   522
  assume A1: "H = {x. (x, f x) \<in> r \<and> x \<in> A}"
45970
b6d0cff57d96 adjusted to set/pred distinction by means of type constructor `set`
haftmann
parents: 45705
diff changeset
   523
  have F1: "\<forall>v. {R. R \<in> v} = v" by (metis Collect_mem_eq)
b6d0cff57d96 adjusted to set/pred distinction by means of type constructor `set`
haftmann
parents: 45705
diff changeset
   524
  have F2: "\<forall>w u. {R. R \<in> u \<and> R \<in> w} = u \<inter> w"
b6d0cff57d96 adjusted to set/pred distinction by means of type constructor `set`
haftmann
parents: 45705
diff changeset
   525
    by (metis Collect_conj_eq Collect_mem_eq)
b6d0cff57d96 adjusted to set/pred distinction by means of type constructor `set`
haftmann
parents: 45705
diff changeset
   526
  have F3: "\<forall>x v. {R. v R \<in> x} = v -` x" by (metis vimage_def)
36554
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
   527
  hence F4: "A \<inter> (\<lambda>R. (R, f R)) -` r = H" using A1 by auto
64913
3a9eb793fa10 more symbols;
wenzelm
parents: 63167
diff changeset
   528
  hence F5: "(f (lub H cl), lub H cl) \<in> r"
45970
b6d0cff57d96 adjusted to set/pred distinction by means of type constructor `set`
haftmann
parents: 45705
diff changeset
   529
    by (metis A1 flubH_le_lubH)
36554
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
   530
  have F6: "(lub H cl, f (lub H cl)) \<in> r"
45970
b6d0cff57d96 adjusted to set/pred distinction by means of type constructor `set`
haftmann
parents: 45705
diff changeset
   531
    by (metis A1 lubH_le_flubH)
36554
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
   532
  have "(lub H cl, f (lub H cl)) \<in> r \<longrightarrow> f (lub H cl) = lub H cl"
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
   533
    using F5 by (metis antisymE)
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
   534
  hence "f (lub H cl) = lub H cl" using F6 by metis
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
   535
  thus "H = {x. (x, f x) \<in> r \<and> x \<in> A}
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
   536
        \<Longrightarrow> f (lub {x. (x, f x) \<in> r \<and> x \<in> A} cl) =
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
   537
           lub {x. (x, f x) \<in> r \<and> x \<in> A} cl"
45970
b6d0cff57d96 adjusted to set/pred distinction by means of type constructor `set`
haftmann
parents: 45705
diff changeset
   538
    by metis
24827
646bdc51eb7d combinator translation
paulson
parents: 24545
diff changeset
   539
qed
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   540
25710
4cdf7de81e1b Replaced refs by config params; finer critical section in mets method
paulson
parents: 24855
diff changeset
   541
lemma (in CLF) (*lubH_is_fixp:*)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   542
     "H = {x. (x, f x) \<in> r & x \<in> A} ==> lub H cl \<in> fix f A"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   543
apply (simp add: fix_def)
82248
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   544
  apply (rule conjI)
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   545
  subgoal
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   546
    by (metis (lifting) fix_def lubH_is_fixp mem_Collect_eq)
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   547
  subgoal
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   548
    by (metis antisymE flubH_le_lubH lubH_le_flubH)
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   549
  done
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   550
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   551
lemma (in CLF) fix_in_H:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   552
     "[| H = {x. (x, f x) \<in> r & x \<in> A};  x \<in> P |] ==> x \<in> H"
30198
922f944f03b2 name changes
nipkow
parents: 28592
diff changeset
   553
by (simp add: P_def fix_imp_eq [of _ f A] reflE CO_refl_on
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   554
                    fix_subset [of f A, THEN subsetD])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   555
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   556
lemma (in CLF) fixf_le_lubH:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   557
     "H = {x. (x, f x) \<in> r & x \<in> A} ==> \<forall>x \<in> fix f A. (x, lub H cl) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   558
apply (rule ballI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   559
apply (rule lub_upper, fast)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   560
apply (rule fix_in_H)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   561
apply (simp_all add: P_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   562
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   563
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   564
lemma (in CLF) lubH_least_fixf:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   565
     "H = {x. (x, f x) \<in> r & x \<in> A}
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   566
      ==> \<forall>L. (\<forall>y \<in> fix f A. (y,L) \<in> r) --> (lub H cl, L) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   567
apply (metis P_def lubH_is_fixp)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   568
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   569
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   570
subsection \<open>Tarski fixpoint theorem 1, first part\<close>
45705
blanchet
parents: 43197
diff changeset
   571
blanchet
parents: 43197
diff changeset
   572
declare CL.lubI[intro] fix_subset[intro] CL.lub_in_lattice[intro]
blanchet
parents: 43197
diff changeset
   573
        CLF.fixf_le_lubH[simp] CLF.lubH_least_fixf[simp]
blanchet
parents: 43197
diff changeset
   574
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   575
lemma (in CLF) T_thm_1_lub: "lub P cl = lub {x. (x, f x) \<in> r & x \<in> A} cl"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   576
(*sledgehammer;*)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   577
apply (rule sym)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   578
apply (simp add: P_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   579
apply (rule lubI)
58944
cdf46ae368b4 updated some sledgehammer proofs -- much faster;
wenzelm
parents: 58943
diff changeset
   580
apply (simp add: fix_subset)
cdf46ae368b4 updated some sledgehammer proofs -- much faster;
wenzelm
parents: 58943
diff changeset
   581
using fix_subset lubH_is_fixp apply fastforce
cdf46ae368b4 updated some sledgehammer proofs -- much faster;
wenzelm
parents: 58943
diff changeset
   582
apply (simp add: fixf_le_lubH)
cdf46ae368b4 updated some sledgehammer proofs -- much faster;
wenzelm
parents: 58943
diff changeset
   583
using lubH_is_fixp apply blast
cdf46ae368b4 updated some sledgehammer proofs -- much faster;
wenzelm
parents: 58943
diff changeset
   584
done
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   585
45705
blanchet
parents: 43197
diff changeset
   586
declare CL.lubI[rule del] fix_subset[rule del] CL.lub_in_lattice[rule del]
blanchet
parents: 43197
diff changeset
   587
        CLF.fixf_le_lubH[simp del] CLF.lubH_least_fixf[simp del]
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   588
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   589
(*never proved, 2007-01-22*)
45705
blanchet
parents: 43197
diff changeset
   590
blanchet
parents: 43197
diff changeset
   591
declare glb_dual_lub[simp] PO.dualA_iff[intro] CLF.lubH_is_fixp[intro]
blanchet
parents: 43197
diff changeset
   592
        PO.dualPO[intro] CL.CL_dualCL[intro] PO.dualr_iff[simp]
blanchet
parents: 43197
diff changeset
   593
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   594
lemma (in CLF) glbH_is_fixp: "H = {x. (f x, x) \<in> r & x \<in> A} ==> glb H cl \<in> P"
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   595
  \<comment> \<open>Tarski for glb\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   596
(*sledgehammer;*)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   597
apply (simp add: glb_dual_lub P_def A_def r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   598
apply (rule dualA_iff [THEN subst])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   599
apply (rule CLF.lubH_is_fixp)
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   600
apply (rule CLF.intro)
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   601
apply (rule CL.intro)
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   602
apply (rule PO.intro)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   603
apply (rule dualPO)
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   604
apply (rule CL_axioms.intro)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   605
apply (rule CL_dualCL)
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   606
apply (rule CLF_axioms.intro)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   607
apply (rule CLF_dual)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   608
apply (simp add: dualr_iff dualA_iff)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   609
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   610
45705
blanchet
parents: 43197
diff changeset
   611
declare glb_dual_lub[simp del] PO.dualA_iff[rule del] CLF.lubH_is_fixp[rule del]
blanchet
parents: 43197
diff changeset
   612
        PO.dualPO[rule del] CL.CL_dualCL[rule del] PO.dualr_iff[simp del]
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   613
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   614
(*never proved, 2007-01-22*)
45705
blanchet
parents: 43197
diff changeset
   615
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   616
lemma (in CLF) T_thm_1_glb: "glb P cl = glb {x. (f x, x) \<in> r & x \<in> A} cl"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   617
(*sledgehammer;*)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   618
apply (simp add: glb_dual_lub P_def A_def r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   619
apply (rule dualA_iff [THEN subst])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   620
(*never proved, 2007-01-22*)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   621
(*sledgehammer;*)
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   622
apply (simp add: CLF.T_thm_1_lub [of _ f, OF CLF.intro, OF CL.intro CLF_axioms.intro, OF PO.intro CL_axioms.intro,
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   623
  OF dualPO CL_dualCL] dualPO CL_dualCL CLF_dual dualr_iff)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   624
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   625
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   626
subsection \<open>interval\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   627
45705
blanchet
parents: 43197
diff changeset
   628
declare (in CLF) CO_refl_on[simp] refl_on_def [simp]
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   629
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   630
lemma (in CLF) rel_imp_elem: "(x, y) \<in> r ==> x \<in> A"
82248
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   631
  by (metis (no_types, lifting) A_def PartialOrder_def cl_po mem_Collect_eq
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   632
      mem_Sigma_iff r_def subsetD)
45705
blanchet
parents: 43197
diff changeset
   633
blanchet
parents: 43197
diff changeset
   634
declare (in CLF) CO_refl_on[simp del]  refl_on_def [simp del]
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   635
45705
blanchet
parents: 43197
diff changeset
   636
declare (in CLF) rel_imp_elem[intro]
blanchet
parents: 43197
diff changeset
   637
declare interval_def [simp]
blanchet
parents: 43197
diff changeset
   638
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   639
lemma (in CLF) interval_subset: "[| a \<in> A; b \<in> A |] ==> interval r a b \<subseteq> A"
82248
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   640
  by (metis PO.interval_imp_mem PO.intro dualPO dualr_iff interval_dual r_def
e8c96013ea8a changed definition of refl_on
desharna
parents: 80914
diff changeset
   641
      rel_imp_elem subsetI)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   642
45705
blanchet
parents: 43197
diff changeset
   643
declare (in CLF) rel_imp_elem[rule del]
blanchet
parents: 43197
diff changeset
   644
declare interval_def [simp del]
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   645
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   646
lemma (in CLF) intervalI:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   647
     "[| (a, x) \<in> r; (x, b) \<in> r |] ==> x \<in> interval r a b"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   648
by (simp add: interval_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   649
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   650
lemma (in CLF) interval_lemma1:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   651
     "[| S \<subseteq> interval r a b; x \<in> S |] ==> (a, x) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   652
by (unfold interval_def, fast)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   653
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   654
lemma (in CLF) interval_lemma2:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   655
     "[| S \<subseteq> interval r a b; x \<in> S |] ==> (x, b) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   656
by (unfold interval_def, fast)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   657
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   658
lemma (in CLF) a_less_lub:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   659
     "[| S \<subseteq> A; S \<noteq> {};
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   660
         \<forall>x \<in> S. (a,x) \<in> r; \<forall>y \<in> S. (y, L) \<in> r |] ==> (a,L) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   661
by (blast intro: transE)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   662
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   663
lemma (in CLF) glb_less_b:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   664
     "[| S \<subseteq> A; S \<noteq> {};
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   665
         \<forall>x \<in> S. (x,b) \<in> r; \<forall>y \<in> S. (G, y) \<in> r |] ==> (G,b) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   666
by (blast intro: transE)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   667
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   668
lemma (in CLF) S_intv_cl:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   669
     "[| a \<in> A; b \<in> A; S \<subseteq> interval r a b |]==> S \<subseteq> A"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   670
by (simp add: subset_trans [OF _ interval_subset])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   671
45705
blanchet
parents: 43197
diff changeset
   672
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   673
lemma (in CLF) L_in_interval:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   674
     "[| a \<in> A; b \<in> A; S \<subseteq> interval r a b;
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
   675
         S \<noteq> {}; isLub S cl L; interval r a b \<noteq> {} |] ==> L \<in> interval r a b"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   676
(*WON'T TERMINATE
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   677
apply (metis CO_trans intervalI interval_lemma1 interval_lemma2 isLub_least isLub_upper subset_empty subset_iff trans_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   678
*)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   679
apply (rule intervalI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   680
apply (rule a_less_lub)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   681
prefer 2 apply assumption
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   682
apply (simp add: S_intv_cl)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   683
apply (rule ballI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   684
apply (simp add: interval_lemma1)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   685
apply (simp add: isLub_upper)
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   686
\<comment> \<open>\<open>(L, b) \<in> r\<close>\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   687
apply (simp add: isLub_least interval_lemma2)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   688
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   689
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   690
(*never proved, 2007-01-22*)
45705
blanchet
parents: 43197
diff changeset
   691
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   692
lemma (in CLF) G_in_interval:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   693
     "[| a \<in> A; b \<in> A; interval r a b \<noteq> {}; S \<subseteq> interval r a b; isGlb S cl G;
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   694
         S \<noteq> {} |] ==> G \<in> interval r a b"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   695
apply (simp add: interval_dual)
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   696
apply (simp add: CLF.L_in_interval [of _ f, OF CLF.intro, OF CL.intro CLF_axioms.intro, OF PO.intro CL_axioms.intro]
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   697
                 dualA_iff A_def dualPO CL_dualCL CLF_dual isGlb_dual_isLub)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   698
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   699
45705
blanchet
parents: 43197
diff changeset
   700
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   701
lemma (in CLF) intervalPO:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   702
     "[| a \<in> A; b \<in> A; interval r a b \<noteq> {} |]
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   703
      ==> (| pset = interval r a b, order = induced (interval r a b) r |)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   704
          \<in> PartialOrder"
36554
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
   705
proof -
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
   706
  assume A1: "a \<in> A"
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
   707
  assume "b \<in> A"
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
   708
  hence "\<forall>u. u \<in> A \<longrightarrow> interval r u b \<subseteq> A" by (metis interval_subset)
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
   709
  hence "interval r a b \<subseteq> A" using A1 by metis
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
   710
  hence "interval r a b \<subseteq> A" by metis
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
   711
  thus ?thesis by (metis po_subset_po)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   712
qed
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   713
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   714
lemma (in CLF) intv_CL_lub:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   715
 "[| a \<in> A; b \<in> A; interval r a b \<noteq> {} |]
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   716
  ==> \<forall>S. S \<subseteq> interval r a b -->
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   717
          (\<exists>L. isLub S (| pset = interval r a b,
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   718
                          order = induced (interval r a b) r |)  L)"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   719
apply (intro strip)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   720
apply (frule S_intv_cl [THEN CL_imp_ex_isLub])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   721
prefer 2 apply assumption
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   722
apply assumption
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   723
apply (erule exE)
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   724
\<comment> \<open>define the lub for the interval as\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   725
apply (rule_tac x = "if S = {} then a else L" in exI)
62390
842917225d56 more canonical names
nipkow
parents: 61384
diff changeset
   726
apply (simp (no_asm_simp) add: isLub_def split del: if_split)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   727
apply (intro impI conjI)
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   728
\<comment> \<open>\<open>(if S = {} then a else L) \<in> interval r a b\<close>\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   729
apply (simp add: CL_imp_PO L_in_interval)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   730
apply (simp add: left_in_interval)
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   731
\<comment> \<open>lub prop 1\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   732
apply (case_tac "S = {}")
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   733
\<comment> \<open>\<open>S = {}, y \<in> S = False => everything\<close>\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   734
apply fast
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   735
\<comment> \<open>\<open>S \<noteq> {}\<close>\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   736
apply simp
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   737
\<comment> \<open>\<open>\<forall>y:S. (y, L) \<in> induced (interval r a b) r\<close>\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   738
apply (rule ballI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   739
apply (simp add: induced_def  L_in_interval)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   740
apply (rule conjI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   741
apply (rule subsetD)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   742
apply (simp add: S_intv_cl, assumption)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   743
apply (simp add: isLub_upper)
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   744
\<comment> \<open>\<open>\<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\<close>\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   745
apply (rule ballI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   746
apply (rule impI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   747
apply (case_tac "S = {}")
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   748
\<comment> \<open>\<open>S = {}\<close>\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   749
apply simp
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   750
apply (simp add: induced_def  interval_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   751
apply (rule conjI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   752
apply (rule reflE, assumption)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   753
apply (rule interval_not_empty)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   754
apply (rule CO_trans)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   755
apply (simp add: interval_def)
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   756
\<comment> \<open>\<open>S \<noteq> {}\<close>\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   757
apply simp
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   758
apply (simp add: induced_def  L_in_interval)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   759
apply (rule isLub_least, assumption)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   760
apply (rule subsetD)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   761
prefer 2 apply assumption
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   762
apply (simp add: S_intv_cl, fast)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   763
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   764
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   765
lemmas (in CLF) intv_CL_glb = intv_CL_lub [THEN Rdual]
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   766
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   767
(*never proved, 2007-01-22*)
45705
blanchet
parents: 43197
diff changeset
   768
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   769
lemma (in CLF) interval_is_sublattice:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   770
     "[| a \<in> A; b \<in> A; interval r a b \<noteq> {} |]
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   771
        ==> interval r a b <<= cl"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   772
(*sledgehammer *)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   773
apply (rule sublatticeI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   774
apply (simp add: interval_subset)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   775
(*never proved, 2007-01-22*)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   776
(*sledgehammer *)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   777
apply (rule CompleteLatticeI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   778
apply (simp add: intervalPO)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   779
 apply (simp add: intv_CL_lub)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   780
apply (simp add: intv_CL_glb)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   781
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   782
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   783
lemmas (in CLF) interv_is_compl_latt =
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   784
    interval_is_sublattice [THEN sublattice_imp_CL]
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   785
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   786
subsection \<open>Top and Bottom\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   787
lemma (in CLF) Top_dual_Bot: "Top cl = Bot (dual cl)"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   788
by (simp add: Top_def Bot_def least_def greatest_def dualA_iff dualr_iff)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   789
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   790
lemma (in CLF) Bot_dual_Top: "Bot cl = Top (dual cl)"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   791
by (simp add: Top_def Bot_def least_def greatest_def dualA_iff dualr_iff)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   792
45705
blanchet
parents: 43197
diff changeset
   793
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   794
lemma (in CLF) Bot_in_lattice: "Bot cl \<in> A"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   795
(*sledgehammer; *)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   796
apply (simp add: Bot_def least_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   797
apply (rule_tac a="glb A cl" in someI2)
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
   798
apply (simp_all add: glb_in_lattice glb_lower
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   799
                     r_def [symmetric] A_def [symmetric])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   800
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   801
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   802
(*first proved 2007-01-25 after relaxing relevance*)
45705
blanchet
parents: 43197
diff changeset
   803
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   804
lemma (in CLF) Top_in_lattice: "Top cl \<in> A"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   805
(*sledgehammer;*)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   806
apply (simp add: Top_dual_Bot A_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   807
(*first proved 2007-01-25 after relaxing relevance*)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   808
(*sledgehammer*)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   809
apply (rule dualA_iff [THEN subst])
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   810
apply (blast intro!: CLF.Bot_in_lattice [OF CLF.intro, OF CL.intro CLF_axioms.intro, OF PO.intro CL_axioms.intro] dualPO CL_dualCL CLF_dual)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   811
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   812
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   813
lemma (in CLF) Top_prop: "x \<in> A ==> (x, Top cl) \<in> r"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   814
apply (simp add: Top_def greatest_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   815
apply (rule_tac a="lub A cl" in someI2)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   816
apply (rule someI2)
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
   817
apply (simp_all add: lub_in_lattice lub_upper
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   818
                     r_def [symmetric] A_def [symmetric])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   819
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   820
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   821
(*never proved, 2007-01-22*)
45705
blanchet
parents: 43197
diff changeset
   822
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   823
lemma (in CLF) Bot_prop: "x \<in> A ==> (Bot cl, x) \<in> r"
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
   824
(*sledgehammer*)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   825
apply (simp add: Bot_dual_Top r_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   826
apply (rule dualr_iff [THEN subst])
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   827
apply (simp add: CLF.Top_prop [of _ f, OF CLF.intro, OF CL.intro CLF_axioms.intro, OF PO.intro CL_axioms.intro]
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   828
                 dualA_iff A_def dualPO CL_dualCL CLF_dual)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   829
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   830
45705
blanchet
parents: 43197
diff changeset
   831
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
   832
lemma (in CLF) Top_intv_not_empty: "x \<in> A  ==> interval r x (Top cl) \<noteq> {}"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   833
apply (metis Top_in_lattice Top_prop empty_iff intervalI reflE)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   834
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   835
45705
blanchet
parents: 43197
diff changeset
   836
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
   837
lemma (in CLF) Bot_intv_not_empty: "x \<in> A ==> interval r (Bot cl) x \<noteq> {}"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   838
apply (metis Bot_prop ex_in_conv intervalI reflE rel_imp_elem)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   839
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   840
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   841
subsection \<open>fixed points form a partial order\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   842
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   843
lemma (in CLF) fixf_po: "(| pset = P, order = induced P r|) \<in> PartialOrder"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   844
by (simp add: P_def fix_subset po_subset_po)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   845
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   846
(*first proved 2007-01-25 after relaxing relevance*)
45705
blanchet
parents: 43197
diff changeset
   847
blanchet
parents: 43197
diff changeset
   848
declare (in Tarski) P_def[simp] Y_ss [simp]
blanchet
parents: 43197
diff changeset
   849
declare fix_subset [intro] subset_trans [intro]
blanchet
parents: 43197
diff changeset
   850
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   851
lemma (in Tarski) Y_subset_A: "Y \<subseteq> A"
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
   852
(*sledgehammer*)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   853
apply (rule subset_trans [OF _ fix_subset])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   854
apply (rule Y_ss [simplified P_def])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   855
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   856
45705
blanchet
parents: 43197
diff changeset
   857
declare (in Tarski) P_def[simp del] Y_ss [simp del]
blanchet
parents: 43197
diff changeset
   858
declare fix_subset [rule del] subset_trans [rule del]
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   859
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   860
lemma (in Tarski) lubY_in_A: "lub Y cl \<in> A"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   861
  by (rule Y_subset_A [THEN lub_in_lattice])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   862
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   863
(*never proved, 2007-01-22*)
45705
blanchet
parents: 43197
diff changeset
   864
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   865
lemma (in Tarski) lubY_le_flubY: "(lub Y cl, f (lub Y cl)) \<in> r"
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
   866
(*sledgehammer*)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   867
apply (rule lub_least)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   868
apply (rule Y_subset_A)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   869
apply (rule f_in_funcset [THEN funcset_mem])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   870
apply (rule lubY_in_A)
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   871
\<comment> \<open>\<open>Y \<subseteq> P ==> f x = x\<close>\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   872
apply (rule ballI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   873
(*sledgehammer *)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   874
apply (rule_tac t = "x" in fix_imp_eq [THEN subst])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   875
apply (erule Y_ss [simplified P_def, THEN subsetD])
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   876
\<comment> \<open>\<open>reduce (f x, f (lub Y cl)) \<in> r to (x, lub Y cl) \<in> r\<close> by monotonicity\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   877
(*sledgehammer*)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   878
apply (rule_tac f = "f" in monotoneE)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   879
apply (rule monotone_f)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   880
apply (simp add: Y_subset_A [THEN subsetD])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   881
apply (rule lubY_in_A)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   882
apply (simp add: lub_upper Y_subset_A)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   883
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   884
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   885
(*first proved 2007-01-25 after relaxing relevance*)
45705
blanchet
parents: 43197
diff changeset
   886
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   887
lemma (in Tarski) intY1_subset: "intY1 \<subseteq> A"
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
   888
(*sledgehammer*)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   889
apply (unfold intY1_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   890
apply (rule interval_subset)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   891
apply (rule lubY_in_A)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   892
apply (rule Top_in_lattice)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   893
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   894
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   895
lemmas (in Tarski) intY1_elem = intY1_subset [THEN subsetD]
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   896
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   897
(*never proved, 2007-01-22*)
45705
blanchet
parents: 43197
diff changeset
   898
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   899
lemma (in Tarski) intY1_f_closed: "x \<in> intY1 \<Longrightarrow> f x \<in> intY1"
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
   900
(*sledgehammer*)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   901
apply (simp add: intY1_def  interval_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   902
apply (rule conjI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   903
apply (rule transE)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   904
apply (rule lubY_le_flubY)
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   905
\<comment> \<open>\<open>(f (lub Y cl), f x) \<in> r\<close>\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   906
(*sledgehammer [has been proved before now...]*)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   907
apply (rule_tac f=f in monotoneE)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   908
apply (rule monotone_f)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   909
apply (rule lubY_in_A)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   910
apply (simp add: intY1_def interval_def  intY1_elem)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   911
apply (simp add: intY1_def  interval_def)
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   912
\<comment> \<open>\<open>(f x, Top cl) \<in> r\<close>\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   913
apply (rule Top_prop)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   914
apply (rule f_in_funcset [THEN funcset_mem])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   915
apply (simp add: intY1_def interval_def  intY1_elem)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   916
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   917
45705
blanchet
parents: 43197
diff changeset
   918
64913
3a9eb793fa10 more symbols;
wenzelm
parents: 63167
diff changeset
   919
lemma (in Tarski) intY1_func: "(\<lambda>x \<in> intY1. f x) \<in> intY1 \<rightarrow> intY1"
73346
00e0f7724c06 tiny bit of lemma hacking
paulson <lp15@cam.ac.uk>
parents: 69144
diff changeset
   920
apply (rule restrictI)
00e0f7724c06 tiny bit of lemma hacking
paulson <lp15@cam.ac.uk>
parents: 69144
diff changeset
   921
apply (metis intY1_f_closed)
27368
9f90ac19e32b established Plain theory and image
haftmann
parents: 26806
diff changeset
   922
done
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   923
45705
blanchet
parents: 43197
diff changeset
   924
24855
161eb8381b49 metis method: used theorems
paulson
parents: 24827
diff changeset
   925
lemma (in Tarski) intY1_mono:
64913
3a9eb793fa10 more symbols;
wenzelm
parents: 63167
diff changeset
   926
     "monotone (\<lambda>x \<in> intY1. f x) intY1 (induced intY1 r)"
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   927
(*sledgehammer *)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   928
apply (auto simp add: monotone_def induced_def intY1_f_closed)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   929
apply (blast intro: intY1_elem monotone_f [THEN monotoneE])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   930
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   931
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   932
(*proof requires relaxing relevance: 2007-01-25*)
45705
blanchet
parents: 43197
diff changeset
   933
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   934
lemma (in Tarski) intY1_is_cl:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   935
    "(| pset = intY1, order = induced intY1 r |) \<in> CompleteLattice"
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
   936
(*sledgehammer*)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   937
apply (unfold intY1_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   938
apply (rule interv_is_compl_latt)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   939
apply (rule lubY_in_A)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   940
apply (rule Top_in_lattice)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   941
apply (rule Top_intv_not_empty)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   942
apply (rule lubY_in_A)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   943
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   944
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   945
(*never proved, 2007-01-22*)
45705
blanchet
parents: 43197
diff changeset
   946
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   947
lemma (in Tarski) v_in_P: "v \<in> P"
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
   948
(*sledgehammer*)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   949
apply (unfold P_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   950
apply (rule_tac A = "intY1" in fixf_subset)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   951
apply (rule intY1_subset)
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   952
apply (simp add: CLF.glbH_is_fixp [OF CLF.intro, OF CL.intro CLF_axioms.intro, OF PO.intro CL_axioms.intro, OF _ intY1_is_cl, simplified]
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   953
                 v_def CL_imp_PO intY1_is_cl CLF_set_def intY1_func intY1_mono)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   954
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   955
45705
blanchet
parents: 43197
diff changeset
   956
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   957
lemma (in Tarski) z_in_interval:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   958
     "[| z \<in> P; \<forall>y\<in>Y. (y, z) \<in> induced P r |] ==> z \<in> intY1"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   959
(*sledgehammer *)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   960
apply (unfold intY1_def P_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   961
apply (rule intervalI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   962
prefer 2
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   963
 apply (erule fix_subset [THEN subsetD, THEN Top_prop])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   964
apply (rule lub_least)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   965
apply (rule Y_subset_A)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   966
apply (fast elim!: fix_subset [THEN subsetD])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   967
apply (simp add: induced_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   968
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   969
45705
blanchet
parents: 43197
diff changeset
   970
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   971
lemma (in Tarski) f'z_in_int_rel: "[| z \<in> P; \<forall>y\<in>Y. (y, z) \<in> induced P r |]
64913
3a9eb793fa10 more symbols;
wenzelm
parents: 63167
diff changeset
   972
      ==> ((\<lambda>x \<in> intY1. f x) z, z) \<in> induced intY1 r"
58943
a1df119fad45 updated sledgehammer proof after breakdown of metis (exception Type.TUNIFY);
wenzelm
parents: 58889
diff changeset
   973
using P_def fix_imp_eq indI intY1_elem reflE z_in_interval by fastforce
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   974
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   975
(*never proved, 2007-01-22*)
45705
blanchet
parents: 43197
diff changeset
   976
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   977
lemma (in Tarski) tarski_full_lemma:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   978
     "\<exists>L. isLub Y (| pset = P, order = induced P r |) L"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   979
apply (rule_tac x = "v" in exI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   980
apply (simp add: isLub_def)
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   981
\<comment> \<open>\<open>v \<in> P\<close>\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   982
apply (simp add: v_in_P)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   983
apply (rule conjI)
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
   984
(*sledgehammer*)
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   985
\<comment> \<open>\<open>v\<close> is lub\<close>
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   986
\<comment> \<open>\<open>1. \<forall>y:Y. (y, v) \<in> induced P r\<close>\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   987
apply (rule ballI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   988
apply (simp add: induced_def subsetD v_in_P)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   989
apply (rule conjI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   990
apply (erule Y_ss [THEN subsetD])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   991
apply (rule_tac b = "lub Y cl" in transE)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   992
apply (rule lub_upper)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   993
apply (rule Y_subset_A, assumption)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   994
apply (rule_tac b = "Top cl" in interval_imp_mem)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   995
apply (simp add: v_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   996
apply (fold intY1_def)
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
   997
apply (rule CL.glb_in_lattice [OF CL.intro, OF PO.intro CL_axioms.intro, OF _ intY1_is_cl, simplified])
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
   998
 apply (simp add: CL_imp_PO intY1_is_cl, force)
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   999
\<comment> \<open>\<open>v\<close> is LEAST ub\<close>
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1000
apply clarify
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1001
apply (rule indI)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1002
  prefer 3 apply assumption
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1003
 prefer 2 apply (simp add: v_in_P)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1004
apply (unfold v_def)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1005
(*never proved, 2007-01-22*)
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
  1006
(*sledgehammer*)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1007
apply (rule indE)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1008
apply (rule_tac [2] intY1_subset)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1009
(*never proved, 2007-01-22*)
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
  1010
(*sledgehammer*)
27681
8cedebf55539 dropped locale (open)
haftmann
parents: 27368
diff changeset
  1011
apply (rule CL.glb_lower [OF CL.intro, OF PO.intro CL_axioms.intro, OF _ intY1_is_cl, simplified])
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1012
  apply (simp add: CL_imp_PO intY1_is_cl)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1013
 apply force
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1014
apply (simp add: induced_def intY1_f_closed z_in_interval)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1015
apply (simp add: P_def fix_imp_eq [of _ f A] reflE
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1016
                 fix_subset [of f A, THEN subsetD])
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1017
done
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1018
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1019
lemma CompleteLatticeI_simp:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1020
     "[| (| pset = A, order = r |) \<in> PartialOrder;
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1021
         \<forall>S. S \<subseteq> A --> (\<exists>L. isLub S (| pset = A, order = r |)  L) |]
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1022
    ==> (| pset = A, order = r |) \<in> CompleteLattice"
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1023
by (simp add: CompleteLatticeI Rdual)
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1024
45705
blanchet
parents: 43197
diff changeset
  1025
(*never proved, 2007-01-22*)
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1026
45705
blanchet
parents: 43197
diff changeset
  1027
declare (in CLF) fixf_po[intro] P_def [simp] A_def [simp] r_def [simp]
blanchet
parents: 43197
diff changeset
  1028
             Tarski.tarski_full_lemma [intro] cl_po [intro] cl_co [intro]
blanchet
parents: 43197
diff changeset
  1029
             CompleteLatticeI_simp [intro]
blanchet
parents: 43197
diff changeset
  1030
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1031
theorem (in CLF) Tarski_full:
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1032
     "(| pset = P, order = induced P r|) \<in> CompleteLattice"
73346
00e0f7724c06 tiny bit of lemma hacking
paulson <lp15@cam.ac.uk>
parents: 69144
diff changeset
  1033
  using A_def CLF_axioms P_def Tarski.intro Tarski_axioms.intro fixf_po r_def by blast
43197
c71657bbdbc0 tuned Metis examples
blanchet
parents: 42762
diff changeset
  1034
(*sledgehammer*)
36554
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
  1035
2673979cb54d more neg_clausify proofs that get replaced by direct proofs
blanchet
parents: 35416
diff changeset
  1036
declare (in CLF) fixf_po [rule del] P_def [simp del] A_def [simp del] r_def [simp del]
23449
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1037
         Tarski.tarski_full_lemma [rule del] cl_po [rule del] cl_co [rule del]
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1038
         CompleteLatticeI_simp [rule del]
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1039
dd874e6a3282 integration of Metis prover
paulson
parents:
diff changeset
  1040
end