src/HOLCF/Up1.ML
author oheimb
Fri, 29 Nov 1996 12:22:22 +0100
changeset 2278 d63ffafce255
child 2640 ee4dfce170a0
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2278
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
     1
(*  Title:      HOLCF/Up1.ML
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
     2
    ID:         $Id$
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
     3
    Author:     Franz Regensburger
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
     4
    Copyright   1993  Technische Universitaet Muenchen
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
     5
*)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
     6
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
     7
open Up1;
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
     8
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
     9
qed_goalw "Exh_Up" Up1.thy [UU_up_def,Iup_def ]
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    10
        "z = UU_up | (? x. z = Iup(x))"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    11
 (fn prems =>
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    12
        [
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    13
        (rtac (Rep_Up_inverse RS subst) 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    14
        (res_inst_tac [("s","Rep_Up(z)")] sumE 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    15
        (rtac disjI1 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    16
        (res_inst_tac [("f","Abs_Up")] arg_cong 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    17
        (rtac (unique_void2 RS subst) 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    18
        (atac 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    19
        (rtac disjI2 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    20
        (rtac exI 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    21
        (res_inst_tac [("f","Abs_Up")] arg_cong 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    22
        (atac 1)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    23
        ]);
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    24
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    25
qed_goal "inj_Abs_Up" Up1.thy "inj(Abs_Up)"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    26
 (fn prems =>
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    27
        [
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    28
        (rtac inj_inverseI 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    29
        (rtac Abs_Up_inverse 1)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    30
        ]);
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    31
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    32
qed_goal "inj_Rep_Up" Up1.thy "inj(Rep_Up)"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    33
 (fn prems =>
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    34
        [
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    35
        (rtac inj_inverseI 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    36
        (rtac Rep_Up_inverse 1)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    37
        ]);
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    38
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    39
qed_goalw "inject_Iup" Up1.thy [Iup_def] "Iup(x)=Iup(y) ==> x=y"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    40
 (fn prems =>
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    41
        [
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    42
        (cut_facts_tac prems 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    43
        (rtac (inj_Inr RS injD) 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    44
        (rtac (inj_Abs_Up RS injD) 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    45
        (atac 1)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    46
        ]);
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    47
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    48
qed_goalw "defined_Iup" Up1.thy [Iup_def,UU_up_def] "Iup(x)~=UU_up"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    49
 (fn prems =>
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    50
        [
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    51
        (rtac notI 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    52
        (rtac notE 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    53
        (rtac Inl_not_Inr 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    54
        (rtac sym 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    55
        (etac (inj_Abs_Up RS  injD) 1)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    56
        ]);
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    57
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    58
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    59
qed_goal "upE"  Up1.thy
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    60
        "[| p=UU_up ==> Q; !!x. p=Iup(x)==>Q|] ==>Q"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    61
 (fn prems =>
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    62
        [
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    63
        (rtac (Exh_Up RS disjE) 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    64
        (eresolve_tac prems 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    65
        (etac exE 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    66
        (eresolve_tac prems 1)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    67
        ]);
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    68
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    69
qed_goalw "Ifup1"  Up1.thy [Ifup_def,UU_up_def]
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    70
        "Ifup(f)(UU_up)=UU"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    71
 (fn prems =>
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    72
        [
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    73
        (stac Abs_Up_inverse 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    74
        (stac sum_case_Inl 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    75
        (rtac refl 1)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    76
        ]);
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    77
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    78
qed_goalw "Ifup2"  Up1.thy [Ifup_def,Iup_def]
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    79
        "Ifup(f)(Iup(x))=f`x"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    80
 (fn prems =>
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    81
        [
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    82
        (stac Abs_Up_inverse 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    83
        (stac sum_case_Inr 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    84
        (rtac refl 1)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    85
        ]);
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    86
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    87
val Up0_ss = (simpset_of "Cfun3") addsimps [Ifup1,Ifup2];
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    88
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    89
qed_goalw "less_up1a"  Up1.thy [less_up_def,UU_up_def]
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    90
        "less_up(UU_up)(z)"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    91
 (fn prems =>
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    92
        [
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    93
        (stac Abs_Up_inverse 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    94
        (stac sum_case_Inl 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    95
        (rtac TrueI 1)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    96
        ]);
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    97
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    98
qed_goalw "less_up1b"  Up1.thy [Iup_def,less_up_def,UU_up_def]
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
    99
        "~less_up (Iup x) UU_up"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   100
 (fn prems =>
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   101
        [
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   102
        (rtac notI 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   103
        (rtac iffD1 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   104
        (atac 2),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   105
        (stac Abs_Up_inverse 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   106
        (stac Abs_Up_inverse 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   107
        (stac sum_case_Inr 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   108
        (stac sum_case_Inl 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   109
        (rtac refl 1)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   110
        ]);
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   111
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   112
qed_goalw "less_up1c"  Up1.thy [Iup_def,less_up_def,UU_up_def]
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   113
        "less_up (Iup x) (Iup y)=(x<<y)"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   114
 (fn prems =>
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   115
        [
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   116
        (stac Abs_Up_inverse 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   117
        (stac Abs_Up_inverse 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   118
        (stac sum_case_Inr 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   119
        (stac sum_case_Inr 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   120
        (rtac refl 1)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   121
        ]);
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   122
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   123
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   124
qed_goal "refl_less_up"  Up1.thy "less_up p p"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   125
 (fn prems =>
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   126
        [
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   127
        (res_inst_tac [("p","p")] upE 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   128
        (hyp_subst_tac 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   129
        (rtac less_up1a 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   130
        (hyp_subst_tac 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   131
        (rtac (less_up1c RS iffD2) 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   132
        (rtac refl_less 1)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   133
        ]);
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   134
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   135
qed_goal "antisym_less_up"  Up1.thy 
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   136
        "!!p1. [|less_up p1 p2;less_up p2 p1|] ==> p1=p2"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   137
 (fn _ =>
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   138
        [
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   139
        (res_inst_tac [("p","p1")] upE 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   140
        (hyp_subst_tac 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   141
        (res_inst_tac [("p","p2")] upE 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   142
        (etac sym 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   143
        (hyp_subst_tac 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   144
        (res_inst_tac [("P","less_up (Iup x) UU_up")] notE 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   145
        (rtac less_up1b 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   146
        (atac 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   147
        (hyp_subst_tac 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   148
        (res_inst_tac [("p","p2")] upE 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   149
        (hyp_subst_tac 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   150
        (res_inst_tac [("P","less_up (Iup x) UU_up")] notE 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   151
        (rtac less_up1b 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   152
        (atac 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   153
        (hyp_subst_tac 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   154
        (rtac arg_cong 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   155
        (rtac antisym_less 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   156
        (etac (less_up1c RS iffD1) 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   157
        (etac (less_up1c RS iffD1) 1)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   158
        ]);
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   159
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   160
qed_goal "trans_less_up"  Up1.thy 
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   161
        "[|less_up p1 p2;less_up p2 p3|] ==> less_up p1 p3"
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   162
 (fn prems =>
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   163
        [
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   164
        (cut_facts_tac prems 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   165
        (res_inst_tac [("p","p1")] upE 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   166
        (hyp_subst_tac 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   167
        (rtac less_up1a 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   168
        (hyp_subst_tac 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   169
        (res_inst_tac [("p","p2")] upE 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   170
        (hyp_subst_tac 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   171
        (rtac notE 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   172
        (rtac less_up1b 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   173
        (atac 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   174
        (hyp_subst_tac 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   175
        (res_inst_tac [("p","p3")] upE 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   176
        (hyp_subst_tac 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   177
        (rtac notE 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   178
        (rtac less_up1b 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   179
        (atac 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   180
        (hyp_subst_tac 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   181
        (rtac (less_up1c RS iffD2) 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   182
        (rtac trans_less 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   183
        (etac (less_up1c RS iffD1) 1),
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   184
        (etac (less_up1c RS iffD1) 1)
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   185
        ]);
d63ffafce255 *** empty log message ***
oheimb
parents:
diff changeset
   186