src/HOLCF/Holcfb.ML
author clasohm
Tue, 30 Jan 1996 13:42:57 +0100
changeset 1461 6bcb44e4d6e5
parent 892 d0dc8d057929
child 1675 36ba4da350c3
permissions -rw-r--r--
expanded tabs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
     1
(*  Title:      HOLCF/holcfb.ML
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     2
    ID:         $Id$
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
     3
    Author:     Franz Regensburger
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     4
    Copyright   1993  Technische Universitaet Muenchen
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     5
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     6
Lemmas for Holcfb.thy 
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     7
*)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     8
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     9
open Holcfb;
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    10
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    11
(* ------------------------------------------------------------------------ *)
625
119391dd1d59 New version
nipkow
parents: 243
diff changeset
    12
(* <::nat=>nat=>bool is a well-ordering                                     *)
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    13
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    14
892
d0dc8d057929 added qed, qed_goal[w]
clasohm
parents: 625
diff changeset
    15
qed_goal "well_ordering_nat"  Nat.thy 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    16
        "!P. P(x::nat) --> (? y. P(y) & (! x. P(x) --> y <= x))"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    17
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    18
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    19
        (res_inst_tac [("n","x")] less_induct 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    20
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    21
        (res_inst_tac [("Q","? k.k<n & P(k)")] (excluded_middle RS disjE) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    22
        (etac exE 2),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    23
        (etac conjE 2),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    24
        (rtac mp 2),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    25
        (etac allE 2),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    26
        (etac impE 2),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    27
        (atac 2),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    28
        (etac spec 2),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    29
        (atac 2),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    30
        (res_inst_tac [("x","n")] exI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    31
        (rtac conjI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    32
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    33
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    34
        (rtac leI  1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    35
        (fast_tac HOL_cs 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    36
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    37
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    38
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    39
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    40
(* Lemmas for selecting the least element in a nonempty set                 *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    41
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    42
892
d0dc8d057929 added qed, qed_goal[w]
clasohm
parents: 625
diff changeset
    43
qed_goalw "theleast"  Holcfb.thy [theleast_def] 
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    44
"P(x) ==> P(theleast(P)) & (!x.P(x)--> theleast(P) <= x)"
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    45
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    46
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    47
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    48
        (rtac (well_ordering_nat RS spec RS mp RS exE) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    49
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    50
        (rtac selectI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    51
        (atac 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    52
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    53
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    54
val theleast1= theleast RS conjunct1;
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    55
(* ?P1(?x1) ==> ?P1(theleast(?P1)) *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    56
892
d0dc8d057929 added qed, qed_goal[w]
clasohm
parents: 625
diff changeset
    57
qed_goal "theleast2"  Holcfb.thy  "P(x) ==> theleast(P) <= x"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    58
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    59
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    60
        (rtac (theleast RS conjunct2 RS spec RS mp) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    61
        (resolve_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    62
        (resolve_tac prems 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    63
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    64
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    65
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    66
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    67
(* Some lemmas in HOL.thy                                                   *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    68
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    69
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    70
892
d0dc8d057929 added qed, qed_goal[w]
clasohm
parents: 625
diff changeset
    71
qed_goal "de_morgan1" HOL.thy "(~a & ~b)=(~(a | b))"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    72
(fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    73
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    74
        (rtac iffI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    75
        (fast_tac HOL_cs 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    76
        (fast_tac HOL_cs 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    77
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    78
892
d0dc8d057929 added qed, qed_goal[w]
clasohm
parents: 625
diff changeset
    79
qed_goal "de_morgan2" HOL.thy "(~a | ~b)=(~(a & b))"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    80
(fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    81
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    82
        (rtac iffI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    83
        (fast_tac HOL_cs 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    84
        (fast_tac HOL_cs 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    85
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    86
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    87
892
d0dc8d057929 added qed, qed_goal[w]
clasohm
parents: 625
diff changeset
    88
qed_goal "notall2ex" HOL.thy "(~ (!x.P(x))) = (? x.~P(x))"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    89
(fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    90
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    91
        (rtac iffI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    92
        (fast_tac HOL_cs 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    93
        (fast_tac HOL_cs 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    94
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    95
892
d0dc8d057929 added qed, qed_goal[w]
clasohm
parents: 625
diff changeset
    96
qed_goal "notex2all" HOL.thy "(~ (? x.P(x))) = (!x.~P(x))"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    97
(fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    98
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
    99
        (rtac iffI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   100
        (fast_tac HOL_cs 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   101
        (fast_tac HOL_cs 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   102
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   103
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   104
892
d0dc8d057929 added qed, qed_goal[w]
clasohm
parents: 625
diff changeset
   105
qed_goal "selectI3" HOL.thy "(? x. P(x)) ==> P(@ x.P(x))"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   106
(fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   107
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   108
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   109
        (etac exE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   110
        (etac selectI 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   111
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   112
892
d0dc8d057929 added qed, qed_goal[w]
clasohm
parents: 625
diff changeset
   113
qed_goal "selectE" HOL.thy "P(@ x.P(x)) ==> (? x. P(x))"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   114
(fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   115
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   116
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   117
        (etac exI 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   118
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   119
892
d0dc8d057929 added qed, qed_goal[w]
clasohm
parents: 625
diff changeset
   120
qed_goal "select_eq_Ex" HOL.thy "(P(@ x.P(x))) =  (? x. P(x))"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   121
(fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   122
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   123
        (rtac (iff RS mp  RS mp) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   124
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   125
        (etac selectE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   126
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   127
        (etac selectI3 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   128
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   129
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   130
892
d0dc8d057929 added qed, qed_goal[w]
clasohm
parents: 625
diff changeset
   131
qed_goal "notnotI" HOL.thy "P ==> ~~P"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   132
(fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   133
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   134
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   135
        (fast_tac HOL_cs 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   136
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   137
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   138
892
d0dc8d057929 added qed, qed_goal[w]
clasohm
parents: 625
diff changeset
   139
qed_goal "classical2" HOL.thy "[|Q ==> R; ~Q ==> R|]==>R"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   140
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   141
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   142
        (rtac disjE 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   143
        (rtac excluded_middle 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   144
        (eresolve_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   145
        (eresolve_tac prems 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   146
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   147
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   148
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   149
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   150
val classical3 = (notE RS notI);
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   151
(* [| ?P ==> ~ ?P1; ?P ==> ?P1 |] ==> ~ ?P *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   152
625
119391dd1d59 New version
nipkow
parents: 243
diff changeset
   153
892
d0dc8d057929 added qed, qed_goal[w]
clasohm
parents: 625
diff changeset
   154
qed_goal "nat_less_cases" Nat.thy 
625
119391dd1d59 New version
nipkow
parents: 243
diff changeset
   155
    "[| (m::nat) < n ==> P(n,m); m=n ==> P(n,m);n < m ==> P(n,m)|]==>P(n,m)"
119391dd1d59 New version
nipkow
parents: 243
diff changeset
   156
( fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   157
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   158
        (res_inst_tac [("m1","n"),("n1","m")] (less_linear RS disjE) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   159
        (etac disjE 2),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   160
        (etac (hd (tl (tl prems))) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   161
        (etac (sym RS hd (tl prems)) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   162
        (etac (hd prems) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 892
diff changeset
   163
        ]);
625
119391dd1d59 New version
nipkow
parents: 243
diff changeset
   164
119391dd1d59 New version
nipkow
parents: 243
diff changeset
   165
119391dd1d59 New version
nipkow
parents: 243
diff changeset
   166
119391dd1d59 New version
nipkow
parents: 243
diff changeset
   167
119391dd1d59 New version
nipkow
parents: 243
diff changeset
   168
119391dd1d59 New version
nipkow
parents: 243
diff changeset
   169
119391dd1d59 New version
nipkow
parents: 243
diff changeset
   170