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