| author | Fabian Huch <huch@in.tum.de> | 
| Thu, 24 Oct 2024 14:07:13 +0200 | |
| changeset 81364 | 84e4388f8ab1 | 
| parent 76217 | 8655344f1cf6 | 
| permissions | -rw-r--r-- | 
| 1478 | 1  | 
(* Title: ZF/Coind/Values.thy  | 
2  | 
Author: Jacob Frost, Cambridge University Computer Laboratory  | 
|
| 916 | 3  | 
Copyright 1995 University of Cambridge  | 
4  | 
*)  | 
|
5  | 
||
| 16417 | 6  | 
theory Values imports Language Map begin  | 
| 916 | 7  | 
|
8  | 
(* Values, values environments and associated operators *)  | 
|
9  | 
||
10  | 
consts  | 
|
| 12595 | 11  | 
Val :: i  | 
12  | 
ValEnv :: i  | 
|
| 58860 | 13  | 
Val_ValEnv :: i  | 
| 6112 | 14  | 
|
15  | 
codatatype  | 
|
| 12595 | 16  | 
    "Val" = v_const ("c \<in> Const")
 | 
17  | 
          | v_clos ("x \<in> ExVar","e \<in> Exp","ve \<in> ValEnv")
 | 
|
| 933 | 18  | 
and  | 
| 12595 | 19  | 
    "ValEnv" = ve_mk ("m \<in> PMap(ExVar,Val)")
 | 
20  | 
monos PMap_mono  | 
|
21  | 
type_intros A_into_univ mapQU  | 
|
| 916 | 22  | 
|
23  | 
consts  | 
|
| 
76215
 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 
paulson <lp15@cam.ac.uk> 
parents: 
76213 
diff
changeset
 | 
24  | 
ve_owr :: "[i,i,i] \<Rightarrow> i"  | 
| 
 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 
paulson <lp15@cam.ac.uk> 
parents: 
76213 
diff
changeset
 | 
25  | 
ve_dom :: "i\<Rightarrow>i"  | 
| 
 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 
paulson <lp15@cam.ac.uk> 
parents: 
76213 
diff
changeset
 | 
26  | 
ve_app :: "[i,i] \<Rightarrow> i"  | 
| 6046 | 27  | 
|
28  | 
||
29  | 
primrec "ve_owr(ve_mk(m), x, v) = ve_mk(map_owr(m,x,v))"  | 
|
30  | 
||
31  | 
primrec "ve_dom(ve_mk(m)) = domain(m)"  | 
|
32  | 
||
33  | 
primrec "ve_app(ve_mk(m), a) = map_app(m,a)"  | 
|
34  | 
||
| 24893 | 35  | 
definition  | 
36  | 
ve_emp :: i where  | 
|
| 
76213
 
e44d86131648
Removal of obsolete ASCII syntax
 
paulson <lp15@cam.ac.uk> 
parents: 
58860 
diff
changeset
 | 
37  | 
"ve_emp \<equiv> ve_mk(map_emp)"  | 
| 916 | 38  | 
|
| 12595 | 39  | 
|
40  | 
(* Elimination rules *)  | 
|
41  | 
||
42  | 
lemma ValEnvE:  | 
|
| 
76213
 
e44d86131648
Removal of obsolete ASCII syntax
 
paulson <lp15@cam.ac.uk> 
parents: 
58860 
diff
changeset
 | 
43  | 
"\<lbrakk>ve \<in> ValEnv; \<And>m.\<lbrakk>ve=ve_mk(m); m \<in> PMap(ExVar,Val)\<rbrakk> \<Longrightarrow> Q\<rbrakk> \<Longrightarrow> Q"  | 
| 
13339
 
0f89104dd377
Fixed quantified variable name preservation for ball and bex (bounded quants)
 
paulson 
parents: 
12595 
diff
changeset
 | 
44  | 
apply (unfold Part_def Val_def ValEnv_def, clarify)  | 
| 12595 | 45  | 
apply (erule Val_ValEnv.cases)  | 
46  | 
apply (auto simp add: Val_def Part_def Val_ValEnv.con_defs)  | 
|
47  | 
done  | 
|
48  | 
||
49  | 
lemma ValE:  | 
|
| 
76213
 
