equal
deleted
inserted
replaced
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 |