# HG changeset patch # User huffman # Date 1333548181 -7200 # Node ID 3d9d98e0f1a418b503905e1c884647f52631acb2 # Parent 95846613e414fcfaa26c204eb76203d98e5e3d8e add bounded quantifier constant transfer_bforall, whose definition is unfolded after transfer diff -r 95846613e414 -r 3d9d98e0f1a4 src/HOL/Tools/transfer.ML --- a/src/HOL/Tools/transfer.ML Wed Apr 04 12:25:58 2012 +0200 +++ b/src/HOL/Tools/transfer.ML Wed Apr 04 16:03:01 2012 +0200 @@ -113,6 +113,10 @@ rtac thm2 i end handle Match => no_tac | TERM _ => no_tac) +val post_simps = + @{thms App_def Abs_def transfer_forall_eq [symmetric] + transfer_implies_eq [symmetric] transfer_bforall_unfold} + fun transfer_tac ctxt = SUBGOAL (fn (t, i) => let val bs = bnames t @@ -128,8 +132,7 @@ rtac @{thm equal_elim_rule1} i THEN rtac (Thm.reflexive (cert ctxt (fst (rename bs u)))) i) i, (* FIXME: rewrite_goal_tac does unwanted eta-contraction *) - rewrite_goal_tac @{thms App_def Abs_def} i, - rewrite_goal_tac @{thms transfer_forall_eq [symmetric] transfer_implies_eq [symmetric]} i, + rewrite_goal_tac post_simps i, rtac @{thm _} i] end) diff -r 95846613e414 -r 3d9d98e0f1a4 src/HOL/Transfer.thy --- a/src/HOL/Transfer.thy Wed Apr 04 12:25:58 2012 +0200 +++ b/src/HOL/Transfer.thy Wed Apr 04 16:03:01 2012 +0200 @@ -62,12 +62,19 @@ definition transfer_implies where "transfer_implies \ op \" +definition transfer_bforall :: "('a \ bool) \ ('a \ bool) \ bool" + where "transfer_bforall \ (\P Q. \x. P x \ Q x)" + lemma transfer_forall_eq: "(\x. P x) \ Trueprop (transfer_forall (\x. P x))" unfolding atomize_all transfer_forall_def .. lemma transfer_implies_eq: "(A \ B) \ Trueprop (transfer_implies A B)" unfolding atomize_imp transfer_implies_def .. +lemma transfer_bforall_unfold: + "Trueprop (transfer_bforall P (\x. Q x)) \ (\x. P x \ Q x)" + unfolding transfer_bforall_def atomize_imp atomize_all .. + lemma transfer_start: "\Rel (op =) P Q; P\ \ Q" unfolding Rel_def by simp