src/ZF/Coind/Values.ML
author nipkow
Tue, 04 Sep 2001 17:31:18 +0200
changeset 11548 0028bd06a19c
parent 11318 6536fb8c9fc6
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 916
diff changeset
     1
(*  Title:      ZF/Coind/Values.ML
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
     2
    ID:         $Id$
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 916
diff changeset
     3
    Author:     Jacob Frost, Cambridge University Computer Laboratory
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
     4
    Copyright   1995  University of Cambridge
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
     5
*)
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
     6
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
     7
open Values;
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
     8
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
     9
(* Elimination rules *)
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    10
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    11
val prems = goalw Values.thy (Part_def::(tl (tl Val_ValEnv.defs)))
11318
6536fb8c9fc6 X-symbols for ZF
paulson
parents: 6154
diff changeset
    12
  "[| ve \\<in> ValEnv; !!m.[| ve=ve_mk(m); m \\<in> PMap(ExVar,Val) |] ==> Q |] ==> Q";
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    13
by (cut_facts_tac prems 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    14
by (etac CollectE 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    15
by (etac exE 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    16
by (etac Val_ValEnv.elim 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    17
by (eresolve_tac prems 3);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    18
by (rewrite_tac Val_ValEnv.con_defs);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2034
diff changeset
    19
by (ALLGOALS Fast_tac);
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    20
qed "ValEnvE";
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    21
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    22
val prems = goalw Values.thy (Part_def::[hd (tl Val_ValEnv.defs)])
11318
6536fb8c9fc6 X-symbols for ZF
paulson
parents: 6154
diff changeset
    23
  "[| v \\<in> Val; \
6536fb8c9fc6 X-symbols for ZF
paulson
parents: 6154
diff changeset
    24
\     !!c. [| v = v_const(c); c \\<in> Const |] ==> Q;\
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    25
\     !!e ve x. \
11318
6536fb8c9fc6 X-symbols for ZF
paulson
parents: 6154
diff changeset
    26
\       [| v = v_clos(x,e,ve); x \\<in> ExVar; e \\<in> Exp; ve \\<in> ValEnv |] ==> Q \
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    27
\  |] ==> \
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    28
\  Q";
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    29
by (cut_facts_tac prems 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    30
by (etac CollectE 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    31
by (etac exE 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    32
by (etac Val_ValEnv.elim 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    33
by (eresolve_tac prems 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    34
by (assume_tac 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    35
by (eresolve_tac prems 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    36
by (assume_tac 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    37
by (assume_tac 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    38
by (assume_tac 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    39
by (rewrite_tac Val_ValEnv.con_defs);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2034
diff changeset
    40
by (Fast_tac 1);
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    41
qed "ValE";
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    42
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    43
(* Nonempty sets *)
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    44
6154
6a00a5baef2b automatic insertion of datatype intr rules into claset
paulson
parents: 6068
diff changeset
    45
Goalw (QPair_def::QInl_def::QInr_def::Val_ValEnv.con_defs)
11318
6536fb8c9fc6 X-symbols for ZF
paulson
parents: 6154
diff changeset
    46
  "v_clos(x,e,ve) \\<noteq> 0";
6154
6a00a5baef2b automatic insertion of datatype intr rules into claset
paulson
parents: 6068
diff changeset
    47
by (Blast_tac 1);
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    48
qed "v_closNE";
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    49
6154
6a00a5baef2b automatic insertion of datatype intr rules into claset
paulson
parents: 6068
diff changeset
    50
Addsimps [v_closNE];
6a00a5baef2b automatic insertion of datatype intr rules into claset
paulson
parents: 6068
diff changeset
    51
AddSEs [v_closNE RS notE];
6a00a5baef2b automatic insertion of datatype intr rules into claset
paulson
parents: 6068
diff changeset
    52
6a00a5baef2b automatic insertion of datatype intr rules into claset
paulson
parents: 6068
diff changeset
    53
Goalw (QPair_def::QInl_def::QInr_def::Val_ValEnv.con_defs)
11318
6536fb8c9fc6 X-symbols for ZF
paulson
parents: 6154
diff changeset
    54
  "c \\<in> Const ==> v_const(c) \\<noteq> 0";
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    55
by (dtac constNEE 1);
6154
6a00a5baef2b automatic insertion of datatype intr rules into claset
paulson
parents: 6068
diff changeset
    56
by Auto_tac;
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    57
qed "v_constNE";
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    58
6154
6a00a5baef2b automatic insertion of datatype intr rules into claset
paulson
parents: 6068
diff changeset
    59
Addsimps [v_constNE];
6a00a5baef2b automatic insertion of datatype intr rules into claset
paulson
parents: 6068
diff changeset
    60
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    61
(* Proving that the empty set is not a value *)
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    62
11318
6536fb8c9fc6 X-symbols for ZF
paulson
parents: 6154
diff changeset
    63
Goal "v \\<in> Val ==> v \\<noteq> 0";
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    64
by (etac ValE 1);
6154
6a00a5baef2b automatic insertion of datatype intr rules into claset
paulson
parents: 6068
diff changeset
    65
by Auto_tac;
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    66
qed "ValNEE";
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    67
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    68
(* Equalities for value environments *)
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    69
11318
6536fb8c9fc6 X-symbols for ZF
paulson
parents: 6154
diff changeset
    70
Goal "[| ve \\<in> ValEnv; v \\<noteq>0 |] ==> ve_dom(ve_owr(ve,x,v)) = ve_dom(ve) Un {x}";
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    71
by (etac ValEnvE 1);
6154
6a00a5baef2b automatic insertion of datatype intr rules into claset
paulson
parents: 6068
diff changeset
    72
by (auto_tac (claset(),
6a00a5baef2b automatic insertion of datatype intr rules into claset
paulson
parents: 6068
diff changeset
    73
	      simpset() addsimps [map_domain_owr]));
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    74
qed "ve_dom_owr";
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    75
11318
6536fb8c9fc6 X-symbols for ZF
paulson
parents: 6154
diff changeset
    76
Goal "ve \\<in> ValEnv \
6068
2d8f3e1f1151 if-then-else syntax for ZF
paulson
parents: 6046
diff changeset
    77
\     ==> ve_app(ve_owr(ve,y,v),x) = (if x=y then v else ve_app(ve,x))"; 
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    78
by (etac ValEnvE 1);
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5147
diff changeset
    79
by (asm_simp_tac (simpset() addsimps [map_app_owr]) 1);
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5147
diff changeset
    80
qed "ve_app_owr";
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5147
diff changeset
    81
11318
6536fb8c9fc6 X-symbols for ZF
paulson
parents: 6154
diff changeset
    82
Goal "ve \\<in> ValEnv ==> ve_app(ve_owr(ve,x,v),x) = v"; 
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5147
diff changeset
    83
by (etac ValEnvE 1);
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5147
diff changeset
    84
by (Asm_full_simp_tac 1);
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    85
by (rtac map_app_owr1 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    86
qed "ve_app_owr1";
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    87
11318
6536fb8c9fc6 X-symbols for ZF
paulson
parents: 6154
diff changeset
    88
Goal "ve \\<in> ValEnv ==> x \\<noteq> y ==> ve_app(ve_owr(ve,x,v),y) = ve_app(ve,y)";
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    89
by (etac ValEnvE 1);
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5147
diff changeset
    90
by (Asm_full_simp_tac 1);
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    91
by (rtac map_app_owr2 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2034
diff changeset
    92
by (Fast_tac 1);
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    93
qed "ve_app_owr2";
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    94
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    95
(* Introduction rules for operators on value environments *)
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    96
11318
6536fb8c9fc6 X-symbols for ZF
paulson
parents: 6154
diff changeset
    97
Goal "[| ve \\<in> ValEnv; x \\<in> ve_dom(ve) |] ==> ve_app(ve,x):Val";
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    98
by (etac ValEnvE 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    99
by (hyp_subst_tac 1);
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5147
diff changeset
   100
by (Asm_full_simp_tac 1);
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   101
by (rtac pmap_appI 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   102
by (assume_tac 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   103
by (assume_tac 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   104
qed "ve_appI";
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   105
11318
6536fb8c9fc6 X-symbols for ZF
paulson
parents: 6154
diff changeset
   106
Goal "[| ve \\<in> ValEnv; x \\<in> ve_dom(ve) |] ==> x \\<in> ExVar";
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   107
by (etac ValEnvE 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   108
by (hyp_subst_tac 1);
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5147
diff changeset
   109
by (Asm_full_simp_tac 1);
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   110
by (rtac pmap_domainD 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   111
by (assume_tac 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   112
by (assume_tac 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   113
qed "ve_domI";
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   114
11318
6536fb8c9fc6 X-symbols for ZF
paulson
parents: 6154
diff changeset
   115
Goalw [ve_emp_def] "ve_emp \\<in> ValEnv";
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   116
by (rtac Val_ValEnv.ve_mk_I 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   117
by (rtac pmap_empI 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   118
qed "ve_empI";
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   119
11318
6536fb8c9fc6 X-symbols for ZF
paulson
parents: 6154
diff changeset
   120
Goal "[|ve \\<in> ValEnv; x \\<in> ExVar; v \\<in> Val |] ==> ve_owr(ve,x,v):ValEnv";
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   121
by (etac ValEnvE 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   122
by (hyp_subst_tac 1);
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5147
diff changeset
   123
by (Asm_full_simp_tac 1);
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   124
by (rtac Val_ValEnv.ve_mk_I 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   125
by (etac pmap_owrI 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   126
by (assume_tac 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   127
by (assume_tac 1);
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   128
qed "ve_owrI";
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   129
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   130
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
   131