src/ZF/func.thy
changeset 13175 81082cfa5618
parent 13174 85d3c0981a16
child 13176 312bd350579b
--- a/src/ZF/func.thy	Wed May 22 19:34:01 2002 +0200
+++ b/src/ZF/func.thy	Thu May 23 17:05:21 2002 +0200
@@ -58,7 +58,7 @@
 (*Applying a function outside its domain yields 0*)
 lemma apply_0: "a ~: domain(f) ==> f`a = 0"
 apply (unfold apply_def)
-apply (rule the_0, blast)
+apply (blast intro: elim:); 
 done
 
 lemma Pi_memberD: "[| f: Pi(A,B);  c: f |] ==> EX x:A.  c = <x,f`x>"
@@ -67,8 +67,12 @@
 done
 
 lemma function_apply_Pair: "[| function(f);  a : domain(f)|] ==> <a,f`a>: f"
-apply (simp add: function_def apply_def)
-apply (rule theI2, auto)
+apply (simp add: function_def)
+apply (clarify ); 
+apply (subgoal_tac "f`a = y") 
+apply (blast intro: elim:); 
+apply (simp add: apply_def); 
+apply (blast intro: elim:); 
 done
 
 lemma apply_Pair: "[| f: Pi(A,B);  a:A |] ==> <a,f`a>: f"
@@ -145,8 +149,15 @@
 lemma relation_lam: "relation (lam x:A. b(x))"  
 by (simp add: relation_def lam_def) 
 
-lemma beta [simp]: "a : A ==> (lam x:A. b(x)) ` a = b(a)"
-by (blast intro: apply_equality lam_funtype lamI)
+lemma beta_if [simp]: "(lam x:A. b(x)) ` a = (if a : A then b(a) else 0)"
+apply (simp add: apply_def lam_def) 
+apply (blast intro: elim:); 
+done
+
+lemma beta: "a : A ==> (lam x:A. b(x)) ` a = b(a)"
+apply (simp add: apply_def lam_def) 
+apply (blast intro: elim:); 
+done
 
 lemma lam_empty [simp]: "(lam x:0. b(x)) = 0"
 by (simp add: lam_def)
@@ -161,9 +172,8 @@
 
 lemma lam_theI:
     "(!!x. x:A ==> EX! y. Q(x,y)) ==> EX f. ALL x:A. Q(x, f`x)"
-apply (rule_tac x = "lam x: A. THE y. Q (x,y) " in exI)
-apply (rule ballI)
-apply (subst beta, assumption)
+apply (rule_tac x = "lam x: A. THE y. Q (x,y)" in exI)
+apply (simp add: ); 
 apply (blast intro: theI)
 done
 
@@ -263,7 +273,9 @@
 by (simp add: Pi_iff function_def restrict_def, blast)
 
 lemma restrict: "a : A ==> restrict(f,A) ` a = f`a"
-by (simp add: apply_def restrict_def)
+apply (simp add: apply_def restrict_def)
+apply (blast intro: elim:); 
+done
 
 lemma restrict_empty [simp]: "restrict(f,0) = 0"
 apply (unfold restrict_def)