src/HOLCF/Lift3.ML
author mueller
Tue, 20 May 1997 16:02:36 +0200
changeset 3250 9328e9ebe325
parent 3041 bdd21deed6ea
child 3324 6b26b886ff69
permissions -rw-r--r--
deleted duplicate rewrite rules of lift.simps
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2357
dd2e5e655fd2 Headers added
sandnerr
parents: 2356
diff changeset
     1
(*  Title:      HOLCF/Lift3.ML
dd2e5e655fd2 Headers added
sandnerr
parents: 2356
diff changeset
     2
    ID:         $Id$
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
     3
    Author:     Olaf Mueller
2357
dd2e5e655fd2 Headers added
sandnerr
parents: 2356
diff changeset
     4
    Copyright   1996 Technische Universitaet Muenchen
dd2e5e655fd2 Headers added
sandnerr
parents: 2356
diff changeset
     5
dd2e5e655fd2 Headers added
sandnerr
parents: 2356
diff changeset
     6
Theorems for Lift3.thy
dd2e5e655fd2 Headers added
sandnerr
parents: 2356
diff changeset
     7
*)
dd2e5e655fd2 Headers added
sandnerr
parents: 2356
diff changeset
     8
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
     9
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
    10
(* for compatibility with old HOLCF-Version *)
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
    11
