src/ZF/Coind/Values.ML
author wenzelm
Mon, 29 Nov 1999 15:52:49 +0100
changeset 8039 a901bafe4578
parent 6154 6a00a5baef2b
child 11318 6536fb8c9fc6
permissions -rw-r--r--
Goal: tuned pris;
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)))
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    12
  "[| ve:ValEnv; !!m.[| ve=ve_mk(m); m:PMap(ExVar,Val) |] ==> Q |] ==> Q";
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)])
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    23
  "[| v:Val; \
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    24
\     !!c. [| v = v_const(c); c:Const |] ==> Q;\
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    25
\     !!e ve x. \
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    26
\       [| v = v_clos(x,e,ve); x:ExVar; e:Exp; ve:ValEnv |] ==> Q \
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)
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    46
  "v_clos(x,e,ve) ~= 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)
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
    54
  "c:Const ==> v_const(c) ~= 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
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5068
diff changeset
    63
Goal "v:Val ==> v ~= 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
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5147
diff changeset
    70
Goal "[| ve:ValEnv; v ~=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
6068
2d8f3e1f1151 if-then-else syntax for ZF
paulson
parents: 6046
diff changeset
    76
Goal "ve:ValEnv \
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
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5147
diff changeset
    82
Goal "ve:ValEnv ==> ve_app(ve_owr(ve,x,v),x) = v"; 
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
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5147
diff changeset
    88
Goal "ve:ValEnv ==> x ~= 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
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5147
diff changeset
    97
Goal "[| ve:ValEnv; x: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
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5147
diff changeset
   106
Goal "[| ve:ValEnv; x:ve_dom(ve) |] ==> x: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
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   115
Goalw [ve_emp_def] "ve_emp: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
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5147
diff changeset
   120
Goal "[|ve:ValEnv; x:ExVar; v: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