src/HOLCF/Cfun3.ML
author paulson
Fri, 18 Feb 2000 15:35:29 +0100
changeset 8255 38f96394c099
parent 5291 5706f0ef1d43
child 8820 a1297de19ec7
permissions -rw-r--r--
new distributive laws
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
     1
(*  Title:      HOLCF/cfun3.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: 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
    Copyright   1993 Technische Universitaet Muenchen
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     5
*)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     6
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
     7
open Cfun3;
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: 2566
diff changeset
     9
(* for compatibility with old HOLCF-Version *)
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
    10
qed_goal "inst_cfun_pcpo" thy "UU = Abs_CFun(%x. UU)"
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
    11
 (fn prems => 
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
    12
        [
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
    13
        (simp_tac (HOL_ss addsimps [UU_def,UU_cfun_def]) 1)
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
    14
        ]);
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
    15
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    16
(* ------------------------------------------------------------------------ *)
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
    17
(* the contlub property for Rep_CFun its 'first' argument                       *)
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
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
    20
qed_goal "contlub_Rep_CFun1" thy "contlub(Rep_CFun)"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    21
(fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    22
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    23
        (rtac contlubI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    24
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    25
        (rtac (expand_fun_eq RS iffD2) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    26
        (strip_tac 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
    27
        (stac thelub_cfun 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    28
        (atac 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
    29
        (stac Cfunapp2 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    30
        (etac cont_lubcfun 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
    31
        (stac thelub_fun 1),
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
    32
        (etac (monofun_Rep_CFun1 RS ch2ch_monofun) 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    33
        (rtac refl 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    34
        ]);
243
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
(* ------------------------------------------------------------------------ *)
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
    38
(* the cont property for Rep_CFun in its first argument                        *)
243
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
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
    41
qed_goal "cont_Rep_CFun1" thy "cont(Rep_CFun)"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    42
(fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    43
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    44
        (rtac monocontlub2cont 1),
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
    45
        (rtac monofun_Rep_CFun1 1),
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
    46
        (rtac contlub_Rep_CFun1 1)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    47
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    48
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    49
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    50
(* ------------------------------------------------------------------------ *)
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
    51
(* contlub, cont properties of Rep_CFun in its first argument in mixfix _[_]   *)
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    52
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    53
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
    54
qed_goal "contlub_cfun_fun" thy 
4721
c8a8482a8124 renamed is_chain to chain, is_tord to tord, replaced chain_finite by chfin
oheimb
parents: 4423
diff changeset
    55
"chain(FY) ==>\
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3327
diff changeset
    56
\ lub(range FY)`x = lub(range (%i. FY(i)`x))"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    57
(fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    58
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    59
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    60
        (rtac trans 1),
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
    61
        (etac (contlub_Rep_CFun1 RS contlubE RS spec RS mp RS fun_cong) 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
    62
        (stac thelub_fun 1),
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
    63
        (etac (monofun_Rep_CFun1 RS ch2ch_monofun) 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    64
        (rtac refl 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    65
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    66
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    67
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
    68
qed_goal "cont_cfun_fun" thy 
4721
c8a8482a8124 renamed is_chain to chain, is_tord to tord, replaced chain_finite by chfin
oheimb
parents: 4423
diff changeset
    69
"chain(FY) ==>\
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3327
diff changeset
    70
\ range(%i. FY(i)`x) <<| lub(range FY)`x"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    71
(fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    72
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    73
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    74
        (rtac thelubE 1),
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
    75
        (etac ch2ch_Rep_CFunL 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    76
        (etac (contlub_cfun_fun RS sym) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    77
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    78
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
(* ------------------------------------------------------------------------ *)
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
    81
(* contlub, cont  properties of Rep_CFun in both argument in mixfix _[_]       *)
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    82
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    83
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
    84
qed_goal "contlub_cfun" thy 
4721
c8a8482a8124 renamed is_chain to chain, is_tord to tord, replaced chain_finite by chfin
oheimb
parents: 4423
diff changeset
    85
"[|chain(FY);chain(TY)|] ==>\
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3327
diff changeset
    86
\ (lub(range FY))`(lub(range TY)) = lub(range(%i. FY(i)`(TY i)))"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    87
(fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    88
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    89
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    90
        (rtac contlub_CF2 1),
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
    91
        (rtac cont_Rep_CFun1 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    92
        (rtac allI 1),
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
    93
        (rtac cont_Rep_CFun2 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    94
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    95
        (atac 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
    96
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
    97
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
    98
qed_goal "cont_cfun" thy 
4721
c8a8482a8124 renamed is_chain to chain, is_tord to tord, replaced chain_finite by chfin
oheimb
parents: 4423
diff changeset
    99
"[|chain(FY);chain(TY)|] ==>\
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 961
diff changeset
   100
\ range(%i.(FY i)`(TY i)) <<| (lub (range FY))`(lub(range TY))"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   101
(fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   102
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   103
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   104
        (rtac thelubE 1),
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
   105
        (rtac (monofun_Rep_CFun1 RS ch2ch_MF2LR) 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   106
        (rtac allI 1),
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
   107
        (rtac monofun_Rep_CFun2 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   108
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   109
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   110
        (etac (contlub_cfun RS sym) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   111
        (atac 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   112
        ]);
243
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
(* ------------------------------------------------------------------------ *)
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
   116
(* cont2cont lemma for Rep_CFun                                               *)
243
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
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
   119
qed_goal "cont2cont_Rep_CFun" thy 
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3327
diff changeset
   120
        "[|cont(%x. ft x);cont(%x. tt x)|] ==> cont(%x. (ft x)`(tt x))"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   121
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   122
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   123
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   124
        (rtac cont2cont_app2 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   125
        (rtac cont2cont_app2 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   126
        (rtac cont_const 1),
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
   127
        (rtac cont_Rep_CFun1 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   128
        (atac 1),
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
   129
        (rtac cont_Rep_CFun2 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   130
        (atac 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   131
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   132
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   133
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   134
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   135
(* ------------------------------------------------------------------------ *)
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 961
diff changeset
   136
(* cont2mono Lemma for %x. LAM y. c1(x)(y)                                  *)
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   137
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   138
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
   139
qed_goal "cont2mono_LAM" thy 
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3327
diff changeset
   140
 "[| !!x. cont(c1 x); !!y. monofun(%x. c1 x y)|] ==> monofun(%x. LAM y. c1 x y)"
2842
143ebf752e78 Cleaned up a little.
nipkow
parents: 2841
diff changeset
   141
(fn [p1,p2] =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   142
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   143
        (rtac monofunI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   144
        (strip_tac 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   145
        (stac less_cfun 1),
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   146
        (stac less_fun 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   147
        (rtac allI 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   148
        (stac beta_cfun 1),
2842
143ebf752e78 Cleaned up a little.
nipkow
parents: 2841
diff changeset
   149
	(rtac p1 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   150
        (stac beta_cfun 1),
2842
143ebf752e78 Cleaned up a little.
nipkow
parents: 2841
diff changeset
   151
	(rtac p1 1),
143ebf752e78 Cleaned up a little.
nipkow
parents: 2841
diff changeset
   152
        (etac (p2 RS monofunE RS spec RS spec RS mp) 1)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   153
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   154
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   155
(* ------------------------------------------------------------------------ *)
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 961
diff changeset
   156
(* cont2cont Lemma for %x. LAM y. c1 x y)                                 *)
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   157
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   158
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
   159
qed_goal "cont2cont_LAM" thy 
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3327
diff changeset
   160
 "[| !!x. cont(c1 x); !!y. cont(%x. c1 x y) |] ==> cont(%x. LAM y. c1 x y)"
2842
143ebf752e78 Cleaned up a little.
nipkow
parents: 2841
diff changeset
   161
(fn [p1,p2] =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   162
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   163
        (rtac monocontlub2cont 1),
2842
143ebf752e78 Cleaned up a little.
nipkow
parents: 2841
diff changeset
   164
        (rtac (p1 RS cont2mono_LAM) 1),
143ebf752e78 Cleaned up a little.
nipkow
parents: 2841
diff changeset
   165
        (rtac (p2 RS cont2mono) 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   166
        (rtac contlubI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   167
        (strip_tac 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   168
        (stac thelub_cfun 1),
2842
143ebf752e78 Cleaned up a little.
nipkow
parents: 2841
diff changeset
   169
        (rtac (p1 RS cont2mono_LAM RS ch2ch_monofun) 1),
143ebf752e78 Cleaned up a little.
nipkow
parents: 2841
diff changeset
   170
        (rtac (p2 RS cont2mono) 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   171
        (atac 1),
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
   172
        (res_inst_tac [("f","Abs_CFun")] arg_cong 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   173
        (rtac ext 1),
2842
143ebf752e78 Cleaned up a little.
nipkow
parents: 2841
diff changeset
   174
        (stac (p1 RS beta_cfun RS ext) 1),
143ebf752e78 Cleaned up a little.
nipkow
parents: 2841
diff changeset
   175
        (etac (p2 RS cont2contlub RS contlubE RS spec RS mp) 1)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   176
        ]);
243
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
(* ------------------------------------------------------------------------ *)
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 961
diff changeset
   179
(* cont2cont tactic                                                       *)
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
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
   182
val cont_lemmas1 = [cont_const, cont_id, cont_Rep_CFun2,
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
   183
                    cont2cont_Rep_CFun,cont2cont_LAM];
2566
cbf02fc74332 changed handling of cont_lemmas and adm_lemmas
oheimb
parents: 2033
diff changeset
   184
cbf02fc74332 changed handling of cont_lemmas and adm_lemmas
oheimb
parents: 2033
diff changeset
   185
Addsimps cont_lemmas1;
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   186
4004
773f3c061777 corrected two comments
oheimb
parents: 3842
diff changeset
   187
(* HINT: cont_tac is now installed in simplifier in Lift.ML ! *)
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   188
2566
cbf02fc74332 changed handling of cont_lemmas and adm_lemmas
oheimb
parents: 2033
diff changeset
   189
(*val cont_tac = (fn i => (resolve_tac cont_lemmas i));*)
cbf02fc74332 changed handling of cont_lemmas and adm_lemmas
oheimb
parents: 2033
diff changeset
   190
(*val cont_tacR = (fn i => (REPEAT (cont_tac i)));*)
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   191
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   192
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   193
(* function application _[_]  is strict in its first arguments              *)
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
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
   196
qed_goal "strict_Rep_CFun1" thy "(UU::'a::cpo->'b)`x = (UU::'b)"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   197
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   198
        [
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   199
        (stac inst_cfun_pcpo 1),
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   200
        (stac beta_cfun 1),
2566
cbf02fc74332 changed handling of cont_lemmas and adm_lemmas
oheimb
parents: 2033
diff changeset
   201
        (Simp_tac 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   202
        (rtac refl 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   203
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   204
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   205
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   206
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   207
(* results about strictify                                                  *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   208
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   209
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
   210
qed_goalw "Istrictify1" thy [Istrictify_def]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   211
        "Istrictify(f)(UU)= (UU)"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   212
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   213
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   214
        (Simp_tac 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   215
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   216
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
   217
qed_goalw "Istrictify2" thy [Istrictify_def]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   218
        "~x=UU ==> Istrictify(f)(x)=f`x"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   219
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   220
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   221
        (cut_facts_tac prems 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   222
        (Asm_simp_tac 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   223
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   224
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
   225
qed_goal "monofun_Istrictify1" thy "monofun(Istrictify)"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   226
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   227
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   228
        (rtac monofunI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   229
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   230
        (rtac (less_fun RS iffD2) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   231
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   232
        (res_inst_tac [("Q","xa=UU")] (excluded_middle RS disjE) 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   233
        (stac Istrictify2 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   234
        (atac 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   235
        (stac Istrictify2 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   236
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   237
        (rtac monofun_cfun_fun 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   238
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   239
        (hyp_subst_tac 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   240
        (stac Istrictify1 1),
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   241
        (stac Istrictify1 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   242
        (rtac refl_less 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   243
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   244
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
   245
qed_goal "monofun_Istrictify2" thy "monofun(Istrictify(f))"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   246
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   247
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   248
        (rtac monofunI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   249
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   250
        (res_inst_tac [("Q","x=UU")] (excluded_middle RS disjE) 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   251
        (stac Istrictify2 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   252
        (etac notUU_I 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   253
        (atac 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   254
        (stac Istrictify2 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   255
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   256
        (rtac monofun_cfun_arg 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   257
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   258
        (hyp_subst_tac 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   259
        (stac Istrictify1 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   260
        (rtac minimal 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   261
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   262
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   263
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
   264
qed_goal "contlub_Istrictify1" thy "contlub(Istrictify)"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   265
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   266
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   267
        (rtac contlubI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   268
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   269
        (rtac (expand_fun_eq RS iffD2) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   270
        (strip_tac 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   271
        (stac thelub_fun 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   272
        (etac (monofun_Istrictify1 RS ch2ch_monofun) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   273
        (res_inst_tac [("Q","x=UU")] (excluded_middle RS disjE) 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   274
        (stac Istrictify2 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   275
        (atac 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   276
        (stac (Istrictify2 RS ext) 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   277
        (atac 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   278
        (stac thelub_cfun 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   279
        (atac 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   280
        (stac beta_cfun 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   281
        (rtac cont_lubcfun 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   282
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   283
        (rtac refl 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   284
        (hyp_subst_tac 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   285
        (stac Istrictify1 1),
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   286
        (stac (Istrictify1 RS ext) 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   287
        (rtac (chain_UU_I_inverse RS sym) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   288
        (rtac (refl RS allI) 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   289
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   290
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
   291
qed_goal "contlub_Istrictify2" thy "contlub(Istrictify(f::'a -> 'b))"
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   292
 (fn prems =>
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   293
        [
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   294
        (rtac contlubI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   295
        (strip_tac 1),
1675
36ba4da350c3 adapted several proofs
oheimb
parents: 1461
diff changeset
   296
        (case_tac "lub(range(Y))=(UU::'a)" 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   297
        (res_inst_tac [("t","lub(range(Y))")] subst 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   298
        (rtac sym 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   299
        (atac 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   300
        (stac Istrictify1 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   301
        (rtac sym 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   302
        (rtac chain_UU_I_inverse 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   303
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   304
        (res_inst_tac [("t","Y(i)"),("s","UU::'a")] subst 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   305
        (rtac sym 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   306
        (rtac (chain_UU_I RS spec) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   307
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   308
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   309
        (rtac Istrictify1 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   310
        (stac Istrictify2 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   311
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   312
        (res_inst_tac [("s","lub(range(%i. f`(Y i)))")] trans 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   313
        (rtac contlub_cfun_arg 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   314
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   315
        (rtac lub_equal2 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   316
        (rtac (chain_mono2 RS exE) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   317
        (atac 2),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   318
        (rtac chain_UU_I_inverse2 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   319
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   320
        (rtac exI 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   321
        (strip_tac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   322
        (rtac (Istrictify2 RS sym) 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   323
        (fast_tac HOL_cs 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   324
        (rtac ch2ch_monofun 1),
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
   325
        (rtac monofun_Rep_CFun2 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   326
        (atac 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   327
        (rtac ch2ch_monofun 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   328
        (rtac monofun_Istrictify2 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   329
        (atac 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   330
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   331
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   332
1779
1155c06fa956 introduced forgotten bind_thm calls
oheimb
parents: 1675
diff changeset
   333
bind_thm ("cont_Istrictify1", contlub_Istrictify1 RS 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   334
        (monofun_Istrictify1 RS monocontlub2cont)); 
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   335
1779
1155c06fa956 introduced forgotten bind_thm calls
oheimb
parents: 1675
diff changeset
   336
bind_thm ("cont_Istrictify2", contlub_Istrictify2 RS 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   337
        (monofun_Istrictify2 RS monocontlub2cont)); 
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   338
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   339
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
   340
qed_goalw "strictify1" thy [strictify_def] "strictify`f`UU=UU" (fn _ => [
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   341
        (stac beta_cfun 1),
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4004
diff changeset
   342
         (simp_tac (simpset() addsimps [cont_Istrictify2,cont_Istrictify1,
2566
cbf02fc74332 changed handling of cont_lemmas and adm_lemmas
oheimb
parents: 2033
diff changeset
   343
					cont2cont_CF1L]) 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   344
        (stac beta_cfun 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   345
        (rtac cont_Istrictify2 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   346
        (rtac Istrictify1 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   347
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   348
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
   349
qed_goalw "strictify2" thy [strictify_def]
2566
cbf02fc74332 changed handling of cont_lemmas and adm_lemmas
oheimb
parents: 2033
diff changeset
   350
        "~x=UU ==> strictify`f`x=f`x"  (fn prems => [
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   351
        (stac beta_cfun 1),
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4004
diff changeset
   352
         (simp_tac (simpset() addsimps [cont_Istrictify2,cont_Istrictify1,
2566
cbf02fc74332 changed handling of cont_lemmas and adm_lemmas
oheimb
parents: 2033
diff changeset
   353
					cont2cont_CF1L]) 1),
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1870
diff changeset
   354
        (stac beta_cfun 1),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   355
        (rtac cont_Istrictify2 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   356
        (rtac Istrictify2 1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   357
        (resolve_tac prems 1)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1267
diff changeset
   358
        ]);
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   359
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   360
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   361
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   362
(* Instantiate the simplifier                                               *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   363
(* ------------------------------------------------------------------------ *)
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   364
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
   365
Addsimps [minimal,refl_less,beta_cfun,strict_Rep_CFun1,strictify1, strictify2];
1267
bca91b4e1710 added local simpsets
clasohm
parents: 1168
diff changeset
   366
243
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   367
c22b85994e17 Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff changeset
   368
(* ------------------------------------------------------------------------ *)
1168
74be52691d62 The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents: 961
diff changeset
   369
(* use cont_tac as autotac.                                                *)
243
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
4004
773f3c061777 corrected two comments
oheimb
parents: 3842
diff changeset
   372
(* HINT: cont_tac is now installed in simplifier in Lift.ML ! *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4004
diff changeset
   373
(*simpset_ref() := simpset() addsolver (K (DEPTH_SOLVE_1 o cont_tac));*)
3326
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   374
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   375
(* ------------------------------------------------------------------------ *)
4721
c8a8482a8124 renamed is_chain to chain, is_tord to tord, replaced chain_finite by chfin
oheimb
parents: 4423
diff changeset
   376
(* some lemmata for functions with flat/chfin domain/range types	    *)
3326
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   377
(* ------------------------------------------------------------------------ *)
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   378
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
   379
qed_goal "chfin_Rep_CFunR" thy 
4721
c8a8482a8124 renamed is_chain to chain, is_tord to tord, replaced chain_finite by chfin
oheimb
parents: 4423
diff changeset
   380
    "chain (Y::nat => 'a::cpo->'b::chfin)==> !s. ? n. lub(range(Y))`s = Y n`s" 
3326
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   381
(fn prems => 
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   382
	[
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   383
	cut_facts_tac prems 1,
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   384
	rtac allI 1,
4423
a129b817b58a expandshort;
wenzelm
parents: 4098
diff changeset
   385
	stac contlub_cfun_fun 1,
3326
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   386
	 atac 1,
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
   387
	fast_tac (HOL_cs addSIs [thelubI,chfin,lub_finch2,chfin2finch,ch2ch_Rep_CFunL])1
3326
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   388
	]);
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   389
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   390
(* ------------------------------------------------------------------------ *)
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   391
(* continuous isomorphisms are strict                                       *)
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   392
(* a prove for embedding projection pairs is similar                        *)
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   393
(* ------------------------------------------------------------------------ *)
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   394
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   395
qed_goal "iso_strict"  thy  
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3327
diff changeset
   396
"!!f g.[|!y. f`(g`y)=(y::'b) ; !x. g`(f`x)=(x::'a) |] \
3326
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   397
\ ==> f`UU=UU & g`UU=UU"
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   398
 (fn prems =>
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   399
        [
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   400
        (rtac conjI 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   401
        (rtac UU_I 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   402
        (res_inst_tac [("s","f`(g`(UU::'b))"),("t","UU::'b")] subst 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   403
        (etac spec 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   404
        (rtac (minimal RS monofun_cfun_arg) 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   405
        (rtac UU_I 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   406
        (res_inst_tac [("s","g`(f`(UU::'a))"),("t","UU::'a")] subst 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   407
        (etac spec 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   408
        (rtac (minimal RS monofun_cfun_arg) 1)
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   409
        ]);
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   410
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   411
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   412
qed_goal "isorep_defined" thy 
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3327
diff changeset
   413
        "[|!x. rep`(abs`x)=x;!y. abs`(rep`y)=y; z~=UU|] ==> rep`z ~= UU"
3326
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   414
 (fn prems =>
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   415
        [
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   416
        (cut_facts_tac prems 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   417
        (etac swap 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   418
        (dtac notnotD 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   419
        (dres_inst_tac [("f","abs")] cfun_arg_cong 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   420
        (etac box_equals 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   421
        (fast_tac HOL_cs 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   422
        (etac (iso_strict RS conjunct1) 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   423
        (atac 1)
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   424
        ]);
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   425
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   426
qed_goal "isoabs_defined" thy 
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3327
diff changeset
   427
        "[|!x. rep`(abs`x) = x;!y. abs`(rep`y)=y ; z~=UU|] ==> abs`z ~= UU"
3326
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   428
 (fn prems =>
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   429
        [
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   430
        (cut_facts_tac prems 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   431
        (etac swap 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   432
        (dtac notnotD 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   433
        (dres_inst_tac [("f","rep")] cfun_arg_cong 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   434
        (etac box_equals 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   435
        (fast_tac HOL_cs 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   436
        (etac (iso_strict RS conjunct2) 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   437
        (atac 1)
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   438
        ]);
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   439
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   440
(* ------------------------------------------------------------------------ *)
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   441
(* propagation of flatness and chainfiniteness by continuous isomorphisms   *)
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   442
(* ------------------------------------------------------------------------ *)
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   443
4721
c8a8482a8124 renamed is_chain to chain, is_tord to tord, replaced chain_finite by chfin
oheimb
parents: 4423
diff changeset
   444
qed_goal "chfin2chfin" thy "!!f g.[|! Y::nat=>'a. chain Y --> (? n. max_in_chain n Y); \
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3327
diff changeset
   445
\ !y. f`(g`y)=(y::'b) ; !x. g`(f`x)=(x::'a::chfin) |] \
4721
c8a8482a8124 renamed is_chain to chain, is_tord to tord, replaced chain_finite by chfin
oheimb
parents: 4423
diff changeset
   446
\ ==> ! Y::nat=>'b. chain Y --> (? n. max_in_chain n Y)"
3326
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   447
 (fn prems =>
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   448
        [
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   449
        (rewtac max_in_chain_def),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   450
        (strip_tac 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   451
        (rtac exE 1),
4721
c8a8482a8124 renamed is_chain to chain, is_tord to tord, replaced chain_finite by chfin
oheimb
parents: 4423
diff changeset
   452
        (res_inst_tac [("P","chain(%i. g`(Y i))")] mp 1),
3326
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   453
        (etac spec 1),
5291
5706f0ef1d43 eliminated fabs,fapp.
slotosch
parents: 4721
diff changeset
   454
        (etac ch2ch_Rep_CFunR 1),
3326
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   455
        (rtac exI 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   456
        (strip_tac 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   457
        (res_inst_tac [("s","f`(g`(Y x))"),("t","Y(x)")] subst 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   458
        (etac spec 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   459
        (res_inst_tac [("s","f`(g`(Y j))"),("t","Y(j)")] subst 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   460
        (etac spec 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   461
        (rtac cfun_arg_cong 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   462
        (rtac mp 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   463
        (etac spec 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   464
        (atac 1)
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   465
        ]);
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   466
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   467
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3327
diff changeset
   468
qed_goal "flat2flat" thy "!!f g.[|!x y::'a. x<<y --> x=UU | x=y; \
b55686a7b22c fixed dots;
wenzelm
parents: 3327
diff changeset
   469
\ !y. f`(g`y)=(y::'b); !x. g`(f`x)=(x::'a)|] ==> !x y::'b. x<<y --> x=UU | x=y"
3326
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   470
 (fn prems =>
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   471
        [
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   472
        (strip_tac 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   473
        (rtac disjE 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   474
        (res_inst_tac [("P","g`x<<g`y")] mp 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   475
        (etac monofun_cfun_arg 2),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   476
        (dtac spec 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   477
        (etac spec 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   478
        (rtac disjI1 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   479
        (rtac trans 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   480
        (res_inst_tac [("s","f`(g`x)"),("t","x")] subst 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   481
        (etac spec 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   482
        (etac cfun_arg_cong 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   483
        (rtac (iso_strict RS conjunct1) 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   484
        (atac 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   485
        (atac 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   486
        (rtac disjI2 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   487
        (res_inst_tac [("s","f`(g`x)"),("t","x")] subst 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   488
        (etac spec 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   489
        (res_inst_tac [("s","f`(g`y)"),("t","y")] subst 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   490
        (etac spec 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   491
        (etac cfun_arg_cong 1)
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   492
        ]);
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   493
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   494
(* ------------------------------------------------------------------------- *)
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   495
(* a result about functions with flat codomain                               *)
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   496
(* ------------------------------------------------------------------------- *)
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   497
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   498
qed_goal "flat_codom" thy 
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3327
diff changeset
   499
"f`(x::'a)=(c::'b::flat) ==> f`(UU::'a)=(UU::'b) | (!z. f`(z::'a)=c)"
3326
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   500
 (fn prems =>
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   501
        [
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   502
        (cut_facts_tac prems 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   503
        (case_tac "f`(x::'a)=(UU::'b)" 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   504
        (rtac disjI1 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   505
        (rtac UU_I 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   506
        (res_inst_tac [("s","f`(x)"),("t","UU::'b")] subst 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   507
        (atac 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   508
        (rtac (minimal RS monofun_cfun_arg) 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   509
        (case_tac "f`(UU::'a)=(UU::'b)" 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   510
        (etac disjI1 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   511
        (rtac disjI2 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   512
        (rtac allI 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   513
        (hyp_subst_tac 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   514
        (res_inst_tac [("a","f`(UU::'a)")] (refl RS box_equals) 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   515
        (res_inst_tac [("fo5","f")] ((minimal RS monofun_cfun_arg) RS 
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   516
		(ax_flat RS spec RS spec RS mp) RS disjE) 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   517
	(contr_tac 1),(atac 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   518
        (res_inst_tac [("fo5","f")] ((minimal RS monofun_cfun_arg) RS 
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   519
		(ax_flat RS spec RS spec RS mp) RS disjE) 1),
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   520
	(contr_tac 1),(atac 1)
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   521
]);
930c9bed5a09 Moved the classes flat chfin from Fix to Pcpo.
slotosch
parents: 3031
diff changeset
   522
3327
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   523
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   524
(* ------------------------------------------------------------------------ *)
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   525
(* Access to definitions                                                    *)
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   526
(* ------------------------------------------------------------------------ *)
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   527
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   528
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   529
qed_goalw "ID1" thy [ID_def] "ID`x=x"
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   530
 (fn prems =>
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   531
        [
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   532
        (stac beta_cfun 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   533
        (rtac cont_id 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   534
        (rtac refl 1)
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   535
        ]);
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   536
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3327
diff changeset
   537
qed_goalw "cfcomp1" thy [oo_def] "(f oo g)=(LAM x. f`(g`x))" (fn _ => [
3327
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   538
        (stac beta_cfun 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   539
        (Simp_tac 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   540
        (stac beta_cfun 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   541
        (Simp_tac 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   542
	(rtac refl 1)
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   543
        ]);
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   544
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   545
qed_goal "cfcomp2" thy  "(f oo g)`x=f`(g`x)" (fn _ => [
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   546
        (stac cfcomp1 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   547
        (stac beta_cfun 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   548
        (Simp_tac 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   549
	(rtac refl 1)
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   550
        ]);
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   551
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   552
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   553
(* ------------------------------------------------------------------------ *)
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   554
(* Show that interpretation of (pcpo,_->_) is a category                    *)
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   555
(* The class of objects is interpretation of syntactical class pcpo         *)
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   556
(* The class of arrows  between objects 'a and 'b is interpret. of 'a -> 'b *)
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   557
(* The identity arrow is interpretation of ID                               *)
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   558
(* The composition of f and g is interpretation of oo                       *)
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   559
(* ------------------------------------------------------------------------ *)
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   560
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   561
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   562
qed_goal "ID2" thy "f oo ID = f "
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   563
 (fn prems =>
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   564
        [
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   565
        (rtac ext_cfun 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   566
        (stac cfcomp2 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   567
        (stac ID1 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   568
        (rtac refl 1)
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   569
        ]);
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   570
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   571
qed_goal "ID3" thy "ID oo f = f "
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   572
 (fn prems =>
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   573
        [
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   574
        (rtac ext_cfun 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   575
        (stac cfcomp2 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   576
        (stac ID1 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   577
        (rtac refl 1)
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   578
        ]);
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   579
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   580
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   581
qed_goal "assoc_oo" thy "f oo (g oo h) = (f oo g) oo h"
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   582
 (fn prems =>
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   583
        [
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   584
        (rtac ext_cfun 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   585
        (res_inst_tac [("s","f`(g`(h`x))")] trans  1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   586
        (stac cfcomp2 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   587
        (stac cfcomp2 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   588
        (rtac refl 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   589
        (stac cfcomp2 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   590
        (stac cfcomp2 1),
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   591
        (rtac refl 1)
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   592
        ]);
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   593
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   594
(* ------------------------------------------------------------------------ *)
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   595
(* Merge the different rewrite rules for the simplifier                     *)
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   596
(* ------------------------------------------------------------------------ *)
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   597
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   598
Addsimps ([ID1,ID2,ID3,cfcomp2]);
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   599
9b8e638f8602 Eliminated ccc1. Moved ID,oo into Cfun.
slotosch
parents: 3326
diff changeset
   600