src/HOLCF/Porder.ML
author kleing
Wed, 07 Jan 2004 07:52:12 +0100
changeset 14343 6bc647f472b9
parent 12484 7ad150f5fc10
child 14981 e73f8140af78
permissions -rw-r--r--
map_idI
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
     1
(*  Title:      HOLCF/Porder
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: 1267
diff changeset
     3
    Author:     Franz Regensburger
12030
wenzelm
parents: 11452
diff changeset
     4
    License:    GPL (GNU GENERAL PUBLIC LICENSE)
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     5
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
     6
Conservative extension of theory Porder0 by constant definitions 
243
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
625
119391dd1d59 New version
nipkow
parents: 442
diff changeset
     9
(* ------------------------------------------------------------------------ *)
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    10
(* lubs are unique                                                          *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    11
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    12
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
    13
11347
4e41f71179ed corrected ML names of definitions, added chain_shift
oheimb
parents: 9970
diff changeset
    14
Goalw [is_lub_def, is_ub_def] 
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
    15
        "[| S <<| x ; S <<| y |] ==> x=y";
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    16
by (blast_tac (claset() addIs [antisym_less]) 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
    17
qed "unique_lub";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    18
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    19
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    20
(* chains are monotone functions                                            *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    21
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    22
11347
4e41f71179ed corrected ML names of definitions, added chain_shift
oheimb
parents: 9970
diff changeset
    23
Goalw [chain_def] "chain F ==> x<y --> F x<<F y";
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
    24
by (induct_tac "y" 1);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    25
by Auto_tac;  
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    26
by (blast_tac (claset() addIs [trans_less]) 2);
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    27
by (blast_tac (claset() addSEs [less_SucE]) 1);
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    28
qed_spec_mp "chain_mono";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    29
9169
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
    30
Goal "[| chain F; x <= y |] ==> F x << F y";
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    31
by (dtac le_imp_less_or_eq 1);
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    32
by (blast_tac (claset() addIs [chain_mono]) 1);
9169
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
    33
qed "chain_mono3";
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
(* ------------------------------------------------------------------------ *)
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
    37
(* The range of a chain is a totally ordered     <<                         *)
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    38
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    39
11347
4e41f71179ed corrected ML names of definitions, added chain_shift
oheimb
parents: 9970
diff changeset
    40
Goalw [tord_def] "chain(F) ==> tord(range(F))";
12484
7ad150f5fc10 isatool expandshort;
wenzelm
parents: 12030
diff changeset
    41
by Safe_tac;
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
    42
by (rtac nat_less_cases 1);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    43
by (ALLGOALS (fast_tac (claset() addIs [chain_mono])));
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
    44
qed "chain_tord";
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
    45
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    46
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    47
(* ------------------------------------------------------------------------ *)
625
119391dd1d59 New version
nipkow
parents: 442
diff changeset
    48
(* technical lemmas about lub and is_lub                                    *)
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    49
(* ------------------------------------------------------------------------ *)
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2033
diff changeset
    50
bind_thm("lub",lub_def RS meta_eq_to_obj_eq);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    51
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    52
Goal "EX x. M <<| x ==> M <<| lub(M)";
11452
f3fbbaeb4fb8 removed reference to Ex_def
paulson
parents: 11347
diff changeset
    53
by (asm_full_simp_tac (simpset() addsimps [lub, some_eq_ex]) 1);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    54
bind_thm ("lubI", exI RS result());
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    55
9169
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
    56
Goal "M <<| l ==> lub(M) = l";
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
    57
by (rtac unique_lub 1);
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
    58
by (stac lub 1);
9970
dfe4747c8318 the final renaming: selectI -> someI
paulson
parents: 9248
diff changeset
    59
by (etac someI 1);
9169
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
    60
by (atac 1);
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
    61
qed "thelubI";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    62
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    63
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4721
diff changeset
    64
Goal "lub{x} = x";
11347
4e41f71179ed corrected ML names of definitions, added chain_shift
oheimb
parents: 9970
diff changeset
    65
by (simp_tac (simpset() addsimps [thelubI,is_lub_def,is_ub_def]) 1);
2841
c2508f4ab739 Added "discrete" CPOs and modified IMP to use those rather than "lift"
nipkow
parents: 2640
diff changeset
    66
qed "lub_singleton";
c2508f4ab739 Added "discrete" CPOs and modified IMP to use those rather than "lift"
nipkow
parents: 2640
diff changeset
    67
Addsimps [lub_singleton];
c2508f4ab739 Added "discrete" CPOs and modified IMP to use those rather than "lift"
nipkow
parents: 2640
diff changeset
    68
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    69
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    70
(* access to some definition as inference rule                              *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    71
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    72
11347
4e41f71179ed corrected ML names of definitions, added chain_shift
oheimb
parents: 9970
diff changeset
    73
Goalw [is_lub_def] "S <<| x ==> S <| x";
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    74
by Auto_tac;
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    75
qed "is_lubD1";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    76
11347
4e41f71179ed corrected ML names of definitions, added chain_shift
oheimb
parents: 9970
diff changeset
    77
Goalw [is_lub_def] "[| S <<| x; S <| u |] ==> x << u";
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    78
by Auto_tac;
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    79
qed "is_lub_lub";
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    80
11347
4e41f71179ed corrected ML names of definitions, added chain_shift
oheimb
parents: 9970
diff changeset
    81
val prems = Goalw [is_lub_def]
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    82
        "[| S <| x; !!u. S <| u ==> x << u |] ==> S <<| x";
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    83
by (blast_tac (claset() addIs prems) 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
    84
qed "is_lubI";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    85
11347
4e41f71179ed corrected ML names of definitions, added chain_shift
oheimb
parents: 9970
diff changeset
    86
Goalw [chain_def] "chain F ==> F(i) << F(Suc(i))";
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    87
by Auto_tac;
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
    88
qed "chainE";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    89
11347
4e41f71179ed corrected ML names of definitions, added chain_shift
oheimb
parents: 9970
diff changeset
    90
val prems = Goalw [chain_def] "(!!i. F i << F(Suc i)) ==> chain F";
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
    91
by (blast_tac (claset() addIs prems) 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
    92
qed "chainI";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    93
11347
4e41f71179ed corrected ML names of definitions, added chain_shift
oheimb
parents: 9970
diff changeset
    94
Goal "chain Y ==> chain (%i. Y (i + j))";
12484
7ad150f5fc10 isatool expandshort;
wenzelm
parents: 12030
diff changeset
    95
by (rtac chainI 1);
11347
4e41f71179ed corrected ML names of definitions, added chain_shift
oheimb
parents: 9970
diff changeset
    96
by (Clarsimp_tac 1);
12484
7ad150f5fc10 isatool expandshort;
wenzelm
parents: 12030
diff changeset
    97
by (etac chainE 1);
11347
4e41f71179ed corrected ML names of definitions, added chain_shift
oheimb
parents: 9970
diff changeset
    98
qed "chain_shift";
4e41f71179ed corrected ML names of definitions, added chain_shift
oheimb
parents: 9970
diff changeset
    99
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   100
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   101
(* technical lemmas about (least) upper bounds of chains                    *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   102
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   103
11347
4e41f71179ed corrected ML names of definitions, added chain_shift
oheimb
parents: 9970
diff changeset
   104
Goalw [is_ub_def] "range S <| x  ==> S(i) << x";
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   105
by (Blast_tac 1);
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   106
qed "ub_rangeD";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   107
11347
4e41f71179ed corrected ML names of definitions, added chain_shift
oheimb
parents: 9970
diff changeset
   108
val prems = Goalw [is_ub_def] "(!!i. S i << x) ==> range S <| x";
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   109
by (blast_tac (claset() addIs prems) 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   110
qed "ub_rangeI";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   111
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   112
bind_thm ("is_ub_lub", is_lubD1 RS ub_rangeD);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   113
(* range(?S1) <<| ?x1 ==> ?S1(?x) << ?x1                                    *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   114
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   115
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   116
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   117
(* results about finite chains                                              *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   118
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   119
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   120
Goalw [max_in_chain_def]
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   121
        "[| chain C; max_in_chain i C|] ==> range C <<| C i";
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   122
by (rtac is_lubI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   123
by (rtac ub_rangeI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   124
by (res_inst_tac [("m","i")] nat_less_cases 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   125
by (rtac (antisym_less_inverse RS conjunct2) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   126
by (etac (disjI1 RS less_or_eq_imp_le RS rev_mp) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   127
by (etac spec 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   128
by (rtac (antisym_less_inverse RS conjunct2) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   129
by (etac (disjI2 RS less_or_eq_imp_le RS rev_mp) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   130
by (etac spec 1);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   131
by (etac chain_mono 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   132
by (atac 1);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   133
by (etac (ub_rangeD) 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   134
qed "lub_finch1";     
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   135
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   136
Goalw [finite_chain_def]
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   137
        "finite_chain(C) ==> range(C) <<| C(@ i. max_in_chain i C)";
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   138
by (rtac lub_finch1 1);
9970
dfe4747c8318 the final renaming: selectI -> someI
paulson
parents: 9248
diff changeset
   139
by (best_tac (claset() addIs [someI]) 2);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   140
by (Blast_tac 1);
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   141
qed "lub_finch2";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   142
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   143
9169
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
   144
Goal "x<<y ==> chain (%i. if i=0 then x else y)";
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
   145
by (rtac chainI 1);
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
   146
by (induct_tac "i" 1);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   147
by Auto_tac;  
9169
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
   148
qed "bin_chain";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   149
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   150
Goalw [max_in_chain_def,le_def]
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   151
        "x<<y ==> max_in_chain (Suc 0) (%i. if (i=0) then x else y)";
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   152
by (rtac allI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   153
by (induct_tac "j" 1);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   154
by Auto_tac; 
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 9169
diff changeset
   155
qed "bin_chainmax";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   156
9169
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
   157
Goal "x << y ==> range(%i::nat. if (i=0) then x else y) <<| y";
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
   158
by (res_inst_tac [("s","if (Suc 0) = 0 then x else y")] subst 1
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
   159
    THEN rtac lub_finch1 2);
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
   160
by (etac bin_chain 2);
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
   161
by (etac bin_chainmax 2);
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   162
by (Simp_tac 1);
9169
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
   163
qed "lub_bin_chain";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   164
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   165
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   166
(* the maximal element in a chain is its lub                                *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   167
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   168
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   169
Goal "[| Y i = c;  ALL i. Y i<<c |] ==> lub(range Y) = c";
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   170
by (blast_tac (claset()  addDs [ub_rangeD] 
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   171
                         addIs [thelubI, is_lubI, ub_rangeI]) 1);
9169
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
   172
qed "lub_chain_maxelem";
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
(* the lub of a constant chain is the constant                              *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   176
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   177
9169
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
   178
Goal "range(%x. c) <<| c";
9248
e1dee89de037 massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents: 9245
diff changeset
   179
by (blast_tac (claset()  addDs [ub_rangeD] addIs [is_lubI, ub_rangeI]) 1);
9169
85a47aa21f74 tidying and unbatchifying
paulson
parents: 8935
diff changeset
   180
qed "lub_const";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   181
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   182
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   183