theory Dependency_Template imports Big_Step Vars begin text {* From Homework 5 *} primrec assigned :: "com \ name \ bool" where "assigned SKIP x \ False" | "assigned (x ::= a) y \ (x = y)" | "assigned (c1; c2) x \ assigned c1 x \ assigned c2 x" | "assigned (IF b THEN c1 ELSE c2) x \ assigned c1 x \ assigned c2 x" | "assigned (WHILE b DO c) x \ assigned c x" lemma unassigned_implies_equal: "\ (c, s) \ t; \ assigned c x \ \ s x = t x" by (induct c s t rule: big_step_induct) auto text {* The dependency relation *} inductive influences :: "name \ com \ name \ bool" where "influences x SKIP x" (* add missing rules *) text {* All dependencies of a variable *} abbreviation deps :: "com \ name \ name set" where "deps c x == {y. influences y c x}" text {* A simple lemma that is useful later *} lemma deps_unassigned_keep: "\ assigned c x \ x \ deps c x" oops text {* Main theorem *} lemma deps_sound: "\ (c, s) \ t; s = s' on deps c x; (c, s') \ t' \ \ t x = t' x" oops end