src/HOLCF/Fix.ML
author kleing
Mon, 21 Jun 2004 10:25:57 +0200
changeset 14981 e73f8140af78
parent 13524 604d0f3622d6
child 15576 efb95d0d01f7
permissions -rw-r--r--
Merged in license change from Isabelle2004
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2619
diff changeset
     1
(*  Title:      HOLCF/Fix.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: 1410
diff changeset
     3
    Author:     Franz Regensburger
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     4
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
     5
fixed point operator and admissibility
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     6
*)
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
(* derive inductive properties of iterate from primitive recursion          *)
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
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10230
diff changeset
    12
Goal "iterate (Suc n) F x = iterate n F (F$x)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    13
by (induct_tac "n" 1);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    14
by Auto_tac;  
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    15
qed "iterate_Suc2";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    16
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    17
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    18
(* the sequence of function itertaions is a chain                           *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    19
(* This property is essential since monotonicity of iterate makes no sense  *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    20
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    21
11346
0d28bc664955 corrected ML names of definitions
oheimb
parents: 10834
diff changeset
    22
Goalw [chain_def]  "x << F$x ==> chain (%i. iterate i F x)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    23
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    24
by (induct_tac "i" 1);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    25
by Auto_tac;  
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    26
by (etac monofun_cfun_arg 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    27
qed "chain_iterate2";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    28
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    29
11346
0d28bc664955 corrected ML names of definitions
oheimb
parents: 10834
diff changeset
    30
Goal "chain (%i. iterate i F UU)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    31
by (rtac chain_iterate2 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    32
by (rtac minimal 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    33
qed "chain_iterate";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    34
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    35
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    36
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    37
(* Kleene's fixed point theorems for continuous functions in pointed        *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    38
(* omega cpo's                                                              *)
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
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    41
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10230
diff changeset
    42
Goalw [Ifix_def] "Ifix F =F$(Ifix F)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    43
by (stac contlub_cfun_arg 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    44
by (rtac chain_iterate 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    45
by (rtac antisym_less 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    46
by (rtac lub_mono 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    47
by (rtac chain_iterate 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    48
by (rtac ch2ch_Rep_CFunR 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    49
by (rtac chain_iterate 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    50
by (rtac allI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    51
by (rtac (iterate_Suc RS subst) 1);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    52
by (rtac (chain_iterate RS chainE) 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    53
by (rtac is_lub_thelub 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    54
by (rtac ch2ch_Rep_CFunR 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    55
by (rtac chain_iterate 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    56
by (rtac ub_rangeI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    57
by (rtac (iterate_Suc RS subst) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    58
by (rtac is_ub_thelub 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    59
by (rtac chain_iterate 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    60
qed "Ifix_eq";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    61
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    62
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10230
diff changeset
    63
Goalw [Ifix_def] "F$x=x ==> Ifix(F) << x";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    64
by (rtac is_lub_thelub 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    65
by (rtac chain_iterate 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    66
by (rtac ub_rangeI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    67
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    68
by (induct_tac "i" 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    69
by (Asm_simp_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    70
by (Asm_simp_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    71
by (res_inst_tac [("t","x")] subst 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    72
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    73
by (etac monofun_cfun_arg 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    74
qed "Ifix_least";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    75
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    76
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    77
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    78
(* monotonicity and continuity of iterate                                   *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    79
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    80
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    81
Goalw [monofun] "monofun(iterate(i))";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    82
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    83
by (induct_tac "i" 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    84
by (Asm_simp_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    85
by (asm_full_simp_tac (simpset() addsimps [less_fun, monofun_cfun]) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    86
qed "monofun_iterate";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    87
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    88
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    89
(* the following lemma uses contlub_cfun which itself is based on a         *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    90
(* diagonalisation lemma for continuous functions with two arguments.       *)
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 5192
diff changeset
    91
(* In this special case it is the application function Rep_CFun                 *)
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    92
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    93
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    94
Goalw [contlub] "contlub(iterate(i))";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    95
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    96
by (induct_tac "i" 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    97
by (Asm_simp_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    98
by (rtac (lub_const RS thelubI RS sym) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
    99
by (asm_simp_tac (simpset() delsimps [range_composition]) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   100
by (rtac ext 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   101
by (stac thelub_fun 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   102
by (rtac chainI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   103
by (rtac (less_fun RS iffD2) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   104
by (rtac allI 1);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   105
by (rtac (chainE) 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   106
by (rtac (monofun_Rep_CFun1 RS ch2ch_MF2LR) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   107
by (rtac allI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   108
by (rtac monofun_Rep_CFun2 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   109
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   110
by (rtac ch2ch_fun 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   111
by (rtac (monofun_iterate RS ch2ch_monofun) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   112
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   113
by (stac thelub_fun 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   114
by (rtac (monofun_iterate RS ch2ch_monofun) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   115
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   116
by (rtac contlub_cfun  1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   117
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   118
by (etac (monofun_iterate RS ch2ch_monofun RS ch2ch_fun) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   119
qed "contlub_iterate";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   120
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   121
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   122
Goal "cont(iterate(i))";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   123
by (rtac monocontlub2cont 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   124
by (rtac monofun_iterate 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   125
by (rtac contlub_iterate 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   126
qed "cont_iterate";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   127
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   128
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   129
(* a lemma about continuity of iterate in its third argument                *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   130
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   131
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   132
Goal "monofun(iterate n F)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   133
by (rtac monofunI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   134
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   135
by (induct_tac "n" 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   136
by (Asm_simp_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   137
by (Asm_simp_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   138
by (etac monofun_cfun_arg 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   139
qed "monofun_iterate2";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   140
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   141
Goal "contlub(iterate n F)";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   142
by (rtac contlubI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   143
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   144
by (induct_tac "n" 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   145
by (Simp_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   146
by (Simp_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   147
by (res_inst_tac [("t","iterate n F (lub(range(%u. Y u)))"),
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   148
                  ("s","lub(range(%i. iterate n F (Y i)))")] ssubst 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   149
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   150
by (rtac contlub_cfun_arg 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   151
by (etac (monofun_iterate2 RS ch2ch_monofun) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   152
qed "contlub_iterate2";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   153
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   154
Goal "cont (iterate n F)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   155
by (rtac monocontlub2cont 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   156
by (rtac monofun_iterate2 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   157
by (rtac contlub_iterate2 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   158
qed "cont_iterate2";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   159
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   160
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   161
(* monotonicity and continuity of Ifix                                      *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   162
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   163
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   164
Goalw [monofun,Ifix_def] "monofun(Ifix)";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   165
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   166
by (rtac lub_mono 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   167
by (rtac chain_iterate 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   168
by (rtac chain_iterate 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   169
by (rtac allI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   170
by (rtac (less_fun RS iffD1 RS spec) 1 THEN
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   171
    etac (monofun_iterate RS monofunE RS spec RS spec RS mp) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   172
qed "monofun_Ifix";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   173
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   174
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   175
(* since iterate is not monotone in its first argument, special lemmas must *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   176
(* be derived for lubs in this argument                                     *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   177
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   178
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   179
Goal   
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   180
"chain(Y) ==> chain(%i. lub(range(%ia. iterate ia (Y i) UU)))";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   181
by (rtac chainI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   182
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   183
by (rtac lub_mono 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   184
by (rtac chain_iterate 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   185
by (rtac chain_iterate 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   186
by (strip_tac 1);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   187
by (etac (monofun_iterate RS ch2ch_monofun RS ch2ch_fun RS chainE) 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   188
qed "chain_iterate_lub";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   189
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   190
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   191
(* this exchange lemma is analog to the one for monotone functions          *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   192
(* observe that monotonicity is not really needed. The propagation of       *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   193
(* chains is the essential argument which is usually derived from monot.    *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   194
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   195
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   196
Goal "chain(Y) ==>iterate n (lub(range Y)) y = lub(range(%i. iterate n (Y i) y))";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   197
by (rtac (thelub_fun RS subst) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   198
by (etac (monofun_iterate RS ch2ch_monofun) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   199
by (asm_simp_tac (simpset() addsimps [contlub_iterate RS contlubE]) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   200
qed "contlub_Ifix_lemma1";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   201
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   202
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   203
Goal  "chain(Y) ==>\
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 892
diff changeset
   204
\         lub(range(%i. lub(range(%ia. iterate i (Y ia) UU)))) =\
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   205
\         lub(range(%i. lub(range(%ia. iterate ia (Y i) UU))))";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   206
by (rtac antisym_less 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   207
by (rtac is_lub_thelub 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   208
by (rtac (contlub_Ifix_lemma1 RS ext RS subst) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   209
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   210
by (rtac chain_iterate 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   211
by (rtac ub_rangeI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   212
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   213
by (rtac lub_mono 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   214
by (etac (monofun_iterate RS ch2ch_monofun RS ch2ch_fun) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   215
by (etac chain_iterate_lub 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   216
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   217
by (rtac is_ub_thelub 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   218
by (rtac chain_iterate 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   219
by (rtac is_lub_thelub 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   220
by (etac chain_iterate_lub 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   221
by (rtac ub_rangeI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   222
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   223
by (rtac lub_mono 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   224
by (rtac chain_iterate 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   225
by (rtac (contlub_Ifix_lemma1 RS ext RS subst) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   226
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   227
by (rtac chain_iterate 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   228
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   229
by (rtac is_ub_thelub 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   230
by (etac (monofun_iterate RS ch2ch_monofun RS ch2ch_fun) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   231
qed "ex_lub_iterate";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   232
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   233
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   234
Goalw [contlub,Ifix_def] "contlub(Ifix)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   235
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   236
by (stac (contlub_Ifix_lemma1 RS ext) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   237
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   238
by (etac ex_lub_iterate 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   239
qed "contlub_Ifix";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   240
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   241
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   242
Goal "cont(Ifix)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   243
by (rtac monocontlub2cont 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   244
by (rtac monofun_Ifix 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   245
by (rtac contlub_Ifix 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   246
qed "cont_Ifix";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   247
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   248
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   249
(* propagate properties of Ifix to its continuous counterpart               *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   250
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   251
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10230
diff changeset
   252
Goalw [fix_def] "fix$F = F$(fix$F)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   253
by (asm_simp_tac (simpset() addsimps [cont_Ifix]) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   254
by (rtac Ifix_eq 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   255
qed "fix_eq";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   256
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10230
diff changeset
   257
Goalw [fix_def] "F$x = x ==> fix$F << x";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   258
by (asm_simp_tac (simpset() addsimps [cont_Ifix]) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   259
by (etac Ifix_least 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   260
qed "fix_least";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   261
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   262
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   263
Goal
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10230
diff changeset
   264
"[| F$x = x; !z. F$z = z --> x << z |] ==> x = fix$F";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   265
by (rtac antisym_less 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   266
by (etac allE 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   267
by (etac mp 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   268
by (rtac (fix_eq RS sym) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   269
by (etac fix_least 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   270
qed "fix_eqI";
1274
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1267
diff changeset
   271
ea0668a1c0ba added 8bit pragmas
regensbu
parents: 1267
diff changeset
   272
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10230
diff changeset
   273
Goal "f == fix$F ==> f = F$f";
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   274
by (asm_simp_tac (simpset() addsimps [fix_eq RS sym]) 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   275
qed "fix_eq2";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   276
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10230
diff changeset
   277
Goal "f == fix$F ==> f$x = F$f$x";
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   278
by (etac (fix_eq2 RS cfun_fun_cong) 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   279
qed "fix_eq3";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   280
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   281
fun fix_tac3 thm i  = ((rtac trans i) THEN (rtac (thm RS fix_eq3) i)); 
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   282
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10230
diff changeset
   283
Goal "f = fix$F ==> f = F$f";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   284
by (hyp_subst_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   285
by (rtac fix_eq 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   286
qed "fix_eq4";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   287
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10230
diff changeset
   288
Goal "f = fix$F ==> f$x = F$f$x";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   289
by (rtac trans 1);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   290
by (etac (fix_eq4 RS cfun_fun_cong) 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   291
by (rtac refl 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   292
qed "fix_eq5";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   293
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   294
fun fix_tac5 thm i  = ((rtac trans i) THEN (rtac (thm RS fix_eq5) i)); 
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   295
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10230
diff changeset
   296
(* proves the unfolding theorem for function equations f = fix$... *)
3652
4c484f03079c added case_prover
oheimb
parents: 3460
diff changeset
   297
fun fix_prover thy fixeq s = prove_goal thy s (fn prems => [
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   298
        (rtac trans 1),
3652
4c484f03079c added case_prover
oheimb
parents: 3460
diff changeset
   299
        (rtac (fixeq RS fix_eq4) 1),
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   300
        (rtac trans 1),
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   301
        (rtac beta_cfun 1),
2566
cbf02fc74332 changed handling of cont_lemmas and adm_lemmas
oheimb
parents: 2354
diff changeset
   302
        (Simp_tac 1)
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   303
        ]);
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   304
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10230
diff changeset
   305
(* proves the unfolding theorem for function definitions f == fix$... *)
3652
4c484f03079c added case_prover
oheimb
parents: 3460
diff changeset
   306
fun fix_prover2 thy fixdef s = prove_goal thy s (fn prems => [
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   307
        (rtac trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   308
        (rtac (fix_eq2) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   309
        (rtac fixdef 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1410
diff changeset
   310
        (rtac beta_cfun 1),
2566
cbf02fc74332 changed handling of cont_lemmas and adm_lemmas
oheimb
parents: 2354
diff changeset
   311
        (Simp_tac 1)
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 892
diff changeset
   312
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   313
3652
4c484f03079c added case_prover
oheimb
parents: 3460
diff changeset
   314
(* proves an application case for a function from its unfolding thm *)
4c484f03079c added case_prover
oheimb
parents: 3460
diff changeset
   315
fun case_prover thy unfold s = prove_goal thy s (fn prems => [
4c484f03079c added case_prover
oheimb
parents: 3460
diff changeset
   316
	(cut_facts_tac prems 1),
4c484f03079c added case_prover
oheimb
parents: 3460
diff changeset
   317
	(rtac trans 1),
4c484f03079c added case_prover
oheimb
parents: 3460
diff changeset
   318
	(stac unfold 1),
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4423
diff changeset
   319
	Auto_tac
3652
4c484f03079c added case_prover
oheimb
parents: 3460
diff changeset
   320
	]);
4c484f03079c added case_prover
oheimb
parents: 3460
diff changeset
   321
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   322
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   323
(* better access to definitions                                             *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   324
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   325
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   326
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   327
Goal "Ifix=(%x. lub(range(%i. iterate i x UU)))";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   328
by (rtac ext 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   329
by (rewtac Ifix_def);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   330
by (rtac refl 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   331
qed "Ifix_def2";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   332
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   333
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   334
(* direct connection between fix and iteration without Ifix                 *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   335
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   336
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10230
diff changeset
   337
Goalw [fix_def] "fix$F = lub(range(%i. iterate i F UU))";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   338
by (fold_goals_tac [Ifix_def]);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   339
by (asm_simp_tac (simpset() addsimps [cont_Ifix]) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   340
qed "fix_def2";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   341
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   342
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   343
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   344
(* Lemmas about admissibility and fixed point induction                     *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   345
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   346
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   347
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   348
(* access to definitions                                                    *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   349
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   350
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   351
val prems = Goalw [adm_def]
11346
0d28bc664955 corrected ML names of definitions
oheimb
parents: 10834
diff changeset
   352
   "(!!Y. [| chain Y; !i. P (Y i) |] ==> P (lub (range Y))) ==> adm P";
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   353
by (blast_tac (claset() addIs prems) 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   354
qed "admI";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   355
11346
0d28bc664955 corrected ML names of definitions
oheimb
parents: 10834
diff changeset
   356
Goal "!x. P x ==> adm P";
0d28bc664955 corrected ML names of definitions
oheimb
parents: 10834
diff changeset
   357
by (rtac admI 1);
0d28bc664955 corrected ML names of definitions
oheimb
parents: 10834
diff changeset
   358
by (etac spec 1);
0d28bc664955 corrected ML names of definitions
oheimb
parents: 10834
diff changeset
   359
qed "triv_admI";
0d28bc664955 corrected ML names of definitions
oheimb
parents: 10834
diff changeset
   360
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   361
Goalw [adm_def] "[| adm(P); chain(Y); !i. P(Y(i)) |] ==> P(lub(range(Y)))";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   362
by (Blast_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   363
qed "admD";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   364
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   365
Goalw [admw_def] "admw(P) = (!F.(!n. P(iterate n F UU)) -->\
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   366
\                        P (lub(range(%i. iterate i F UU))))";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   367
by (rtac refl 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   368
qed "admw_def2";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   369
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   370
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   371
(* an admissible formula is also weak admissible                            *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   372
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   373
10230
5eb935d6cc69 tidying and renaming of contrapos rules
paulson
parents: 9248
diff changeset
   374
Goalw [admw_def] "adm(P)==>admw(P)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   375
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   376
by (etac admD 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   377
by (rtac chain_iterate 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   378
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   379
qed "adm_impl_admw";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   380
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   381
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   382
(* fixed point induction                                                    *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   383
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   384
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   385
val major::prems = Goal
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10230
diff changeset
   386
     "[| adm(P); P(UU); !!x. P(x) ==> P(F$x)|] ==> P(fix$F)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   387
by (stac fix_def2 1);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   388
by (rtac (major RS admD) 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   389
by (rtac chain_iterate 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   390
by (rtac allI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   391
by (induct_tac "i" 1);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   392
by (asm_simp_tac (simpset() addsimps (iterate_0::prems)) 1);
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   393
by (asm_simp_tac (simpset() addsimps (iterate_Suc::prems)) 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   394
qed "fix_ind";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   395
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10230
diff changeset
   396
val prems = Goal "[| f == fix$F; adm(P); \
a7897aebbffc *** empty log message ***
nipkow
parents: 10230
diff changeset
   397
\       P(UU); !!x. P(x) ==> P(F$x)|] ==> P f";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   398
by (cut_facts_tac prems 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   399
by (asm_simp_tac HOL_ss 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   400
by (etac fix_ind 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   401
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   402
by (eresolve_tac prems 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   403
qed "def_fix_ind";
2568
f86367e104f5 added def_fix_ind and def_wfix_ind for convenience
oheimb
parents: 2566
diff changeset
   404
	
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   405
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   406
(* computational induction for weak admissible formulae                     *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   407
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   408
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10230
diff changeset
   409
Goal "[| admw(P); !n. P(iterate n F UU)|] ==> P(fix$F)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   410
by (stac fix_def2 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   411
by (rtac (admw_def2 RS iffD1 RS spec RS mp) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   412
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   413
by (rtac allI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   414
by (etac spec 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   415
qed "wfix_ind";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   416
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10230
diff changeset
   417
Goal "[| f == fix$F; admw(P); \
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   418
\       !n. P(iterate n F UU) |] ==> P f";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   419
by (asm_simp_tac HOL_ss 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   420
by (etac wfix_ind 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   421
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   422
qed "def_wfix_ind";
2568
f86367e104f5 added def_fix_ind and def_wfix_ind for convenience
oheimb
parents: 2566
diff changeset
   423
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   424
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   425
(* for chain-finite (easy) types every formula is admissible                *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   426
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   427
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   428
Goalw [adm_def]
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   429
"!Y. chain(Y::nat=>'a) --> (? n. max_in_chain n Y) ==> adm(P::'a=>bool)";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   430
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   431
by (rtac exE 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   432
by (rtac mp 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   433
by (etac spec 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   434
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   435
by (stac (lub_finch1 RS thelubI) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   436
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   437
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   438
by (etac spec 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   439
qed "adm_max_in_chain";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   440
4720
c1b83b42f65a added not1_or and if_eq_cancel to simpset()
oheimb
parents: 4477
diff changeset
   441
bind_thm ("adm_chfin" ,chfin RS adm_max_in_chain);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   442
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   443
(* ------------------------------------------------------------------------ *)
4720
c1b83b42f65a added not1_or and if_eq_cancel to simpset()
oheimb
parents: 4477
diff changeset
   444
(* some lemmata for functions with flat/chfin domain/range types	    *)
2354
b4a1e3306aa0 added theorems
sandnerr
parents: 2275
diff changeset
   445
(* ------------------------------------------------------------------------ *)
b4a1e3306aa0 added theorems
sandnerr
parents: 2275
diff changeset
   446
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10230
diff changeset
   447
val _ = goalw thy [adm_def] "adm (%(u::'a::cpo->'b::chfin). P(u$s))";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   448
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   449
by (dtac chfin_Rep_CFunR 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   450
by (eres_inst_tac [("x","s")] allE 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   451
by (fast_tac (HOL_cs addss (simpset() addsimps [chfin])) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   452
qed "adm_chfindom";
2354
b4a1e3306aa0 added theorems
sandnerr
parents: 2275
diff changeset
   453
3324
6b26b886ff69 Eliminated the prediates flat,chfin
slotosch
parents: 3044
diff changeset
   454
(* adm_flat not needed any more, since it is a special case of adm_chfindom *)
2354
b4a1e3306aa0 added theorems
sandnerr
parents: 2275
diff changeset
   455
1992
0256c8b71ff1 added flat_eq,
oheimb
parents: 1872
diff changeset
   456
(* ------------------------------------------------------------------------ *)
3326
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3324
diff changeset
   457
(* improved admisibility introduction                                       *)
1992
0256c8b71ff1 added flat_eq,
oheimb
parents: 1872
diff changeset
   458
(* ------------------------------------------------------------------------ *)
0256c8b71ff1 added flat_eq,
oheimb
parents: 1872
diff changeset
   459
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   460
val prems = Goalw [adm_def]
4720
c1b83b42f65a added not1_or and if_eq_cancel to simpset()
oheimb
parents: 4477
diff changeset
   461
 "(!!Y. [| chain Y; !i. P (Y i); !i. ? j. i < j & Y i ~= Y j & Y i << Y j |]\
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   462
\ ==> P(lub (range Y))) ==> adm P";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   463
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   464
by (etac increasing_chain_adm_lemma 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   465
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   466
by (eresolve_tac prems 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   467
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   468
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   469
qed "admI2";
1992
0256c8b71ff1 added flat_eq,
oheimb
parents: 1872
diff changeset
   470
0256c8b71ff1 added flat_eq,
oheimb
parents: 1872
diff changeset
   471
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   472
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   473
(* admissibility of special formulae and propagation                        *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   474
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   475
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   476
Goalw [adm_def] "[|cont u;cont v|]==> adm(%x. u x << v x)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   477
by (strip_tac 1);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   478
by (forw_inst_tac [("f","u")] (cont2mono RS ch2ch_monofun) 1);
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   479
by (assume_tac  1);
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   480
by (forw_inst_tac [("f","v")] (cont2mono RS ch2ch_monofun) 1);
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   481
by (assume_tac  1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   482
by (etac (cont2contlub RS contlubE RS spec RS mp RS ssubst) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   483
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   484
by (etac (cont2contlub RS contlubE RS spec RS mp RS ssubst) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   485
by (atac 1);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   486
by (blast_tac (claset() addIs [lub_mono]) 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   487
qed "adm_less";
3460
5d71eed16fbe Tuned Franz's proofs.
nipkow
parents: 3326
diff changeset
   488
Addsimps [adm_less];
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   489
10230
5eb935d6cc69 tidying and renaming of contrapos rules
paulson
parents: 9248
diff changeset
   490
Goal   "[| adm P; adm Q |] ==> adm(%x. P x & Q x)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   491
by (fast_tac (HOL_cs addEs [admD] addIs [admI]) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   492
qed "adm_conj";
3460
5d71eed16fbe Tuned Franz's proofs.
nipkow
parents: 3326
diff changeset
   493
Addsimps [adm_conj];
5d71eed16fbe Tuned Franz's proofs.
nipkow
parents: 3326
diff changeset
   494
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   495
Goalw [adm_def] "adm(%x. t)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   496
by (fast_tac HOL_cs 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   497
qed "adm_not_free";
3460
5d71eed16fbe Tuned Franz's proofs.
nipkow
parents: 3326
diff changeset
   498
Addsimps [adm_not_free];
5d71eed16fbe Tuned Franz's proofs.
nipkow
parents: 3326
diff changeset
   499
10230
5eb935d6cc69 tidying and renaming of contrapos rules
paulson
parents: 9248
diff changeset
   500
Goalw [adm_def] "cont t ==> adm(%x.~ (t x) << u)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   501
by (strip_tac 1);
10230
5eb935d6cc69 tidying and renaming of contrapos rules
paulson
parents: 9248
diff changeset
   502
by (rtac contrapos_nn 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   503
by (etac spec 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   504
by (rtac trans_less 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   505
by (atac 2);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   506
by (etac (cont2mono RS monofun_fun_arg) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   507
by (rtac is_ub_thelub 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   508
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   509
qed "adm_not_less";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   510
10230
5eb935d6cc69 tidying and renaming of contrapos rules
paulson
parents: 9248
diff changeset
   511
Goal   "!y. adm(P y) ==> adm(%x.!y. P y x)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   512
by (fast_tac (HOL_cs addIs [admI] addEs [admD]) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   513
qed "adm_all";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   514
1779
1155c06fa956 introduced forgotten bind_thm calls
oheimb
parents: 1681
diff changeset
   515
bind_thm ("adm_all2", allI RS adm_all);
625
119391dd1d59 New version
nipkow
parents: 442
diff changeset
   516
10230
5eb935d6cc69 tidying and renaming of contrapos rules
paulson
parents: 9248
diff changeset
   517
Goal   "[|cont t; adm P|] ==> adm(%x. P (t x))";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   518
by (rtac admI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   519
by (stac (cont2contlub RS contlubE RS spec RS mp) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   520
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   521
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   522
by (etac admD 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   523
by (etac (cont2mono RS ch2ch_monofun) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   524
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   525
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   526
qed "adm_subst";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   527
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   528
Goal "adm(%x.~ UU << t(x))";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   529
by (Simp_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   530
qed "adm_UU_not_less";
3460
5d71eed16fbe Tuned Franz's proofs.
nipkow
parents: 3326
diff changeset
   531
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   532
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   533
Goalw [adm_def] "cont(t)==> adm(%x.~ (t x) = UU)";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   534
by (strip_tac 1);
10230
5eb935d6cc69 tidying and renaming of contrapos rules
paulson
parents: 9248
diff changeset
   535
by (rtac contrapos_nn 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   536
by (etac spec 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   537
by (rtac (chain_UU_I RS spec) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   538
by (etac (cont2mono RS ch2ch_monofun) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   539
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   540
by (etac (cont2contlub RS contlubE RS spec RS mp RS subst) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   541
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   542
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   543
qed "adm_not_UU";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   544
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   545
Goal "[|cont u ; cont v|]==> adm(%x. u x = v x)";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   546
by (asm_simp_tac (simpset() addsimps [po_eq_conv]) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   547
qed "adm_eq";
3460
5d71eed16fbe Tuned Franz's proofs.
nipkow
parents: 3326
diff changeset
   548
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   549
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   550
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   551
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   552
(* admissibility for disjunction is hard to prove. It takes 10 Lemmas       *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   553
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   554
1992
0256c8b71ff1 added flat_eq,
oheimb
parents: 1872
diff changeset
   555
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   556
Goal  "!n. P(Y n)|Q(Y n) ==> (? i.!j. R i j --> Q(Y(j))) | (!i.? j. R i j & P(Y(j)))";
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   557
by (Fast_tac 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   558
qed "adm_disj_lemma1";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   559
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   560
Goal "[| adm(Q); ? X. chain(X) & (!n. Q(X(n))) &\
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   561
  \   lub(range(Y))=lub(range(X))|] ==> Q(lub(range(Y)))";
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   562
by (force_tac (claset() addEs [admD], simpset()) 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   563
qed "adm_disj_lemma2";
2619
3fd774ee405a Modified and shortened adm_disj lemmas.
nipkow
parents: 2568
diff changeset
   564
11346
0d28bc664955 corrected ML names of definitions
oheimb
parents: 10834
diff changeset
   565
Goalw [chain_def]"chain Y ==> chain (%m. if m < Suc i then Y (Suc i) else Y m)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   566
by (Asm_simp_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   567
by (safe_tac HOL_cs);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   568
by (subgoal_tac "ia = i" 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   569
by (ALLGOALS Asm_simp_tac);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   570
qed "adm_disj_lemma3";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   571
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   572
Goal "!j. i < j --> Q(Y(j))  ==> !n. Q( if n < Suc i then Y(Suc i) else Y n)";
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   573
by (Asm_simp_tac 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   574
qed "adm_disj_lemma4";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   575
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   576
Goal
4720
c1b83b42f65a added not1_or and if_eq_cancel to simpset()
oheimb
parents: 4477
diff changeset
   577
  "!!Y::nat=>'a::cpo. [| chain(Y); ! j. i < j --> Q(Y(j)) |] ==>\
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   578
  \       lub(range(Y)) = lub(range(%m. if m< Suc(i) then Y(Suc(i)) else Y m))";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   579
by (safe_tac (HOL_cs addSIs [lub_equal2,adm_disj_lemma3]));
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   580
by (atac 2);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   581
by (res_inst_tac [("x","i")] exI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   582
by (Asm_simp_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   583
qed "adm_disj_lemma5";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   584
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   585
Goal
4720
c1b83b42f65a added not1_or and if_eq_cancel to simpset()
oheimb
parents: 4477
diff changeset
   586
  "[| chain(Y::nat=>'a::cpo); ? i. ! j. i < j --> Q(Y(j)) |] ==>\
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   587
  \         ? X. chain(X) & (! n. Q(X(n))) & lub(range(Y)) = lub(range(X))";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   588
by (etac exE 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   589
by (res_inst_tac [("x","%m. if m<Suc(i) then Y(Suc(i)) else Y m")] exI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   590
by (rtac conjI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   591
by (rtac adm_disj_lemma3 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   592
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   593
by (rtac conjI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   594
by (rtac adm_disj_lemma4 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   595
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   596
by (rtac adm_disj_lemma5 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   597
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   598
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   599
qed "adm_disj_lemma6";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   600
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   601
Goal 
4720
c1b83b42f65a added not1_or and if_eq_cancel to simpset()
oheimb
parents: 4477
diff changeset
   602
  "[| chain(Y::nat=>'a::cpo); ! i. ? j. i < j & P(Y(j))  |] ==>\
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   603
  \         chain(%m. Y(Least(%j. m<j & P(Y(j)))))";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   604
by (rtac chainI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   605
by (rtac chain_mono3 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   606
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   607
by (rtac Least_le 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   608
by (rtac conjI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   609
by (rtac Suc_lessD 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   610
by (etac allE 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   611
by (etac exE 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   612
by (rtac (LeastI RS conjunct1) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   613
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   614
by (etac allE 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   615
by (etac exE 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   616
by (rtac (LeastI RS conjunct2) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   617
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   618
qed "adm_disj_lemma7";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   619
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   620
Goal 
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   621
  "[| ! i. ? j. i < j & P(Y(j)) |] ==> ! m. P(Y(LEAST j::nat. m<j & P(Y(j))))";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   622
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   623
by (etac allE 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   624
by (etac exE 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   625
by (etac (LeastI RS conjunct2) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   626
qed "adm_disj_lemma8";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   627
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   628
Goal
4720
c1b83b42f65a added not1_or and if_eq_cancel to simpset()
oheimb
parents: 4477
diff changeset
   629
  "[| chain(Y::nat=>'a::cpo); ! i. ? j. i < j & P(Y(j)) |] ==>\
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   630
  \         lub(range(Y)) = lub(range(%m. Y(Least(%j. m<j & P(Y(j))))))";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   631
by (rtac antisym_less 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   632
by (rtac lub_mono 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   633
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   634
by (rtac adm_disj_lemma7 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   635
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   636
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   637
by (strip_tac 1);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   638
by (rtac (chain_mono) 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   639
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   640
by (etac allE 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   641
by (etac exE 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   642
by (rtac (LeastI RS conjunct1) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   643
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   644
by (rtac lub_mono3 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   645
by (rtac adm_disj_lemma7 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   646
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   647
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   648
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   649
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   650
by (rtac exI 1);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   651
by (rtac (chain_mono) 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   652
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   653
by (rtac lessI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   654
qed "adm_disj_lemma9";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   655
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   656
Goal "[| chain(Y::nat=>'a::cpo); ! i. ? j. i < j & P(Y(j)) |] ==>\
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   657
  \         ? X. chain(X) & (! n. P(X(n))) & lub(range(Y)) = lub(range(X))";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   658
by (res_inst_tac [("x","%m. Y(Least(%j. m<j & P(Y(j))))")] exI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   659
by (rtac conjI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   660
by (rtac adm_disj_lemma7 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   661
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   662
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   663
by (rtac conjI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   664
by (rtac adm_disj_lemma8 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   665
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   666
by (rtac adm_disj_lemma9 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   667
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   668
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   669
qed "adm_disj_lemma10";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   670
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   671
Goal "[| adm(P); chain(Y);? i. ! j. i < j --> P(Y(j))|]==>P(lub(range(Y)))";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   672
by (etac adm_disj_lemma2 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   673
by (etac adm_disj_lemma6 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   674
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   675
qed "adm_disj_lemma12";
430
89e1986125fe Franz Regensburger's changes.
nipkow
parents: 300
diff changeset
   676
1992
0256c8b71ff1 added flat_eq,
oheimb
parents: 1872
diff changeset
   677
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   678
Goal
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   679
"[| adm(P); chain(Y); ! i. ? j. i < j & P(Y(j)) |]==>P(lub(range(Y)))";
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   680
by (etac adm_disj_lemma2 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   681
by (etac adm_disj_lemma10 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   682
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   683
qed "adm_lemma11";
430
89e1986125fe Franz Regensburger's changes.
nipkow
parents: 300
diff changeset
   684
10230
5eb935d6cc69 tidying and renaming of contrapos rules
paulson
parents: 9248
diff changeset
   685
Goal "[| adm P; adm Q |] ==> adm(%x. P x | Q x)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   686
by (rtac admI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   687
by (rtac (adm_disj_lemma1 RS disjE) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   688
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   689
by (rtac disjI2 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   690
by (etac adm_disj_lemma12 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   691
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   692
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   693
by (rtac disjI1 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   694
by (etac adm_lemma11 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   695
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   696
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   697
qed "adm_disj";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   698
10230
5eb935d6cc69 tidying and renaming of contrapos rules
paulson
parents: 9248
diff changeset
   699
Goal "[| adm(%x.~(P x)); adm Q |] ==> adm(%x. P x --> Q x)";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   700
by (subgoal_tac "(%x. P x --> Q x) = (%x. ~P x | Q x)" 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   701
by (etac ssubst 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   702
by (etac adm_disj 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   703
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   704
by (Simp_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   705
qed "adm_imp";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   706
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5068
diff changeset
   707
Goal "[| adm (%x. P x --> Q x); adm (%x. Q x --> P x) |] \
3460
5d71eed16fbe Tuned Franz's proofs.
nipkow
parents: 3326
diff changeset
   708
\           ==> adm (%x. P x = Q x)";
4423
a129b817b58a expandshort;
wenzelm
parents: 4098
diff changeset
   709
by (subgoal_tac "(%x. P x = Q x) = (%x. (P x --> Q x) & (Q x --> P x))" 1);
3460
5d71eed16fbe Tuned Franz's proofs.
nipkow
parents: 3326
diff changeset
   710
by (Asm_simp_tac 1);
5d71eed16fbe Tuned Franz's proofs.
nipkow
parents: 3326
diff changeset
   711
by (rtac ext 1);
5d71eed16fbe Tuned Franz's proofs.
nipkow
parents: 3326
diff changeset
   712
by (fast_tac HOL_cs 1);
5d71eed16fbe Tuned Franz's proofs.
nipkow
parents: 3326
diff changeset
   713
qed"adm_iff";
5d71eed16fbe Tuned Franz's proofs.
nipkow
parents: 3326
diff changeset
   714
5d71eed16fbe Tuned Franz's proofs.
nipkow
parents: 3326
diff changeset
   715
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   716
Goal "[| adm (%x. ~ P x); adm (%x. ~ Q x) |] ==> adm (%x. ~ (P x & Q x))";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   717
by (subgoal_tac "(%x. ~ (P x & Q x)) = (%x. ~ P x | ~ Q x)" 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   718
by (rtac ext 2);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   719
by (fast_tac HOL_cs 2);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   720
by (etac ssubst 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   721
by (etac adm_disj 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   722
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 8161
diff changeset
   723
qed "adm_not_conj";
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1461
diff changeset
   724
11346
0d28bc664955 corrected ML names of definitions
oheimb
parents: 10834
diff changeset
   725
bind_thms ("adm_lemmas", [adm_not_free,adm_imp,adm_disj,adm_eq,adm_not_UU,
0d28bc664955 corrected ML names of definitions
oheimb
parents: 10834
diff changeset
   726
        adm_UU_not_less,adm_all2,adm_not_less,adm_not_conj,adm_iff]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   727
2566
cbf02fc74332 changed handling of cont_lemmas and adm_lemmas
oheimb
parents: 2354
diff changeset
   728
Addsimps adm_lemmas;