src/HOL/Bali/DefiniteAssignment.thy
changeset 32960 69916a850301
parent 24019 67bde7cfcf10
child 35416 d8d7d1b785af
equal deleted inserted replaced
32959:23a8c5ac35f8 32960:69916a850301
   258       by simp
   258       by simp
   259     show ?case
   259     show ?case
   260     proof (cases "the_Bool bv")
   260     proof (cases "the_Bool bv")
   261       case True
   261       case True
   262       with Cond show ?thesis using v bv
   262       with Cond show ?thesis using v bv
   263 	by (auto intro: hyp_CondL)
   263         by (auto intro: hyp_CondL)
   264     next
   264     next
   265       case False
   265       case False
   266       with Cond show ?thesis using v bv
   266       with Cond show ?thesis using v bv
   267 	by (auto intro: hyp_CondR)
   267         by (auto intro: hyp_CondR)
   268     qed
   268     qed
   269   qed (simp_all)
   269   qed (simp_all)
   270   with const 
   270   with const 
   271   show ?thesis
   271   show ?thesis
   272     by blast  
   272     by blast  
   362       with const bv  
   362       with const bv  
   363       have "?Const b e1" by simp
   363       have "?Const b e1" by simp
   364       hence "?Ass b e1" by (rule hyp_e1)
   364       hence "?Ass b e1" by (rule hyp_e1)
   365       with emptyC bv True
   365       with emptyC bv True
   366       show ?thesis
   366       show ?thesis
   367 	by simp
   367         by simp
   368     next
   368     next
   369       case False
   369       case False
   370       with const bv  
   370       with const bv  
   371       have "?Const b e2" by simp
   371       have "?Const b e2" by simp
   372       hence "?Ass b e2" by (rule hyp_e2)
   372       hence "?Ass b e2" by (rule hyp_e2)
   373       with emptyC bv False
   373       with emptyC bv False
   374       show ?thesis
   374       show ?thesis
   375 	by simp
   375         by simp
   376     qed
   376     qed
   377   qed (simp_all)
   377   qed (simp_all)
   378   with boolConst
   378   with boolConst
   379   show ?thesis
   379   show ?thesis
   380     by blast
   380     by blast
   409       with const bv  
   409       with const bv  
   410       have "?Const b e1" by simp
   410       have "?Const b e1" by simp
   411       hence "?Ass b e1" by (rule hyp_e1)
   411       hence "?Ass b e1" by (rule hyp_e1)
   412       with bv True
   412       with bv True
   413       show ?thesis
   413       show ?thesis
   414 	by simp
   414         by simp
   415     next
   415     next
   416       case False
   416       case False
   417       with const bv  
   417       with const bv  
   418       have "?Const b e2" by simp
   418       have "?Const b e2" by simp
   419       hence "?Ass b e2" by (rule hyp_e2)
   419       hence "?Ass b e2" by (rule hyp_e2)
   420       with bv False 
   420       with bv False 
   421       show ?thesis
   421       show ?thesis
   422 	by simp
   422         by simp
   423     qed
   423     qed
   424   qed (simp_all)
   424   qed (simp_all)
   425   with boolConst
   425   with boolConst
   426   show ?thesis
   426   show ?thesis
   427     by blast
   427     by blast
   957     have "E\<turnstile>e\<Colon>- (PrimT Boolean)"
   957     have "E\<turnstile>e\<Colon>- (PrimT Boolean)"
   958     proof -
   958     proof -
   959       from `E\<turnstile>(Cast T e)\<Colon>- (PrimT Boolean)`
   959       from `E\<turnstile>(Cast T e)\<Colon>- (PrimT Boolean)`
   960       obtain Te where "E\<turnstile>e\<Colon>-Te"
   960       obtain Te where "E\<turnstile>e\<Colon>-Te"
   961                            "prg E\<turnstile>Te\<preceq>? PrimT Boolean"
   961                            "prg E\<turnstile>Te\<preceq>? PrimT Boolean"
   962 	by cases simp
   962         by cases simp
   963       thus ?thesis
   963       thus ?thesis
   964 	by - (drule cast_Boolean2,simp)
   964         by - (drule cast_Boolean2,simp)
   965     qed
   965     qed
   966     with Cast.hyps
   966     with Cast.hyps
   967     show ?case
   967     show ?case
   968       by simp
   968       by simp
   969   next	
   969   next  
   970     case (Lit val) 
   970     case (Lit val) 
   971     thus ?case
   971     thus ?case
   972       by - (erule wt_elim_cases, cases "val", auto simp add: empty_dt_def)
   972       by - (erule wt_elim_cases, cases "val", auto simp add: empty_dt_def)
   973   next
   973   next
   974     case (UnOp unop e) 
   974     case (UnOp unop e) 
   998     show ?case
   998     show ?case
   999     proof (cases "constVal c")
   999     proof (cases "constVal c")
  1000       case None
  1000       case None
  1001       with boolean_e1 boolean_e2
  1001       with boolean_e1 boolean_e2
  1002       show ?thesis
  1002       show ?thesis
  1003 	using hyp_e1 hyp_e2 
  1003         using hyp_e1 hyp_e2 
  1004 	by (auto)
  1004         by (auto)
  1005     next
  1005     next
  1006       case (Some bv)
  1006       case (Some bv)
  1007       show ?thesis
  1007       show ?thesis
  1008       proof (cases "the_Bool bv")
  1008       proof (cases "the_Bool bv")
  1009 	case True
  1009         case True
  1010 	with Some show ?thesis using hyp_e1 boolean_e1 by auto
  1010         with Some show ?thesis using hyp_e1 boolean_e1 by auto
  1011       next
  1011       next
  1012 	case False
  1012         case False
  1013 	with Some show ?thesis using hyp_e2 boolean_e2 by auto
  1013         with Some show ?thesis using hyp_e2 boolean_e2 by auto
  1014       qed
  1014       qed
  1015     qed
  1015     qed
  1016   qed simp_all
  1016   qed simp_all
  1017   with boolEx 
  1017   with boolEx 
  1018   show ?thesis
  1018   show ?thesis
  1083     moreover
  1083     moreover
  1084     {
  1084     {
  1085       fix l'
  1085       fix l'
  1086       from hyp_brk
  1086       from hyp_brk
  1087       have "rmlab l (brk C) l'  \<subseteq> rmlab l (brk C') l'"
  1087       have "rmlab l (brk C) l'  \<subseteq> rmlab l (brk C') l'"
  1088 	by  (cases "l=l'") simp_all
  1088         by  (cases "l=l'") simp_all
  1089     }
  1089     }
  1090     moreover note A A'
  1090     moreover note A A'
  1091     ultimately show ?case
  1091     ultimately show ?case
  1092       by simp
  1092       by simp
  1093   next
  1093   next
  1152       by blast
  1152       by blast
  1153     moreover
  1153     moreover
  1154     { fix l'
  1154     { fix l'
  1155       have  "brk A l' \<subseteq> brk A' l'"
  1155       have  "brk A l' \<subseteq> brk A' l'"
  1156       proof (cases "constVal e")
  1156       proof (cases "constVal e")
  1157 	case None
  1157         case None
  1158 	with A A' C' 
  1158         with A A' C' 
  1159 	show ?thesis
  1159         show ?thesis
  1160 	   by (cases "l=l'") auto
  1160            by (cases "l=l'") auto
  1161       next
  1161       next
  1162 	case (Some bv)
  1162         case (Some bv)
  1163 	with A A' C'
  1163         with A A' C'
  1164 	show ?thesis
  1164         show ?thesis
  1165 	  by (cases "the_Bool bv", cases "l=l'") auto
  1165           by (cases "the_Bool bv", cases "l=l'") auto
  1166       qed
  1166       qed
  1167     }
  1167     }
  1168     ultimately show ?case
  1168     ultimately show ?case
  1169       by auto
  1169       by auto
  1170   next
  1170   next
  1379     moreover
  1379     moreover
  1380     obtain C1' where "Env\<turnstile> (B' \<union> assigns_if True e) \<guillemotright>\<langle>c1\<rangle>\<guillemotright> C1'"
  1380     obtain C1' where "Env\<turnstile> (B' \<union> assigns_if True e) \<guillemotright>\<langle>c1\<rangle>\<guillemotright> C1'"
  1381     proof -
  1381     proof -
  1382       from B'
  1382       from B'
  1383       have "(B \<union> assigns_if True e) \<subseteq> (B' \<union> assigns_if True e)"
  1383       have "(B \<union> assigns_if True e) \<subseteq> (B' \<union> assigns_if True e)"
  1384 	by blast
  1384         by blast
  1385       moreover
  1385       moreover
  1386       have "PROP ?Hyp Env (B \<union> assigns_if True e) \<langle>c1\<rangle>" by (rule If.hyps)
  1386       have "PROP ?Hyp Env (B \<union> assigns_if True e) \<langle>c1\<rangle>" by (rule If.hyps)
  1387       ultimately 
  1387       ultimately 
  1388       show ?thesis using that by iprover
  1388       show ?thesis using that by iprover
  1389     qed
  1389     qed
  1390     moreover
  1390     moreover
  1391     obtain C2' where "Env\<turnstile> (B' \<union> assigns_if False e) \<guillemotright>\<langle>c2\<rangle>\<guillemotright> C2'"
  1391     obtain C2' where "Env\<turnstile> (B' \<union> assigns_if False e) \<guillemotright>\<langle>c2\<rangle>\<guillemotright> C2'"
  1392     proof - 
  1392     proof - 
  1393       from B' have "(B \<union> assigns_if False e) \<subseteq> (B' \<union> assigns_if False e)"
  1393       from B' have "(B \<union> assigns_if False e) \<subseteq> (B' \<union> assigns_if False e)"
  1394 	by blast
  1394         by blast
  1395       moreover
  1395       moreover
  1396       have "PROP ?Hyp Env (B \<union> assigns_if False e) \<langle>c2\<rangle>" by (rule If.hyps)
  1396       have "PROP ?Hyp Env (B \<union> assigns_if False e) \<langle>c2\<rangle>" by (rule If.hyps)
  1397       ultimately
  1397       ultimately
  1398       show ?thesis using that by iprover
  1398       show ?thesis using that by iprover
  1399     qed
  1399     qed
  1413     moreover
  1413     moreover
  1414     obtain C' where "Env\<turnstile> (B' \<union> assigns_if True e) \<guillemotright>\<langle>c\<rangle>\<guillemotright> C'"
  1414     obtain C' where "Env\<turnstile> (B' \<union> assigns_if True e) \<guillemotright>\<langle>c\<rangle>\<guillemotright> C'"
  1415     proof -
  1415     proof -
  1416       from B'
  1416       from B'
  1417       have "(B \<union> assigns_if True e) \<subseteq> (B' \<union> assigns_if True e)"
  1417       have "(B \<union> assigns_if True e) \<subseteq> (B' \<union> assigns_if True e)"
  1418 	by blast
  1418         by blast
  1419       moreover
  1419       moreover
  1420       have "PROP ?Hyp Env (B \<union> assigns_if True e) \<langle>c\<rangle>" by (rule Loop.hyps)
  1420       have "PROP ?Hyp Env (B \<union> assigns_if True e) \<langle>c\<rangle>" by (rule Loop.hyps)
  1421       ultimately 
  1421       ultimately 
  1422       show ?thesis using that by iprover
  1422       show ?thesis using that by iprover
  1423     qed
  1423     qed
  1459     proof -
  1459     proof -
  1460       from B' have "B \<union> {VName vn} \<subseteq> B' \<union> {VName vn}" by blast
  1460       from B' have "B \<union> {VName vn} \<subseteq> B' \<union> {VName vn}" by blast
  1461       moreover
  1461       moreover
  1462       have "PROP ?Hyp (Env\<lparr>lcl := lcl Env(VName vn\<mapsto>Class C)\<rparr>) 
  1462       have "PROP ?Hyp (Env\<lparr>lcl := lcl Env(VName vn\<mapsto>Class C)\<rparr>) 
  1463                       (B \<union> {VName vn}) \<langle>c2\<rangle>" 
  1463                       (B \<union> {VName vn}) \<langle>c2\<rangle>" 
  1464 	by (rule Try.hyps)
  1464         by (rule Try.hyps)
  1465       ultimately
  1465       ultimately
  1466       show ?thesis using that by iprover
  1466       show ?thesis using that by iprover
  1467     qed
  1467     qed
  1468     ultimately
  1468     ultimately
  1469     obtain A' where "Env\<turnstile> B' \<guillemotright>\<langle>Try c1 Catch(C vn) c2\<rangle>\<guillemotright> A'"
  1469     obtain A' where "Env\<turnstile> B' \<guillemotright>\<langle>Try c1 Catch(C vn) c2\<rangle>\<guillemotright> A'"
  1514     qed
  1514     qed
  1515     moreover
  1515     moreover
  1516     obtain E2' where "Env\<turnstile> B' \<union>  assigns_if True e1 \<guillemotright>\<langle>e2\<rangle>\<guillemotright> E2'"
  1516     obtain E2' where "Env\<turnstile> B' \<union>  assigns_if True e1 \<guillemotright>\<langle>e2\<rangle>\<guillemotright> E2'"
  1517     proof -
  1517     proof -
  1518       from B' have "B \<union> assigns_if True e1 \<subseteq> B' \<union>  assigns_if True e1"
  1518       from B' have "B \<union> assigns_if True e1 \<subseteq> B' \<union>  assigns_if True e1"
  1519 	by blast
  1519         by blast
  1520       moreover
  1520       moreover
  1521       have "PROP ?Hyp Env (B \<union> assigns_if True e1) \<langle>e2\<rangle>" by (rule CondAnd.hyps)
  1521       have "PROP ?Hyp Env (B \<union> assigns_if True e1) \<langle>e2\<rangle>" by (rule CondAnd.hyps)
  1522       ultimately show ?thesis using that by iprover
  1522       ultimately show ?thesis using that by iprover
  1523     qed
  1523     qed
  1524     ultimately
  1524     ultimately
  1536     qed
  1536     qed
  1537     moreover
  1537     moreover
  1538     obtain E2' where "Env\<turnstile> B' \<union> assigns_if False e1 \<guillemotright>\<langle>e2\<rangle>\<guillemotright> E2'"
  1538     obtain E2' where "Env\<turnstile> B' \<union> assigns_if False e1 \<guillemotright>\<langle>e2\<rangle>\<guillemotright> E2'"
  1539     proof -
  1539     proof -
  1540       from B' have "B \<union> assigns_if False e1 \<subseteq> B' \<union>  assigns_if False e1"
  1540       from B' have "B \<union> assigns_if False e1 \<subseteq> B' \<union>  assigns_if False e1"
  1541 	by blast
  1541         by blast
  1542       moreover
  1542       moreover
  1543       have "PROP ?Hyp Env (B \<union> assigns_if False e1) \<langle>e2\<rangle>" by (rule CondOr.hyps)
  1543       have "PROP ?Hyp Env (B \<union> assigns_if False e1) \<langle>e2\<rangle>" by (rule CondOr.hyps)
  1544       ultimately show ?thesis using that by iprover
  1544       ultimately show ?thesis using that by iprover
  1545     qed
  1545     qed
  1546     ultimately
  1546     ultimately
  1560     obtain A' where "Env\<turnstile> nrm E1' \<guillemotright>\<langle>e2\<rangle>\<guillemotright> A'"
  1560     obtain A' where "Env\<turnstile> nrm E1' \<guillemotright>\<langle>e2\<rangle>\<guillemotright> A'"
  1561     proof -
  1561     proof -
  1562       have "Env\<turnstile> B \<guillemotright>\<langle>e1\<rangle>\<guillemotright> E1" by (rule BinOp.hyps)
  1562       have "Env\<turnstile> B \<guillemotright>\<langle>e1\<rangle>\<guillemotright> E1" by (rule BinOp.hyps)
  1563       from this B' E1'
  1563       from this B' E1'
  1564       have "nrm E1 \<subseteq> nrm E1'"
  1564       have "nrm E1 \<subseteq> nrm E1'"
  1565 	by (rule da_monotone [THEN conjE])
  1565         by (rule da_monotone [THEN conjE])
  1566       moreover 
  1566       moreover 
  1567       have "PROP ?Hyp Env (nrm E1) \<langle>e2\<rangle>" by (rule BinOp.hyps)
  1567       have "PROP ?Hyp Env (nrm E1) \<langle>e2\<rangle>" by (rule BinOp.hyps)
  1568       ultimately show ?thesis using that by iprover
  1568       ultimately show ?thesis using that by iprover
  1569     qed
  1569     qed
  1570     ultimately
  1570     ultimately
  1610     obtain A' where "Env\<turnstile> nrm V' \<guillemotright>\<langle>e\<rangle>\<guillemotright> A'"
  1610     obtain A' where "Env\<turnstile> nrm V' \<guillemotright>\<langle>e\<rangle>\<guillemotright> A'"
  1611     proof -
  1611     proof -
  1612       have "Env\<turnstile> B \<guillemotright>\<langle>v\<rangle>\<guillemotright> V" by (rule Ass.hyps)
  1612       have "Env\<turnstile> B \<guillemotright>\<langle>v\<rangle>\<guillemotright> V" by (rule Ass.hyps)
  1613       from this B' V'
  1613       from this B' V'
  1614       have "nrm V \<subseteq> nrm V'"
  1614       have "nrm V \<subseteq> nrm V'"
  1615 	by (rule da_monotone [THEN conjE])
  1615         by (rule da_monotone [THEN conjE])
  1616       moreover 
  1616       moreover 
  1617       have "PROP ?Hyp Env (nrm V) \<langle>e\<rangle>" by (rule Ass.hyps)
  1617       have "PROP ?Hyp Env (nrm V) \<langle>e\<rangle>" by (rule Ass.hyps)
  1618       ultimately show ?thesis using that by iprover
  1618       ultimately show ?thesis using that by iprover
  1619     qed  
  1619     qed  
  1620     ultimately
  1620     ultimately
  1634     moreover 
  1634     moreover 
  1635     obtain E1' where "Env\<turnstile> B' \<union> assigns_if True c \<guillemotright>\<langle>e1\<rangle>\<guillemotright> E1'"
  1635     obtain E1' where "Env\<turnstile> B' \<union> assigns_if True c \<guillemotright>\<langle>e1\<rangle>\<guillemotright> E1'"
  1636     proof -
  1636     proof -
  1637       from B'
  1637       from B'
  1638       have "(B \<union> assigns_if True c) \<subseteq> (B' \<union> assigns_if True c)"
  1638       have "(B \<union> assigns_if True c) \<subseteq> (B' \<union> assigns_if True c)"
  1639 	by blast
  1639         by blast
  1640       moreover
  1640       moreover
  1641       have "PROP ?Hyp Env (B \<union> assigns_if True c) \<langle>e1\<rangle>" by (rule CondBool.hyps)
  1641       have "PROP ?Hyp Env (B \<union> assigns_if True c) \<langle>e1\<rangle>" by (rule CondBool.hyps)
  1642       ultimately 
  1642       ultimately 
  1643       show ?thesis using that by iprover
  1643       show ?thesis using that by iprover
  1644     qed
  1644     qed
  1645     moreover
  1645     moreover
  1646     obtain E2' where "Env\<turnstile> B' \<union> assigns_if False c \<guillemotright>\<langle>e2\<rangle>\<guillemotright> E2'"
  1646     obtain E2' where "Env\<turnstile> B' \<union> assigns_if False c \<guillemotright>\<langle>e2\<rangle>\<guillemotright> E2'"
  1647     proof -
  1647     proof -
  1648       from B'
  1648       from B'
  1649       have "(B \<union> assigns_if False c) \<subseteq> (B' \<union> assigns_if False c)"
  1649       have "(B \<union> assigns_if False c) \<subseteq> (B' \<union> assigns_if False c)"
  1650 	by blast
  1650         by blast
  1651       moreover
  1651       moreover
  1652       have "PROP ?Hyp Env (B \<union> assigns_if False c) \<langle>e2\<rangle>" by(rule CondBool.hyps)
  1652       have "PROP ?Hyp Env (B \<union> assigns_if False c) \<langle>e2\<rangle>" by(rule CondBool.hyps)
  1653       ultimately 
  1653       ultimately 
  1654       show ?thesis using that by iprover
  1654       show ?thesis using that by iprover
  1655     qed
  1655     qed
  1670     moreover 
  1670     moreover 
  1671     obtain E1' where "Env\<turnstile> B' \<union> assigns_if True c \<guillemotright>\<langle>e1\<rangle>\<guillemotright> E1'"
  1671     obtain E1' where "Env\<turnstile> B' \<union> assigns_if True c \<guillemotright>\<langle>e1\<rangle>\<guillemotright> E1'"
  1672     proof -
  1672     proof -
  1673       from B'
  1673       from B'
  1674       have "(B \<union> assigns_if True c) \<subseteq> (B' \<union> assigns_if True c)"
  1674       have "(B \<union> assigns_if True c) \<subseteq> (B' \<union> assigns_if True c)"
  1675 	by blast
  1675         by blast
  1676       moreover
  1676       moreover
  1677       have "PROP ?Hyp Env (B \<union> assigns_if True c) \<langle>e1\<rangle>" by (rule Cond.hyps)
  1677       have "PROP ?Hyp Env (B \<union> assigns_if True c) \<langle>e1\<rangle>" by (rule Cond.hyps)
  1678       ultimately 
  1678       ultimately 
  1679       show ?thesis using that by iprover
  1679       show ?thesis using that by iprover
  1680     qed
  1680     qed
  1681     moreover
  1681     moreover
  1682     obtain E2' where "Env\<turnstile> B' \<union> assigns_if False c \<guillemotright>\<langle>e2\<rangle>\<guillemotright> E2'"
  1682     obtain E2' where "Env\<turnstile> B' \<union> assigns_if False c \<guillemotright>\<langle>e2\<rangle>\<guillemotright> E2'"
  1683     proof -
  1683     proof -
  1684       from B'
  1684       from B'
  1685       have "(B \<union> assigns_if False c) \<subseteq> (B' \<union> assigns_if False c)"
  1685       have "(B \<union> assigns_if False c) \<subseteq> (B' \<union> assigns_if False c)"
  1686 	by blast
  1686         by blast
  1687       moreover
  1687       moreover
  1688       have "PROP ?Hyp Env (B \<union> assigns_if False c) \<langle>e2\<rangle>" by (rule Cond.hyps)
  1688       have "PROP ?Hyp Env (B \<union> assigns_if False c) \<langle>e2\<rangle>" by (rule Cond.hyps)
  1689       ultimately 
  1689       ultimately 
  1690       show ?thesis using that by iprover
  1690       show ?thesis using that by iprover
  1691     qed
  1691     qed
  1706     obtain A' where "Env\<turnstile> nrm E' \<guillemotright>\<langle>args\<rangle>\<guillemotright> A'"
  1706     obtain A' where "Env\<turnstile> nrm E' \<guillemotright>\<langle>args\<rangle>\<guillemotright> A'"
  1707     proof -
  1707     proof -
  1708       have "Env\<turnstile> B \<guillemotright>\<langle>e\<rangle>\<guillemotright> E" by (rule Call.hyps)
  1708       have "Env\<turnstile> B \<guillemotright>\<langle>e\<rangle>\<guillemotright> E" by (rule Call.hyps)
  1709       from this B' E'
  1709       from this B' E'
  1710       have "nrm E \<subseteq> nrm E'"
  1710       have "nrm E \<subseteq> nrm E'"
  1711 	by (rule da_monotone [THEN conjE])
  1711         by (rule da_monotone [THEN conjE])
  1712       moreover 
  1712       moreover 
  1713       have "PROP ?Hyp Env (nrm E) \<langle>args\<rangle>" by (rule Call.hyps)
  1713       have "PROP ?Hyp Env (nrm E) \<langle>args\<rangle>" by (rule Call.hyps)
  1714       ultimately show ?thesis using that by iprover
  1714       ultimately show ?thesis using that by iprover
  1715     qed  
  1715     qed  
  1716     ultimately
  1716     ultimately
  1726     proof -
  1726     proof -
  1727       have "Env\<turnstile> B \<guillemotright>\<langle>c\<rangle>\<guillemotright> C" by (rule Body.hyps)
  1727       have "Env\<turnstile> B \<guillemotright>\<langle>c\<rangle>\<guillemotright> C" by (rule Body.hyps)
  1728       moreover note B'
  1728       moreover note B'
  1729       moreover
  1729       moreover
  1730       from B' obtain C' where da_c: "Env\<turnstile> B' \<guillemotright>\<langle>c\<rangle>\<guillemotright> C'"
  1730       from B' obtain C' where da_c: "Env\<turnstile> B' \<guillemotright>\<langle>c\<rangle>\<guillemotright> C'"
  1731 	by (rule Body.hyps [elim_format]) blast
  1731         by (rule Body.hyps [elim_format]) blast
  1732       ultimately
  1732       ultimately
  1733       have "nrm C \<subseteq> nrm C'"
  1733       have "nrm C \<subseteq> nrm C'"
  1734 	by (rule da_monotone [THEN conjE])
  1734         by (rule da_monotone [THEN conjE])
  1735       with da_c that show ?thesis by iprover
  1735       with da_c that show ?thesis by iprover
  1736     qed
  1736     qed
  1737     moreover 
  1737     moreover 
  1738     note `Result \<in> nrm C`
  1738     note `Result \<in> nrm C`
  1739     with nrm_C' have "Result \<in> nrm C'"
  1739     with nrm_C' have "Result \<in> nrm C'"
  1760     obtain A' where "Env\<turnstile> nrm E1' \<guillemotright>\<langle>e2\<rangle>\<guillemotright> A'"
  1760     obtain A' where "Env\<turnstile> nrm E1' \<guillemotright>\<langle>e2\<rangle>\<guillemotright> A'"
  1761     proof -
  1761     proof -
  1762       have "Env\<turnstile> B \<guillemotright>\<langle>e1\<rangle>\<guillemotright> E1" by (rule AVar.hyps)
  1762       have "Env\<turnstile> B \<guillemotright>\<langle>e1\<rangle>\<guillemotright> E1" by (rule AVar.hyps)
  1763       from this B' E1'
  1763       from this B' E1'
  1764       have "nrm E1 \<subseteq> nrm E1'"
  1764       have "nrm E1 \<subseteq> nrm E1'"
  1765 	by (rule da_monotone [THEN conjE])
  1765         by (rule da_monotone [THEN conjE])
  1766       moreover 
  1766       moreover 
  1767       have "PROP ?Hyp Env (nrm E1) \<langle>e2\<rangle>" by (rule AVar.hyps)
  1767       have "PROP ?Hyp Env (nrm E1) \<langle>e2\<rangle>" by (rule AVar.hyps)
  1768       ultimately show ?thesis using that by iprover
  1768       ultimately show ?thesis using that by iprover
  1769     qed  
  1769     qed  
  1770     ultimately
  1770     ultimately
  1786     obtain A' where "Env\<turnstile> nrm E' \<guillemotright>\<langle>es\<rangle>\<guillemotright> A'"
  1786     obtain A' where "Env\<turnstile> nrm E' \<guillemotright>\<langle>es\<rangle>\<guillemotright> A'"
  1787     proof -
  1787     proof -
  1788       have "Env\<turnstile> B \<guillemotright>\<langle>e\<rangle>\<guillemotright> E" by (rule Cons.hyps)
  1788       have "Env\<turnstile> B \<guillemotright>\<langle>e\<rangle>\<guillemotright> E" by (rule Cons.hyps)
  1789       from this B' E'
  1789       from this B' E'
  1790       have "nrm E \<subseteq> nrm E'"
  1790       have "nrm E \<subseteq> nrm E'"
  1791 	by (rule da_monotone [THEN conjE])
  1791         by (rule da_monotone [THEN conjE])
  1792       moreover 
  1792       moreover 
  1793       have "PROP ?Hyp Env (nrm E) \<langle>es\<rangle>" by (rule Cons.hyps)
  1793       have "PROP ?Hyp Env (nrm E) \<langle>es\<rangle>" by (rule Cons.hyps)
  1794       ultimately show ?thesis using that by iprover
  1794       ultimately show ?thesis using that by iprover
  1795     qed  
  1795     qed  
  1796     ultimately
  1796     ultimately