[STATEMENT]
lemma not_exact_match_in_doubt_deny_approx_match: "matcher_agree_on_exact_matches \<gamma> \<beta> \<Longrightarrow> a = Accept \<or> a = Reject \<or> a = Drop \<Longrightarrow>
  \<not> Semantics.matches \<gamma> m p \<Longrightarrow>
  ((a = Drop \<or> a = Reject) \<and> Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p) \<or> \<not> Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Reject \<or> a = Drop; \<not> Semantics.matches \<gamma> m p\<rbrakk> \<Longrightarrow> (a = Drop \<or> a = Reject) \<and> Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p \<or> \<not> Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p
[PROOF STEP]
apply(case_tac "ternary_ternary_eval (map_match_tac \<beta> p m) \<noteq> TernaryUnknown")
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Reject \<or> a = Drop; \<not> Semantics.matches \<gamma> m p; ternary_ternary_eval (map_match_tac \<beta> p m) \<noteq> TernaryUnknown\<rbrakk> \<Longrightarrow> (a = Drop \<or> a = Reject) \<and> Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p \<or> \<not> Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p
 2. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Reject \<or> a = Drop; \<not> Semantics.matches \<gamma> m p; \<not> ternary_ternary_eval (map_match_tac \<beta> p m) \<noteq> TernaryUnknown\<rbrakk> \<Longrightarrow> (a = Drop \<or> a = Reject) \<and> Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p \<or> \<not> Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p
[PROOF STEP]
apply(drule(1) matches_comply_exact[where \<alpha>=in_doubt_deny and a=a])
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Reject \<or> a = Drop; \<not> Semantics.matches \<gamma> m p; Semantics.matches \<gamma> m p = Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p\<rbrakk> \<Longrightarrow> (a = Drop \<or> a = Reject) \<and> Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p \<or> \<not> Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p
 2. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Reject \<or> a = Drop; \<not> Semantics.matches \<gamma> m p; \<not> ternary_ternary_eval (map_match_tac \<beta> p m) \<noteq> TernaryUnknown\<rbrakk> \<Longrightarrow> (a = Drop \<or> a = Reject) \<and> Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p \<or> \<not> Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p
[PROOF STEP]
apply(rule disjI2)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Reject \<or> a = Drop; \<not> Semantics.matches \<gamma> m p; Semantics.matches \<gamma> m p = Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p\<rbrakk> \<Longrightarrow> \<not> Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p
 2. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Reject \<or> a = Drop; \<not> Semantics.matches \<gamma> m p; \<not> ternary_ternary_eval (map_match_tac \<beta> p m) \<noteq> TernaryUnknown\<rbrakk> \<Longrightarrow> (a = Drop \<or> a = Reject) \<and> Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p \<or> \<not> Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p
[PROOF STEP]
apply fast
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Reject \<or> a = Drop; \<not> Semantics.matches \<gamma> m p; \<not> ternary_ternary_eval (map_match_tac \<beta> p m) \<noteq> TernaryUnknown\<rbrakk> \<Longrightarrow> (a = Drop \<or> a = Reject) \<and> Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p \<or> \<not> Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p
[PROOF STEP]
apply(simp)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Reject \<or> a = Drop; \<not> Semantics.matches \<gamma> m p; ternary_ternary_eval (map_match_tac \<beta> p m) = TernaryUnknown\<rbrakk> \<Longrightarrow> (a = Drop \<or> a = Reject) \<and> Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p \<or> \<not> Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p
[PROOF STEP]
apply(clarify)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Reject \<or> a = Drop; \<not> Semantics.matches \<gamma> m p; ternary_ternary_eval (map_match_tac \<beta> p m) = TernaryUnknown; Matching_Ternary.matches (\<beta>, in_doubt_deny) m a p; \<not> False; a \<noteq> Reject\<rbrakk> \<Longrightarrow> a = Drop
[PROOF STEP]
apply(simp add: matches_case_ternaryvalue_tuple)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Drop; \<not> Semantics.matches \<gamma> m p; ternary_ternary_eval (map_match_tac \<beta> p m) = TernaryUnknown; in_doubt_deny a p; a \<noteq> Reject\<rbrakk> \<Longrightarrow> a = Drop
[PROOF STEP]
apply(cases a)
[PROOF STATE]
proof (prove)
goal (9 subgoals):
 1. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Drop; \<not> Semantics.matches \<gamma> m p; ternary_ternary_eval (map_match_tac \<beta> p m) = TernaryUnknown; in_doubt_deny a p; a \<noteq> Reject; a = Accept\<rbrakk> \<Longrightarrow> a = Drop
 2. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Drop; \<not> Semantics.matches \<gamma> m p; ternary_ternary_eval (map_match_tac \<beta> p m) = TernaryUnknown; in_doubt_deny a p; a \<noteq> Reject; a = Drop\<rbrakk> \<Longrightarrow> a = Drop
 3. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Drop; \<not> Semantics.matches \<gamma> m p; ternary_ternary_eval (map_match_tac \<beta> p m) = TernaryUnknown; in_doubt_deny a p; a \<noteq> Reject; a = Log\<rbrakk> \<Longrightarrow> a = Drop
 4. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Drop; \<not> Semantics.matches \<gamma> m p; ternary_ternary_eval (map_match_tac \<beta> p m) = TernaryUnknown; in_doubt_deny a p; a \<noteq> Reject; a = Reject\<rbrakk> \<Longrightarrow> a = Drop
 5. \<And>x5. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Drop; \<not> Semantics.matches \<gamma> m p; ternary_ternary_eval (map_match_tac \<beta> p m) = TernaryUnknown; in_doubt_deny a p; a \<noteq> Reject; a = Call x5\<rbrakk> \<Longrightarrow> a = Drop
 6. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Drop; \<not> Semantics.matches \<gamma> m p; ternary_ternary_eval (map_match_tac \<beta> p m) = TernaryUnknown; in_doubt_deny a p; a \<noteq> Reject; a = Return\<rbrakk> \<Longrightarrow> a = Drop
 7. \<And>x7. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Drop; \<not> Semantics.matches \<gamma> m p; ternary_ternary_eval (map_match_tac \<beta> p m) = TernaryUnknown; in_doubt_deny a p; a \<noteq> Reject; a = Goto x7\<rbrakk> \<Longrightarrow> a = Drop
 8. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Drop; \<not> Semantics.matches \<gamma> m p; ternary_ternary_eval (map_match_tac \<beta> p m) = TernaryUnknown; in_doubt_deny a p; a \<noteq> Reject; a = Empty\<rbrakk> \<Longrightarrow> a = Drop
 9. \<lbrakk>matcher_agree_on_exact_matches \<gamma> \<beta>; a = Accept \<or> a = Drop; \<not> Semantics.matches \<gamma> m p; ternary_ternary_eval (map_match_tac \<beta> p m) = TernaryUnknown; in_doubt_deny a p; a \<noteq> Reject; a = Unknown\<rbrakk> \<Longrightarrow> a = Drop
[PROOF STEP]
apply(simp_all)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done