qed_goal "inst_lift_pcpo" thy "UU = Undef"
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
    12
 (fn prems => 
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
    13
        [
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
    14
        (simp_tac (HOL_ss addsimps [UU_def,UU_lift_def]) 1)
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
    15
        ]);
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
    16
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    17
(* ----------------------------------------------------------- *)
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    18
(*           In lift.simps Undef is replaced by UU             *)
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    19
(*           Undef should be invisible from now on             *)
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    20
(* ----------------------------------------------------------- *)
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    21
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    22
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    23
Addsimps [inst_lift_pcpo];
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    24
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    25
local
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    26
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    27
val case1' = prove_goal thy "lift_case f1 f2 UU = f1"
3041
bdd21deed6ea expandshort
mueller
parents: 3035
diff changeset
    28
             (fn _ => [simp_tac (!simpset addsimps lift.simps) 1]);
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    29
val case2' = prove_goal thy "lift_case f1 f2 (Def a) = f2 a"
3041
bdd21deed6ea expandshort
mueller
parents: 3035
diff changeset
    30
             (fn _ => [Simp_tac 1]);
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    31
val distinct1' = prove_goal thy "UU ~= Def a" 
3041
bdd21deed6ea expandshort
mueller
parents: 3035
diff changeset
    32
                 (fn _ => [Simp_tac 1]);
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    33
val distinct2' = prove_goal thy "Def a ~= UU"
3041
bdd21deed6ea expandshort
mueller
parents: 3035
diff changeset
    34
                 (fn _ => [Simp_tac 1]);
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    35
val inject' = prove_goal thy "Def a = Def aa = (a = aa)"
3041
bdd21deed6ea expandshort
mueller
parents: 3035
diff changeset
    36
               (fn _ => [Simp_tac 1]);
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    37
val rec1' = prove_goal thy "lift_rec f1 f2 UU = f1"
3041
bdd21deed6ea expandshort
mueller
parents: 3035
diff changeset
    38
            (fn _ => [Simp_tac 1]);
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    39
val rec2' = prove_goal thy "lift_rec f1 f2 (Def a) = f2 a"
3041
bdd21deed6ea expandshort
mueller
parents: 3035
diff changeset
    40
            (fn _ => [Simp_tac 1]);
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    41
val induct' = prove_goal thy "[| P UU; !a. P (Def a) |] ==> P lift"
3041
bdd21deed6ea expandshort
mueller
parents: 3035
diff changeset
    42
            (fn prems => [cut_facts_tac prems 1, Asm_full_simp_tac 1,
bdd21deed6ea expandshort
mueller
parents: 3035
diff changeset
    43
                      etac Lift1.lift.induct 1,fast_tac HOL_cs 1]);
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    44
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    45
in 
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    46
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    47
val Def_not_UU = distinct2';
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    48
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    49
structure lift =
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    50
struct
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    51
val cases = [case1',case2'];
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    52
val distinct = [distinct1',distinct2'];
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    53
val inject = [inject'];
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    54
val induct = allI RSN(2,induct');
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    55
val recs = [rec1',rec2'];
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    56
val simps = cases@distinct@inject@recs;
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    57
fun induct_tac (s:string) (i:int) = 
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    58
    (res_inst_tac [("lift",s)] induct i);
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    59
end;
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    60
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    61
end; (* local *)
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    62
3250
9328e9ebe325 deleted duplicate rewrite rules of lift.simps
mueller
parents: 3041
diff changeset
    63
Delsimps Lift1.lift.simps;
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    64
Delsimps [inst_lift_pcpo];
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    65
Addsimps [inst_lift_pcpo RS sym];
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    66
Addsimps lift.simps;
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    67
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    68
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    69
(* --------------------------------------------------------*)
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    70
              section"less_lift";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    71
(* --------------------------------------------------------*)
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    72
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    73
goal thy "(x::'a lift) << y = (x=y | x=UU)";
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    74
br (inst_lift_po RS ssubst) 1;
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    75
by (Simp_tac 1);
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    76
qed"less_lift";
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    77
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    78
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    79
(* ---------------------------------------------------------- *)
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    80
                 section"UU and Def";             
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    81
(* ---------------------------------------------------------- *)
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    82
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    83
goal thy "x=UU | (? y.x=Def y)"; 
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    84
by (lift.induct_tac "x" 1);
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    85
by (Asm_simp_tac 1);
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    86
by (rtac disjI2 1);
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    87
by (rtac exI 1);
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    88
by (Asm_simp_tac 1);
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    89
qed"Lift_exhaust";
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    90
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
    91
val prems = goal thy 
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    92
  "[| x = UU ==> P; ? a. x = Def a ==> P |] ==> P";
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    93
by (cut_facts_tac [Lift_exhaust] 1);
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    94
by (fast_tac (HOL_cs addSEs prems) 1);
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    95
qed"Lift_cases";
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
    96
2841
c2508f4ab739 Added "discrete" CPOs and modified IMP to use those rather than "lift"
nipkow
parents: 2648
diff changeset
    97
goal thy
c2508f4ab739 Added "discrete" CPOs and modified IMP to use those rather than "lift"
nipkow
parents: 2648
diff changeset
    98
  "P(lift_case a b x) = ((x=UU --> P a) & (!y. x = Def y --> P(b y)))";
c2508f4ab739 Added "discrete" CPOs and modified IMP to use those rather than "lift"
nipkow
parents: 2648
diff changeset
    99
by(lift.induct_tac "x" 1);
c2508f4ab739 Added "discrete" CPOs and modified IMP to use those rather than "lift"
nipkow
parents: 2648
diff changeset
   100
by(ALLGOALS Asm_simp_tac);
c2508f4ab739 Added "discrete" CPOs and modified IMP to use those rather than "lift"
nipkow
parents: 2648
diff changeset
   101
qed "expand_lift_case";
c2508f4ab739 Added "discrete" CPOs and modified IMP to use those rather than "lift"
nipkow
parents: 2648
diff changeset
   102
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   103
goal thy "(x~=UU)=(? y.x=Def y)";
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   104
br iffI 1;
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   105
br Lift_cases 1;
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   106
by (REPEAT (fast_tac (HOL_cs addSIs lift.distinct) 1));
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   107
qed"not_Undef_is_Def";
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   108
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   109
(* For x~=UU in assumptions def_tac replaces x by (Def a) in conclusion *)
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   110
val def_tac = etac (not_Undef_is_Def RS iffD1 RS exE) THEN' Asm_simp_tac;
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   111
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   112
bind_thm("Undef_eq_UU", inst_lift_pcpo RS sym);
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   113
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   114
val DefE = prove_goal thy "Def x = UU ==> R" 
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   115
    (fn prems => [
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   116
        cut_facts_tac prems 1,
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   117
        asm_full_simp_tac (HOL_ss addsimps [Def_not_UU]) 1]);
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   118
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   119
val prems = goal thy "[| x = Def s; x = UU |] ==> R";
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   120
by (cut_facts_tac prems 1);
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   121
by (fast_tac (HOL_cs addSDs [DefE]) 1);
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   122
qed"DefE2";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   123
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   124
goal thy "Def x << Def y = (x = y)";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   125
by (stac (hd lift.inject RS sym) 1);
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   126
back();
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   127
by (rtac iffI 1);
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   128
by (asm_full_simp_tac (!simpset addsimps [inst_lift_po] ) 1);
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   129
be (antisym_less_inverse RS conjunct1) 1;
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   130
qed"Def_inject_less_eq";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   131
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   132
goal thy "Def x << y = (Def x = y)";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   133
by (simp_tac (!simpset addsimps [less_lift]) 1);
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   134
qed"Def_less_is_eq";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   135
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   136
Addsimps [Def_less_is_eq];
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   137
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   138
(* ---------------------------------------------------------- *)
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   139
              section"Lift is flat";
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   140
(* ---------------------------------------------------------- *)
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   141
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   142
goalw thy [flat_def] "flat (x::'a lift)";
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   143
by (simp_tac (!simpset addsimps [less_lift]) 1);
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   144
qed"flat_lift";
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   145
2640
ee4dfce170a0 Changes of HOLCF from Oscar Slotosch:
slotosch
parents: 2566
diff changeset
   146
bind_thm("ax_flat_lift",flat_lift RS flatE);
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   147
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   148
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   149
(* ---------------------------------------------------------- *)
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   150
    section"Continuity Proofs for flift1, flift2, if";
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   151
(* ---------------------------------------------------------- *)
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   152
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   153
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   154
(* flift1 is continuous in its argument itself*)
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   155
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   156
goal thy "cont (lift_case UU f)"; 
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   157
br flatdom_strict2cont 1;
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   158
br flat_lift 1;
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   159
by (Simp_tac 1);
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   160
qed"cont_flift1_arg";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   161
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   162
(* flift1 is continuous in a variable that occurs only 
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   163
   in the Def branch *)
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   164
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   165
goal thy "!!f. [| !! a.cont (%y. (f y) a) |] ==> \
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   166
\          cont (%y. lift_case UU (f y))";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   167
br cont2cont_CF1L_rev 1;
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   168
by (strip_tac 1);
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   169
by (res_inst_tac [("x","y")] Lift_cases 1);
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   170
by (Asm_simp_tac 1);
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   171
by (fast_tac (HOL_cs addss !simpset) 1);
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   172
qed"cont_flift1_not_arg";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   173
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   174
(* flift1 is continuous in a variable that occurs either 
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   175
   in the Def branch or in the argument *)
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   176
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   177
goal thy "!!f. [| !! a.cont (%y. (f y) a); cont g|] ==> \
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   178
\   cont (%y. lift_case UU (f y) (g y))";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   179
br cont2cont_app 1;
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   180
back();
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   181
by (safe_tac set_cs);
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   182
br cont_flift1_not_arg 1;
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   183
auto();
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   184
br cont_flift1_arg 1;
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   185
qed"cont_flift1_arg_and_not_arg";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   186
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   187
(* flift2 is continuous in its argument itself *)
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   188
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   189
goal thy "cont (lift_case UU (%y. Def (f y)))";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   190
br flatdom_strict2cont 1;
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   191
br flat_lift 1;
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   192
by (Simp_tac 1);
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   193
qed"cont_flift2_arg";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   194
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   195
(* Two specific lemmas for the combination of LCF and HOL terms *)
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   196
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   197
goal thy "!!f.[|cont g; cont f|] ==> cont(%x. ((f x)`(g x)) s)";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   198
br cont2cont_CF1L 1;
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   199
by (REPEAT (resolve_tac cont_lemmas1 1));
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   200
auto();
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   201
qed"cont_fapp_app";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   202
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   203
goal thy "!!f.[|cont g; cont f|] ==> cont(%x. ((f x)`(g x)) s t)";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   204
br cont2cont_CF1L 1;
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   205
be cont_fapp_app 1;
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   206
ba 1;
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   207
qed"cont_fapp_app_app";
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   208
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   209
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   210
(* continuity of if then else *)
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   211
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   212
val prems = goal thy "[| cont f1; cont f2 |] ==> \
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   213
\   cont (%x. if b then f1 x else f2 x)";
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   214
by (cut_facts_tac prems 1);
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   215
by (case_tac "b" 1);
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   216
by (TRYALL (fast_tac (HOL_cs addss HOL_ss)));
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   217
qed"cont_if";
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   218
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   219
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   220
(* ---------------------------------------------------------- *)
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   221
(*    Extension of cont_tac and installation of simplifier    *)
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   222
(* ---------------------------------------------------------- *)
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   223
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   224
bind_thm("cont2cont_CF1L_rev2",allI RS cont2cont_CF1L_rev);
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   225
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   226
val cont_lemmas_ext = [cont_flift1_arg,cont_flift2_arg,
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   227
                       cont_flift1_arg_and_not_arg,cont2cont_CF1L_rev2, 
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   228
                       cont_fapp_app,cont_fapp_app_app,cont_if];
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   229
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   230
val cont_lemmas2 =  cont_lemmas1 @ cont_lemmas_ext;
3041
bdd21deed6ea expandshort
mueller
parents: 3035
diff changeset
   231
                 
bdd21deed6ea expandshort
mueller
parents: 3035
diff changeset
   232
Addsimps cont_lemmas_ext;         
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   233
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   234
fun cont_tac  i = resolve_tac cont_lemmas2 i;
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   235
fun cont_tacR i = REPEAT (cont_tac i);
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   236
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   237
fun cont_tacRs i = simp_tac (!simpset addsimps [flift1_def,flift2_def]) i THEN
3041
bdd21deed6ea expandshort
mueller
parents: 3035
diff changeset
   238
                  REPEAT (cont_tac i);
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   239
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   240
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   241
simpset := !simpset addSolver (K (DEPTH_SOLVE_1 o cont_tac));
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   242
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   243
(* ---------------------------------------------------------- *)
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   244
              section"flift1, flift2";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   245
(* ---------------------------------------------------------- *)
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   246
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   247
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   248
goal thy "flift1 f`(Def x) = (f x)";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   249
by (simp_tac (!simpset addsimps [flift1_def]) 1);
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   250
qed"flift1_Def";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   251
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   252
goal thy "flift2 f`(Def x) = Def (f x)";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   253
by (simp_tac (!simpset addsimps [flift2_def]) 1);
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   254
qed"flift2_Def";
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   255
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   256
goal thy "flift1 f`UU = UU";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   257
by (simp_tac (!simpset addsimps [flift1_def]) 1);
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   258
qed"flift1_UU";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   259
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   260
goal thy "flift2 f`UU = UU";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   261
by (simp_tac (!simpset addsimps [flift2_def]) 1);
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   262
qed"flift2_UU";
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   263
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   264
Addsimps [flift1_Def,flift2_Def,flift1_UU,flift2_UU];
2356
125260ef480c Theories Lift1, Lift2 and Lift3 inserted below HOLCF.thy
sandnerr
parents:
diff changeset
   265
3035
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   266
goal thy "!!x. x~=UU ==> (flift2 f)`x~=UU";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   267
by (def_tac 1);
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   268
qed"flift2_nUU";
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   269
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   270
Addsimps [flift2_nUU];
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   271
5230c37ad29f Complete Redesign of Theory, main points are:
mueller
parents: 2841
diff changeset
   272