src/HOLCF/ex/Focus_ex.ML
author wenzelm
Wed, 15 Oct 1997 15:12:59 +0200
changeset 3872 a5839ecee7b8
parent 3842 b55686a7b22c
child 4677 c4b07b8579fd
permissions -rw-r--r--
tuned; prepare ext;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     1
open Focus_ex;
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     2
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     3
(* first some logical trading *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     4
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     5
val prems = goal Focus_ex.thy
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     6
"is_g(g) = \ 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     7
\ (? f. is_f(f) &  (!x.(? z. <g`x,z> = f`<x,z> &  \
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     8
\                  (! w y. <y,w> = f`<x,w>  --> z << w))))";
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     9
by (simp_tac (HOL_ss addsimps [is_g,is_net_g]) 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    10
by (fast_tac HOL_cs 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    11
val lemma1 = result();
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    12
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    13
val prems = goal Focus_ex.thy
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    14
"(? f. is_f(f) &  (!x. (? z. <g`x,z> = f`<x,z> &  \
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    15
\                 (!w y. <y,w> = f`<x,w>  --> z << w)))) \
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    16
\ = \ 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    17
\ (? f. is_f(f) &  (!x. ? z.\
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    18
\       g`x = cfst`(f`<x,z>) &  \
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    19
\         z = csnd`(f`<x,z>) &  \
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    20
\       (! w y.  <y,w> = f`<x,w> --> z << w)))";
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    21
by (rtac iffI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    22
by (etac exE 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    23
by (res_inst_tac [("x","f")] exI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    24
by (REPEAT (etac conjE 1));
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    25
by (etac conjI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    26
by (strip_tac 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    27
by (etac allE 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    28
by (etac exE 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    29
by (res_inst_tac [("x","z")] exI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    30
by (REPEAT (etac conjE 1));
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    31
by (rtac conjI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    32
by (rtac conjI 2);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    33
by (atac 3);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    34
by (dtac sym 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    35
by (asm_simp_tac HOLCF_ss 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    36
by (dtac sym 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    37
by (asm_simp_tac HOLCF_ss 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    38
by (etac exE 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    39
by (res_inst_tac [("x","f")] exI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    40
by (REPEAT (etac conjE 1));
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    41
by (etac conjI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    42
by (strip_tac 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    43
by (etac allE 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    44
by (etac exE 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    45
by (res_inst_tac [("x","z")] exI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    46
by (REPEAT (etac conjE 1));
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    47
by (rtac conjI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    48
by (atac 2);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    49
by (rtac trans 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    50
by (rtac (surjective_pairing_Cprod2) 2);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    51
by (etac subst 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    52
by (etac subst 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    53
by (rtac refl 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    54
val lemma2 = result();
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    55
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    56
(* direction def_g(g) --> is_g(g) *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    57
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    58
val prems = goal Focus_ex.thy "def_g(g) --> is_g(g)";
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    59
by (simp_tac (HOL_ss addsimps [def_g,lemma1, lemma2]) 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    60
by (rtac impI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    61
by (etac exE 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    62
by (res_inst_tac [("x","f")] exI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    63
by (REPEAT (etac conjE 1));
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    64
by (etac conjI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    65
by (strip_tac 1);
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3018
diff changeset
    66
by (res_inst_tac [("x","fix`(LAM k. csnd`(f`<x,k>))")] exI 1);
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    67
by (rtac conjI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    68
 by (asm_simp_tac HOLCF_ss 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    69
 by (rtac trans 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    70
  by (rtac surjective_pairing_Cprod2 2);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    71
 by (rtac cfun_arg_cong 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    72
 by (rtac trans 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    73
  by (rtac fix_eq 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    74
 by (Simp_tac 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    75
by (strip_tac 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    76
by (rtac fix_least 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    77
by (Simp_tac 1);
3018
e65b60b28341 Ran expandshort
paulson
parents: 2570
diff changeset
    78
by (etac exE 1);
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    79
by (dtac sym 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    80
back();
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    81
by (asm_simp_tac HOLCF_ss 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    82
val lemma3 = result();
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    83
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    84
(* direction is_g(g) --> def_g(g) *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    85
val prems = goal Focus_ex.thy "is_g(g) --> def_g(g)";
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    86
by (simp_tac (HOL_ss delsimps (ex_simps @ all_simps)
3018
e65b60b28341 Ran expandshort
paulson
parents: 2570
diff changeset
    87
                     addsimps [lemma1,lemma2,def_g]) 1);
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    88
by (rtac impI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    89
by (etac exE 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    90
by (res_inst_tac [("x","f")] exI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    91
by (REPEAT (etac conjE 1));
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    92
by (etac conjI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    93
by (rtac ext_cfun 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    94
by (eres_inst_tac [("x","x")] allE 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    95
by (etac exE 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    96
by (REPEAT (etac conjE 1));
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    97
by (subgoal_tac "fix`(LAM k. csnd`(f`<x, k>)) = z" 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    98
 by (asm_simp_tac HOLCF_ss 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    99
by (subgoal_tac "! w y. f`<x, w> = <y, w>  --> z << w" 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   100
by (rtac sym 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   101
by (rtac fix_eqI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   102
by (asm_simp_tac HOLCF_ss 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   103
by (etac sym 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   104
by (rtac allI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   105
by (simp_tac HOLCF_ss 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   106
by (strip_tac 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   107
by (subgoal_tac "f`<x, za> = <cfst`(f`<x,za>),za>" 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   108
by (fast_tac HOL_cs 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   109
by (rtac trans 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   110
by (rtac (surjective_pairing_Cprod2 RS sym) 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   111
by (etac cfun_arg_cong 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   112
by (strip_tac 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   113
by (REPEAT (etac allE 1));
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   114
by (etac mp 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   115
by (etac sym 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   116
val lemma4 = result();
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   117
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   118
(* now we assemble the result *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   119
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   120
val prems = goal Focus_ex.thy "def_g = is_g";
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   121
by (rtac ext 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   122
by (rtac iffI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   123
by (etac (lemma3 RS mp) 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   124
by (etac (lemma4 RS mp) 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   125
val loopback_eq = result();
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   126
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   127
val prems = goal Focus_ex.thy 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   128
"(? f.\
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   129
\ is_f(f::'b stream * ('b,'c) tc stream -> 'c stream * ('b,'c) tc stream))\
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   130
\ -->\
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   131
\ (? g. def_g(g::'b stream -> 'c stream ))";
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   132
by (simp_tac (HOL_ss addsimps [def_g]) 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   133
by (strip_tac 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   134
by (etac exE 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   135
by (rtac exI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   136
by (rtac exI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   137
by (etac conjI 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   138
by (rtac refl 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   139
val L2 = result();
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   140
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   141
val prems = goal Focus_ex.thy 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   142
"(? f.\
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   143
\ is_f(f::'b stream * ('b,'c) tc stream -> 'c stream * ('b,'c) tc stream))\
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   144
\ -->\
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   145
\ (? g. is_g(g::'b stream -> 'c stream ))";
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   146
by (rtac (loopback_eq RS subst) 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   147
by (rtac L2 1);
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   148
val conservative_loopback = result();