src/HOLCF/Sprod2.ML
author paulson
Tue, 04 Jul 2000 15:58:11 +0200
changeset 9245 428385c4bc50
parent 7499 23e090051cb8
child 9248 e1dee89de037
permissions -rw-r--r--
removed most batch-style proofs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2033
diff changeset
     1
(*  Title:      HOLCF/Sprod2.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: 1168
diff changeset
     3
    Author:     Franz Regensburger
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     4
    Copyright   1993 Technische Universitaet Muenchen
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     5
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
     6
Class Instance **::(pcpo,pcpo)po
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
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2033
diff changeset
     9
(* for compatibility with old HOLCF-Version *)
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    10
val prems = goal thy "(op <<)=(%x y. Isfst x<<Isfst y&Issnd x<<Issnd y)";
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    11
by (fold_goals_tac [less_sprod_def]);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    12
by (rtac refl 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    13
qed "inst_sprod_po";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    14
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    15
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    16
(* type sprod is pointed                                                    *)
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
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    19
val prems = goal thy "Ispair UU UU << p";
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    20
by (simp_tac(Sprod0_ss addsimps[inst_sprod_po,minimal])1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    21
qed "minimal_sprod";
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2033
diff changeset
    22
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2033
diff changeset
    23
bind_thm ("UU_sprod_def",minimal_sprod RS minimal2UU RS sym);
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2033
diff changeset
    24
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    25
val prems = goal thy "? x::'a**'b.!y. x<<y";
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    26
by (res_inst_tac [("x","Ispair UU UU")] exI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    27
by (rtac (minimal_sprod RS allI) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    28
qed "least_sprod";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    29
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    30
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    31
(* Ispair is monotone in both arguments                                     *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    32
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    33
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    34
val prems = goalw Sprod2.thy [monofun]  "monofun(Ispair)";
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    35
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    36
by (rtac (less_fun RS iffD2) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    37
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    38
by (res_inst_tac [("Q","xa=UU")] (excluded_middle RS disjE) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    39
by (res_inst_tac [("Q","x=UU")] (excluded_middle RS disjE) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    40
by (ftac notUU_I 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    41
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    42
by (REPEAT(asm_simp_tac(Sprod0_ss addsimps[inst_sprod_po,refl_less,minimal]) 1));
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    43
qed "monofun_Ispair1";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    44
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    45
val prems = goalw Sprod2.thy [monofun]  "monofun(Ispair(x))";
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    46
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    47
by (res_inst_tac [("Q","x=UU")] (excluded_middle RS disjE) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    48
by (res_inst_tac [("Q","xa=UU")] (excluded_middle RS disjE) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    49
by (ftac notUU_I 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    50
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    51
by (REPEAT(asm_simp_tac(Sprod0_ss addsimps[inst_sprod_po,refl_less,minimal]) 1));
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    52
qed "monofun_Ispair2";      
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2033
diff changeset
    53
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    54
Goal "[|x1<<x2; y1<<y2|] ==> Ispair x1 y1 << Ispair x2 y2";
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    55
by (rtac trans_less 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    56
by (rtac (monofun_Ispair1 RS monofunE RS spec RS spec RS mp RS 
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    57
        (less_fun RS iffD1 RS spec)) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    58
by (rtac (monofun_Ispair2 RS monofunE RS spec RS spec RS mp) 2);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    59
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    60
by (atac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    61
qed "monofun_Ispair";
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
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    64
(* Isfst and Issnd are monotone                                             *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    65
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    66
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    67
val prems = goalw Sprod2.thy [monofun]  "monofun(Isfst)";
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    68
by (simp_tac (HOL_ss addsimps [inst_sprod_po]) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    69
qed "monofun_Isfst";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    70
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    71
val prems = goalw Sprod2.thy [monofun]  "monofun(Issnd)";
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    72
by (simp_tac (HOL_ss addsimps [inst_sprod_po]) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    73
qed "monofun_Issnd";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    74
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
(* the type 'a ** 'b is a cpo                                               *)
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
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    79
val prems = goal Sprod2.thy 
4721
c8a8482a8124 renamed is_chain to chain, is_tord to tord, replaced chain_finite by chfin
oheimb
parents: 4031
diff changeset
    80
"[|chain(S)|] ==> range(S) <<| \
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    81
\ Ispair (lub(range(%i. Isfst(S i)))) (lub(range(%i. Issnd(S i))))";
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    82
by (cut_facts_tac prems 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    83
by (rtac (conjI RS is_lubI) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    84
by (rtac (allI RS ub_rangeI) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    85
by (res_inst_tac [("t","S(i)")] (surjective_pairing_Sprod RS ssubst) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    86
by (rtac monofun_Ispair 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    87
by (rtac is_ub_thelub 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    88
by (etac (monofun_Isfst RS ch2ch_monofun) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    89
by (rtac is_ub_thelub 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    90
by (etac (monofun_Issnd RS ch2ch_monofun) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    91
by (strip_tac 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    92
by (res_inst_tac [("t","u")] (surjective_pairing_Sprod RS ssubst) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    93
by (rtac monofun_Ispair 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    94
by (rtac is_lub_thelub 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    95
by (etac (monofun_Isfst RS ch2ch_monofun) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    96
by (etac (monofun_Isfst RS ub2ub_monofun) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    97
by (rtac is_lub_thelub 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    98
by (etac (monofun_Issnd RS ch2ch_monofun) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
    99
by (etac (monofun_Issnd RS ub2ub_monofun) 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
   100
qed "lub_sprod";
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   101
1779
1155c06fa956 introduced forgotten bind_thm calls
oheimb
parents: 1461
diff changeset
   102
bind_thm ("thelub_sprod", lub_sprod RS thelubI);
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 892
diff changeset
   103
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   104
9245
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
   105
val prems = goal Sprod2.thy 
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
   106
        "chain(S::nat=>'a**'b)==>? x. range(S)<<| x";
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
   107
by (cut_facts_tac prems 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
   108
by (rtac exI 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
   109
by (etac lub_sprod 1);
428385c4bc50 removed most batch-style proofs
paulson
parents: 7499
diff changeset
   110
qed "cpo_sprod";