diff -r 7a1ab11ab023 -r 559c01f40bee FSet.thy --- a/FSet.thy Thu Nov 26 13:52:46 2009 +0100 +++ b/FSet.thy Thu Nov 26 16:23:24 2009 +0100 @@ -355,6 +355,25 @@ thm Set.conj_mono thm Set.imp_mono ML {* Inductive.get_monos @{context} *} +thm LEFT_RES_FORALL_REGULAR + +lemma test: + fixes P Q::"'a \<Rightarrow> bool" + and x::"'a" + assumes a: "REFL R2" + and b: "\<And>f. Q (f x) \<Longrightarrow> P (f x)" + shows "(\<forall>f\<in>(Respects (R1 ===> R2)). Q (f x)) \<longrightarrow> (\<forall>f. P (f x))" +apply(rule impI) +apply(rule allI) +apply(drule_tac x="\<lambda>y. f x" in bspec) +apply(simp add: Respects_def IN_RESPECTS) +apply(rule impI) +using a +apply(simp add: REFL_def) +using b +apply - +apply(simp) +done lemma "\<lbrakk>P EMPTY; \<And>a x. P x \<Longrightarrow> P (INSERT a x)\<rbrakk> \<Longrightarrow> P l" apply(tactic {* procedure_tac @{context} @{thm list.induct} 1 *}) @@ -362,10 +381,17 @@ apply(rule cheat) apply(rule cheat) apply(atomize (full)) -apply(rule my_equiv_res_forallR) -apply(tactic {* resolve_tac (Inductive.get_monos @{context}) 1 *}) -apply(rule my_equiv_res_forallR) -apply(tactic {* resolve_tac (Inductive.get_monos @{context}) 1 *}) +apply(rule RIGHT_RES_FORALL_REGULAR) +apply(rule RIGHT_RES_FORALL_REGULAR) +apply(tactic {* resolve_tac (Inductive.get_monos @{context}) 1 *})+ +apply(rule LEFT_RES_FORALL_REGULAR) +apply(rule conjI) +using list_eq_refl +thm Ball_def IN_RESPECTS FUN_REL.simps + +apply - +apply(simp (no_asm) add: Respects_def) +apply(blast) apply(tactic {* resolve_tac (Inductive.get_monos @{context}) 1 *}) apply(tactic {* resolve_tac (Inductive.get_monos @{context}) 1 *}) apply(tactic {* resolve_tac (Inductive.get_monos @{context}) 1 *}) @@ -373,17 +399,17 @@ apply(tactic {* resolve_tac (Inductive.get_monos @{context}) 1 *}) apply(tactic {* resolve_tac (Inductive.get_monos @{context}) 1 *}) apply(tactic {* resolve_tac (Inductive.get_monos @{context}) 1 *}) -apply(tactic {* resolve_tac (Inductive.get_monos @{context}) 1 *}) -apply(rule my_equiv_res_forallL) -apply(rule cheat) +apply(rule LEFT_RES_FORALL_REGULAR) +apply(rule conjI) +defer apply(tactic {* resolve_tac (Inductive.get_monos @{context}) 1 *}) apply(tactic {* resolve_tac (Inductive.get_monos @{context}) 1 *}) apply(tactic {* resolve_tac (Inductive.get_monos @{context}) 1 *}) apply(tactic {* resolve_tac (Inductive.get_monos @{context}) 1 *}) apply(tactic {* resolve_tac (Inductive.get_monos @{context}) 1 *}) apply(tactic {* resolve_tac (Inductive.get_monos @{context}) 1 *}) -apply(tactic {* resolve_tac (Inductive.get_monos @{context}) 1 *}) -done +apply(unfold Respects_def) +sorry lemma "\<lbrakk>P EMPTY; \<And>a x. P x \<Longrightarrow> P (INSERT a x)\<rbrakk> \<Longrightarrow> P l" apply(tactic {* procedure_tac @{context} @{thm list.induct} 1 *})