src/HOL/Library/Nested_Environment.thy
changeset 20503 503ac4c5ef91
parent 18576 8d98b7711e47
child 23394 474ff28210c0
equal deleted inserted replaced
20502:08d227db6c74 20503:503ac4c5ef91
   102 
   102 
   103 theorem lookup_append_none:
   103 theorem lookup_append_none:
   104   assumes "lookup env xs = None"
   104   assumes "lookup env xs = None"
   105   shows "lookup env (xs @ ys) = None"
   105   shows "lookup env (xs @ ys) = None"
   106   using prems
   106   using prems
   107 proof (induct xs fixing: env)
   107 proof (induct xs arbitrary: env)
   108   case Nil
   108   case Nil
   109   then have False by simp
   109   then have False by simp
   110   then show ?case ..
   110   then show ?case ..
   111 next
   111 next
   112   case (Cons x xs)
   112   case (Cons x xs)
   139 
   139 
   140 theorem lookup_append_some:
   140 theorem lookup_append_some:
   141   assumes "lookup env xs = Some e"
   141   assumes "lookup env xs = Some e"
   142   shows "lookup env (xs @ ys) = lookup e ys"
   142   shows "lookup env (xs @ ys) = lookup e ys"
   143   using prems
   143   using prems
   144 proof (induct xs fixing: env e)
   144 proof (induct xs arbitrary: env e)
   145   case Nil
   145   case Nil
   146   then have "env = e" by simp
   146   then have "env = e" by simp
   147   then show "lookup env ([] @ ys) = lookup e ys" by simp
   147   then show "lookup env ([] @ ys) = lookup e ys" by simp
   148 next
   148 next
   149   case (Cons x xs)
   149   case (Cons x xs)
   207   shows "\<exists>b' es' env'.
   207   shows "\<exists>b' es' env'.
   208     lookup env xs = Some (Env b' es') \<and>
   208     lookup env xs = Some (Env b' es') \<and>
   209     es' y = Some env' \<and>
   209     es' y = Some env' \<and>
   210     lookup env' ys = Some e"
   210     lookup env' ys = Some e"
   211   using prems
   211   using prems
   212 proof (induct xs fixing: env e)
   212 proof (induct xs arbitrary: env e)
   213   case Nil
   213   case Nil
   214   from Nil.prems have "lookup env (y # ys) = Some e"
   214   from Nil.prems have "lookup env (y # ys) = Some e"
   215     by simp
   215     by simp
   216   then obtain b' es' env' where
   216   then obtain b' es' env' where
   217       env: "env = Env b' es'" and
   217       env: "env = Env b' es'" and
   327 
   327 
   328 theorem lookup_update_some:
   328 theorem lookup_update_some:
   329   assumes "lookup env xs = Some e"
   329   assumes "lookup env xs = Some e"
   330   shows "lookup (update xs (Some env') env) xs = Some env'"
   330   shows "lookup (update xs (Some env') env) xs = Some env'"
   331   using prems
   331   using prems
   332 proof (induct xs fixing: env e)
   332 proof (induct xs arbitrary: env e)
   333   case Nil
   333   case Nil
   334   then have "env = e" by simp
   334   then have "env = e" by simp
   335   then show ?case by simp
   335   then show ?case by simp
   336 next
   336 next
   337   case (Cons x xs)
   337   case (Cons x xs)
   376 
   376 
   377 theorem update_append_none:
   377 theorem update_append_none:
   378   assumes "lookup env xs = None"
   378   assumes "lookup env xs = None"
   379   shows "update (xs @ y # ys) opt env = env"
   379   shows "update (xs @ y # ys) opt env = env"
   380   using prems
   380   using prems
   381 proof (induct xs fixing: env)
   381 proof (induct xs arbitrary: env)
   382   case Nil
   382   case Nil
   383   then have False by simp
   383   then have False by simp
   384   then show ?case ..
   384   then show ?case ..
   385 next
   385 next
   386   case (Cons x xs)
   386   case (Cons x xs)
   419 
   419 
   420 theorem update_append_some:
   420 theorem update_append_some:
   421   assumes "lookup env xs = Some e"
   421   assumes "lookup env xs = Some e"
   422   shows "lookup (update (xs @ y # ys) opt env) xs = Some (update (y # ys) opt e)"
   422   shows "lookup (update (xs @ y # ys) opt env) xs = Some (update (y # ys) opt e)"
   423   using prems
   423   using prems
   424 proof (induct xs fixing: env e)
   424 proof (induct xs arbitrary: env e)
   425   case Nil
   425   case Nil
   426   then have "env = e" by simp
   426   then have "env = e" by simp
   427   then show ?case by simp
   427   then show ?case by simp
   428 next
   428 next
   429   case (Cons x xs)
   429   case (Cons x xs)
   470 
   470 
   471 theorem lookup_update_other:
   471 theorem lookup_update_other:
   472   assumes neq: "y \<noteq> (z::'c)"
   472   assumes neq: "y \<noteq> (z::'c)"
   473   shows "lookup (update (xs @ z # zs) opt env) (xs @ y # ys) =
   473   shows "lookup (update (xs @ z # zs) opt env) (xs @ y # ys) =
   474     lookup env (xs @ y # ys)"
   474     lookup env (xs @ y # ys)"
   475 proof (induct xs fixing: env)
   475 proof (induct xs arbitrary: env)
   476   case Nil
   476   case Nil
   477   show ?case
   477   show ?case
   478   proof (cases env)
   478   proof (cases env)
   479     case Val
   479     case Val
   480     then show ?thesis by simp
   480     then show ?thesis by simp