Ball Bex can be lifted after unfolding.
authorCezary Kaliszyk <kaliszyk@in.tum.de>
Fri, 27 Aug 2010 02:25:40 +0000
changeset 2441 fc3e8f79e698
parent 2440 0a36825b16c1
child 2442 1f9360daf6e1
Ball Bex can be lifted after unfolding.
Attic/Quot/Examples/FSet_BallBex.thy
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Attic/Quot/Examples/FSet_BallBex.thy	Fri Aug 27 02:25:40 2010 +0000
@@ -0,0 +1,40 @@
+theory FSet_ballbex
+imports "../../../Nominal/FSet"
+begin
+
+notation
+  list_eq (infix "\<approx>" 50)
+
+lemma test:
+  "\<forall>xs \<in> (\<lambda>xs. memb x xs). memb x (y # xs)"
+  apply (simp add: memb_def)
+  apply (metis mem_def)
+  done
+
+(* Should not work and doesn't.
+thm test[quot_lifted]
+*)
+
+lemma "\<forall>xs \<in> (\<lambda>xs. x |\<in>| xs). x |\<in>| finsert y xs"
+  unfolding Ball_def mem_def
+  by (lifting test[unfolded Ball_def mem_def])
+
+ML {* Quotient_Tacs.lifted @{context} [@{typ "'a fset"}] @{thms Ball_def Bex_def mem_def} @{thm test}*}
+
+lemma test2:
+  "\<exists>xs \<in> (\<lambda>xs. xs \<approx> []). xs \<approx> []"
+  apply (rule_tac x="[]" in bexI)
+  apply (auto simp add: mem_def)
+  done
+
+(* Should not work and doesn't
+thm test2[quot_lifted]
+*)
+
+lemma "\<exists>xs \<in> (\<lambda>xs. xs = {||}). xs = {||}"
+  unfolding Bex_def mem_def
+  by (lifting test2[unfolded Bex_def mem_def])
+
+ML {* Quotient_Tacs.lifted @{context} [@{typ "'a fset"}] @{thms Bex_def mem_def} @{thm test2}*}
+
+end