e44d86131648
Removal of obsolete ASCII syntax
 
paulson <lp15@cam.ac.uk> 
parents: 
58860 
diff
changeset
 | 
50  | 
"\<lbrakk>v \<in> Val;  | 
| 
 
e44d86131648
Removal of obsolete ASCII syntax
 
paulson <lp15@cam.ac.uk> 
parents: 
58860 
diff
changeset
 | 
51  | 
\<And>c. \<lbrakk>v = v_const(c); c \<in> Const\<rbrakk> \<Longrightarrow> Q;  | 
| 
 
e44d86131648
Removal of obsolete ASCII syntax
 
paulson <lp15@cam.ac.uk> 
parents: 
58860 
diff
changeset
 | 
52  | 
\<And>e ve x.  | 
| 
 
e44d86131648
Removal of obsolete ASCII syntax
 
paulson <lp15@cam.ac.uk> 
parents: 
58860 
diff
changeset
 | 
53  | 
\<lbrakk>v = v_clos(x,e,ve); x \<in> ExVar; e \<in> Exp; ve \<in> ValEnv\<rbrakk> \<Longrightarrow> Q  | 
| 
 
e44d86131648
Removal of obsolete ASCII syntax
 
paulson <lp15@cam.ac.uk> 
parents: 
58860 
diff
changeset
 | 
54  | 
\<rbrakk> \<Longrightarrow>  | 
| 12595 | 55  | 
Q"  | 
| 
13339
 
0f89104dd377
Fixed quantified variable name preservation for ball and bex (bounded quants)
 
paulson 
parents: 
12595 
diff
changeset
 | 
56  | 
apply (unfold Part_def Val_def ValEnv_def, clarify)  | 
| 12595 | 57  | 
apply (erule Val_ValEnv.cases)  | 
| 
13339
 
0f89104dd377
Fixed quantified variable name preservation for ball and bex (bounded quants)
 
paulson 
parents: 
12595 
diff
changeset
 | 
58  | 
apply (auto simp add: ValEnv_def Part_def Val_ValEnv.con_defs)  | 
| 12595 | 59  | 
done  | 
60  | 
||
61  | 
(* Nonempty sets *)  | 
|
62  | 
||
63  | 
lemma v_closNE [simp]: "v_clos(x,e,ve) \<noteq> 0"  | 
|
| 
13339
 
0f89104dd377
Fixed quantified variable name preservation for ball and bex (bounded quants)
 
paulson 
parents: 
12595 
diff
changeset
 | 
64  | 
by (unfold QPair_def QInl_def QInr_def Val_ValEnv.con_defs, blast)  | 
| 12595 | 65  | 
|
66  | 
declare v_closNE [THEN notE, elim!]  | 
|
67  | 
||
68  | 
||
| 
76213
 
e44d86131648
Removal of obsolete ASCII syntax
 
paulson <lp15@cam.ac.uk> 
parents: 
58860 
diff
changeset
 | 
69  | 
lemma v_constNE [simp]: "c \<in> Const \<Longrightarrow> v_const(c) \<noteq> 0"  | 
| 76217 | 70  | 
unfolding QPair_def QInl_def QInr_def Val_ValEnv.con_defs  | 
| 
13339
 
0f89104dd377
Fixed quantified variable name preservation for ball and bex (bounded quants)
 
paulson 
parents: 
12595 
diff
changeset
 | 
71  | 
apply (drule constNEE, auto)  | 
| 12595 | 72  | 
done  | 
| 916 | 73  | 
|
74  | 
||
| 12595 | 75  | 
(* Proving that the empty set is not a value *)  | 
| 916 | 76  | 
|
| 
76213
 
e44d86131648
Removal of obsolete ASCII syntax
 
paulson <lp15@cam.ac.uk> 
parents: 
58860 
diff
changeset
 | 
