added prs and rsp lemmas for Some and None
authorChristian Urban <urbanc@in.tum.de>
Mon, 25 Jan 2010 19:52:53 +0100
changeset 923 0419b20ee83c
parent 922 a2589b4bc442
child 924 5455b19ef138
added prs and rsp lemmas for Some and None
Quot/QuotOption.thy
--- a/Quot/QuotOption.thy	Mon Jan 25 19:14:46 2010 +0100
+++ b/Quot/QuotOption.thy	Mon Jan 25 19:52:53 2010 +0100
@@ -22,80 +22,72 @@
 lemma option_quotient[quot_thm]:
   assumes q: "Quotient R Abs Rep"
   shows "Quotient (option_rel R) (option_map Abs) (option_map Rep)"
-  apply (unfold Quotient_def)
-  apply (rule conjI)
-  apply (rule allI)
-  apply (case_tac a)
-  apply (simp_all add: Quotient_abs_rep[OF q])
-  apply (rule conjI)
-  apply (rule allI)
-  apply (case_tac a)
-  apply (simp_all add: Quotient_rel_rep[OF q])
-  apply (rule allI)+
-  apply (case_tac r)
-  apply (case_tac s)
-  apply (simp_all add: Quotient_abs_rep[OF q] add: Quotient_rel_rep[OF q])
-  apply (case_tac s)
-  apply (simp_all add: Quotient_abs_rep[OF q] add: Quotient_rel_rep[OF q])
+  apply(unfold Quotient_def)
+  apply(auto)
+  apply(case_tac a, simp_all add: Quotient_abs_rep[OF q] Quotient_rel_rep[OF q])
+  apply(case_tac a, simp_all add: Quotient_abs_rep[OF q] Quotient_rel_rep[OF q])
+  apply(case_tac [!] r)
+  apply(case_tac [!] s)
+  apply(simp_all add: Quotient_abs_rep[OF q] Quotient_rel_rep[OF q] )
   using q
   unfolding Quotient_def
-  apply metis
-done
-
-lemma option_rel_some:
-  assumes e: "equivp R"
-  and     a: "option_rel R (Some a) = option_rel R (Some aa)"
-  shows      "R a aa"
-using a apply(drule_tac x="Some aa" in fun_cong)
-apply(simp add: equivp_reflp[OF e])
-done
-
+  apply(blast)+
+  done
+  
 lemma option_equivp[quot_equiv]:
   assumes a: "equivp R"
   shows "equivp (option_rel R)"
-  unfolding equivp_def
-  apply(rule allI)+
-  apply(case_tac x)
-  apply(case_tac y)
-  apply(simp_all)
-  apply(unfold not_def)
-  apply(rule impI)
-  apply(drule_tac x="None" in fun_cong)
-  apply simp
-  apply(case_tac y)
+  apply(rule equivpI)
+  unfolding reflp_def symp_def transp_def
+  apply(auto)
+  apply(case_tac [!] x)
+  apply(simp_all add: equivp_reflp[OF a])
+  apply(case_tac [!] y)
+  apply(simp_all add: equivp_symp[OF a])
+  apply(case_tac [!] z)
   apply(simp_all)
-  apply(unfold not_def)
-  apply(rule impI)
-  apply(drule_tac x="None" in fun_cong)
-  apply simp
-  apply(rule iffI)
-  apply(rule ext)
-  apply(case_tac xa)
-  apply(auto)
-  apply(rule equivp_transp[OF a])
-  apply(rule equivp_symp[OF a])
-  apply(assumption)+
+  apply(clarify)
   apply(rule equivp_transp[OF a])
   apply(assumption)+
-  apply(simp only: option_rel_some[OF a])
   done
 
-lemma option_map_id[id_simps]: "option_map id \<equiv> id"
+lemma option_None_rsp[quot_respect]:
+  assumes q: "Quotient R Abs Rep"
+  shows "option_rel R None None"
+  by simp
+
+lemma option_Some_rsp[quot_respect]:
+  assumes q: "Quotient R Abs Rep"
+  shows "(R ===> option_rel R) Some Some"
+  by simp
+
+lemma option_None_prs[quot_preserve]:
+  assumes q: "Quotient R Abs Rep"
+  shows "option_map Abs None = None"
+  by simp
+
+lemma option_Some_prs[quot_respect]:
+  assumes q: "Quotient R Abs Rep"
+  shows "(Rep ---> option_map Abs) Some = Some"
+  apply(simp add: expand_fun_eq)
+  apply(simp add: Quotient_abs_rep[OF q])
+  done
+
+lemma option_map_id[id_simps]: 
+  shows "option_map id \<equiv> id"
   apply (rule eq_reflection)
-  apply (rule ext)
+  apply (auto simp add: expand_fun_eq)
   apply (case_tac x)
   apply (auto)
   done
 
-lemma option_rel_eq[id_simps]: "option_rel op = \<equiv> op ="
-  apply (rule eq_reflection)
-  apply (rule ext)+
-  apply (case_tac x)
-  apply auto
-  apply (case_tac xa)
-  apply auto
-  apply (case_tac xa)
-  apply auto
+lemma option_rel_eq[id_simps]: 
+  shows "option_rel op = \<equiv> op ="
+  apply(rule eq_reflection)
+  apply(auto simp add: expand_fun_eq)
+  apply(case_tac x)
+  apply(case_tac [!] xa)
+  apply(auto)
   done
 
 end