src/ZF/Coind/Values.thy
author paulson
Tue, 06 Mar 2012 16:46:27 +0000
changeset 46822 95f1e700b712
parent 35762 af3ff2ba4c54
child 58860 fee7cfa69c50
permissions -rw-r--r--
mathematical symbols for Isabelle/ZF example theories
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1478
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
     1
(*  Title:      ZF/Coind/Values.thy
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
     2
    Author:     Jacob Frost, Cambridge University Computer Laboratory
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
     3
    Copyright   1995  University of Cambridge
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
     4
*)
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
     5
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 13339
diff changeset
     6
theory Values imports Language Map begin
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
     7
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
     8
(* Values, values environments and associated operators *)
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
     9
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    10
consts
12595
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    11
  Val  :: i
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    12
  ValEnv  :: i
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    13
  Val_ValEnv  :: i;
6112
5e4871c5136b datatype package improvements
paulson
parents: 6046
diff changeset
    14
5e4871c5136b datatype package improvements
paulson
parents: 6046
diff changeset
    15
codatatype
12595
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    16
    "Val" = v_const ("c \<in> Const")
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    17
          | v_clos ("x \<in> ExVar","e \<in> Exp","ve \<in> ValEnv")
933
5836531d7b91 Replaced rules by defs
lcp
parents: 916
diff changeset
    18
  and
12595
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    19
    "ValEnv" = ve_mk ("m \<in> PMap(ExVar,Val)")
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    20
  monos       PMap_mono
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    21
  type_intros  A_into_univ mapQU
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    22
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    23
consts
12595
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    24
  ve_owr :: "[i,i,i] => i"
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    25
  ve_dom :: "i=>i"
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    26
  ve_app :: "[i,i] => i"
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    27
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    28
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    29
primrec "ve_owr(ve_mk(m), x, v) = ve_mk(map_owr(m,x,v))"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    30
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    31
primrec "ve_dom(ve_mk(m)) = domain(m)"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    32
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    33
primrec "ve_app(ve_mk(m), a) = map_app(m,a)"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    34
24893
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 16417
diff changeset
    35
definition
b8ef7afe3a6b modernized specifications;
wenzelm
parents: 16417
diff changeset
    36
  ve_emp :: i  where
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    37
   "ve_emp == ve_mk(map_emp)"
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    38
12595
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    39
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    40
(* Elimination rules *)
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    41
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    42
lemma ValEnvE:
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    43
  "[| ve \<in> ValEnv; !!m.[| ve=ve_mk(m); m \<in> PMap(ExVar,Val) |] ==> Q |] ==> 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
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    45
apply (erule Val_ValEnv.cases) 
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    46
apply (auto simp add: Val_def Part_def Val_ValEnv.con_defs)
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    47
done
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    48
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    49
lemma ValE:
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    50
  "[| v \<in> Val;  
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    51
      !!c. [| v = v_const(c); c \<in> Const |] ==> Q; 
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    52
      !!e ve x.  
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    53
        [| v = v_clos(x,e,ve); x \<in> ExVar; e \<in> Exp; ve \<in> ValEnv |] ==> Q  
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    54
   |] ==>  
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    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
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    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
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    59
done
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    60
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    61
(* Nonempty sets *)
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    62
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    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
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    65
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    66
declare v_closNE [THEN notE, elim!]
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    67
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    68
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    69
lemma v_constNE [simp]: "c \<in> Const ==> v_const(c) \<noteq> 0"
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    70
apply (unfold 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
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    72
done
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    73
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    74
12595
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    75
(* Proving that the empty set is not a value *)
916
d03bb9f50b3b New example by Jacob Frost, tidied by lcp
lcp
parents:
diff changeset
    76
12595
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    77
lemma ValNEE: "v \<in> Val ==> v \<noteq> 0"
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    78
by (erule ValE, auto)
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    79
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    80
(* Equalities for value environments *)
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    81
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    82
lemma ve_dom_owr [simp]:
46822
95f1e700b712 mathematical symbols for Isabelle/ZF example theories
paulson
parents: 35762
diff changeset
    83
     "[| ve \<in> ValEnv; v \<noteq>0 |] ==> ve_dom(ve_owr(ve,x,v)) = ve_dom(ve) \<union> {x}"
12595
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    84
apply (erule ValEnvE)
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    85
apply (auto simp add: map_domain_owr)
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    86
done
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    87
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    88
lemma ve_app_owr [simp]:
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    89
     "ve \<in> ValEnv  
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    90
      ==> ve_app(ve_owr(ve,y,v),x) = (if x=y then v else ve_app(ve,x))"
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    91
by (erule ValEnvE, simp add: map_app_owr)
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    92
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    93
(* Introduction rules for operators on value environments *)
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    94
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    95
lemma ve_appI: "[| ve \<in> ValEnv; x \<in> ve_dom(ve) |] ==> ve_app(ve,x):Val"
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    96
by (erule ValEnvE, simp add: pmap_appI) 
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    97
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
    98
lemma ve_domI: "[| ve \<in> ValEnv; x \<in> ve_dom(ve) |] ==> 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
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
   100
apply (blast dest: pmap_domainD)
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
   101
done
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
   102
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
   103
lemma ve_empI: "ve_emp \<in> ValEnv"
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
   104
apply (unfold ve_emp_def)
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
   105
apply (rule Val_ValEnv.intros)
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
   106
apply (rule pmap_empI)
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
   107
done
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
   108
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
   109
lemma ve_owrI:
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
   110
     "[|ve \<in> ValEnv; x \<in> ExVar; v \<in> Val |] ==> 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
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
   112
apply (blast intro: pmap_owrI Val_ValEnv.intros)
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
   113
done
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
   114
0480d02221b8 conversion to Isar
paulson
parents: 11318
diff changeset
   115
end