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