77  | 
lemma ValNEE: "v \<in> Val \<Longrightarrow> v \<noteq> 0"  | 
| 12595 | 78  | 
by (erule ValE, auto)  | 
79  | 
||
80  | 
(* Equalities for value environments *)  | 
|
81  | 
||
82  | 
lemma ve_dom_owr [simp]:  | 
|
| 
76213
 
e44d86131648
Removal of obsolete ASCII syntax
 
paulson <lp15@cam.ac.uk> 
parents: 
58860 
diff
changeset
 | 
83  | 
     "\<lbrakk>ve \<in> ValEnv; v \<noteq>0\<rbrakk> \<Longrightarrow> ve_dom(ve_owr(ve,x,v)) = ve_dom(ve) \<union> {x}"
 | 
| 12595 | 84  | 
apply (erule ValEnvE)  | 
85  | 
apply (auto simp add: map_domain_owr)  | 
|
86  | 
done  | 
|
87  | 
||
88  | 
lemma ve_app_owr [simp]:  | 
|
89  | 
"ve \<in> ValEnv  | 
|
| 
76213
 
e44d86131648
Removal of obsolete ASCII syntax
 
paulson <lp15@cam.ac.uk> 
parents: 
58860 
diff
changeset
 | 
90  | 
\<Longrightarrow> ve_app(ve_owr(ve,y,v),x) = (if x=y then v else ve_app(ve,x))"  | 
| 12595 | 91  | 
by (erule ValEnvE, simp add: map_app_owr)  | 
92  | 
||
93  | 
(* Introduction rules for operators on value environments *)  | 
|
94  | 
||
| 
76213
 
e44d86131648
Removal of obsolete ASCII syntax
 
paulson <lp15@cam.ac.uk> 
parents: 
58860 
diff
changeset
 | 
95  | 
lemma ve_appI: "\<lbrakk>ve \<in> ValEnv; x \<in> ve_dom(ve)\<rbrakk> \<Longrightarrow> ve_app(ve,x):Val"  | 
| 12595 | 96  | 
by (erule ValEnvE, simp add: pmap_appI)  | 
97  | 
||
| 
76213
 
e44d86131648
Removal of obsolete ASCII syntax
 
paulson <lp15@cam.ac.uk> 
parents: 
58860 
diff
changeset
 | 
98  | 
lemma ve_domI: "\<lbrakk>ve \<in> ValEnv; x \<in> ve_dom(ve)\<rbrakk> \<Longrightarrow> x \<in> ExVar"  | 
| 
13339
 
0f89104dd377
Fixed quantified variable name preservation for ball and bex (bounded quants)
 
paulson 
parents: 
12595 
diff
changeset
 | 
99  | 
apply (erule ValEnvE, simp)  | 
| 12595 | 100  | 
apply (blast dest: pmap_domainD)  | 
101  | 
done  | 
|
102  | 
||
103  | 
lemma ve_empI: "ve_emp \<in> ValEnv"  | 
|
| 
76216
 
9fc34f76b4e8
getting rid of apply (unfold ...)
 
paulson <lp15@cam.ac.uk> 
parents: 
76215 
diff
changeset
 | 
104  | 
unfolding ve_emp_def  | 
| 12595 | 105  | 
apply (rule Val_ValEnv.intros)  | 
106  | 
apply (rule pmap_empI)  | 
|
107  | 
done  | 
|
108  | 
||
109  | 
lemma ve_owrI:  | 
|
| 
76213
 
e44d86131648
Removal of obsolete ASCII syntax
 
paulson <lp15@cam.ac.uk> 
parents: 
58860 
diff
changeset
 | 
110  | 
"\<lbrakk>ve \<in> ValEnv; x \<in> ExVar; v \<in> Val\<rbrakk> \<Longrightarrow> ve_owr(ve,x,v):ValEnv"  | 
| 
13339
 
0f89104dd377
Fixed quantified variable name preservation for ball and bex (bounded quants)
 
paulson 
parents: 
12595 
diff
changeset
 | 
111  | 
apply (erule ValEnvE, simp)  | 
| 12595 | 112  | 
apply (blast intro: pmap_owrI Val_ValEnv.intros)  | 
113  | 
done  | 
|
114  | 
||
115  | 
end  |