src/CCL/Wfd.thy
changeset 41526 54b4686704af
parent 38500 d5477ee35820
child 42364 8c674b3b8e44
equal deleted inserted replaced
41525:a42cbf5b44c8 41526:54b4686704af
   251               ALL x:A. ALL y:{y: B. <<x,y>,<p,q>>:wf(R)}. g(x,y) : D(x,y) |] ==> 
   251               ALL x:A. ALL y:{y: B. <<x,y>,<p,q>>:wf(R)}. g(x,y) : D(x,y) |] ==> 
   252                 h(p,q,g) : D(p,q)"
   252                 h(p,q,g) : D(p,q)"
   253   shows "letrec g x y be h(x,y,g) in g(a,b) : D(a,b)"
   253   shows "letrec g x y be h(x,y,g) in g(a,b) : D(a,b)"
   254   apply (unfold letrec2_def)
   254   apply (unfold letrec2_def)
   255   apply (rule SPLITB [THEN subst])
   255   apply (rule SPLITB [THEN subst])
   256   apply (assumption | rule letrecT pairT splitT prems)+
   256   apply (assumption | rule letrecT pairT splitT assms)+
   257   apply (subst SPLITB)
   257   apply (subst SPLITB)
   258   apply (assumption | rule ballI SubtypeI prems)+
   258   apply (assumption | rule ballI SubtypeI assms)+
   259   apply (rule SPLITB [THEN subst])
   259   apply (rule SPLITB [THEN subst])
   260   apply (assumption | rule letrecT SubtypeI pairT splitT prems |
   260   apply (assumption | rule letrecT SubtypeI pairT splitT assms |
   261     erule bspec SubtypeE sym [THEN subst])+
   261     erule bspec SubtypeE sym [THEN subst])+
   262   done
   262   done
   263 
   263 
   264 lemma lem: "SPLIT(<a,<b,c>>,%x xs. SPLIT(xs,%y z. B(x,y,z))) = B(a,b,c)"
   264 lemma lem: "SPLIT(<a,<b,c>>,%x xs. SPLIT(xs,%y z. B(x,y,z))) = B(a,b,c)"
   265   by (simp add: SPLITB)
   265   by (simp add: SPLITB)
   273                                                         g(x,y,z) : D(x,y,z) |] ==> 
   273                                                         g(x,y,z) : D(x,y,z) |] ==> 
   274                 h(p,q,r,g) : D(p,q,r)"
   274                 h(p,q,r,g) : D(p,q,r)"
   275   shows "letrec g x y z be h(x,y,z,g) in g(a,b,c) : D(a,b,c)"
   275   shows "letrec g x y z be h(x,y,z,g) in g(a,b,c) : D(a,b,c)"
   276   apply (unfold letrec3_def)
   276   apply (unfold letrec3_def)
   277   apply (rule lem [THEN subst])
   277   apply (rule lem [THEN subst])
   278   apply (assumption | rule letrecT pairT splitT prems)+
   278   apply (assumption | rule letrecT pairT splitT assms)+
   279   apply (simp add: SPLITB)
   279   apply (simp add: SPLITB)
   280   apply (assumption | rule ballI SubtypeI prems)+
   280   apply (assumption | rule ballI SubtypeI assms)+
   281   apply (rule lem [THEN subst])
   281   apply (rule lem [THEN subst])
   282   apply (assumption | rule letrecT SubtypeI pairT splitT prems |
   282   apply (assumption | rule letrecT SubtypeI pairT splitT assms |
   283     erule bspec SubtypeE sym [THEN subst])+
   283     erule bspec SubtypeE sym [THEN subst])+
   284   done
   284   done
   285 
   285 
   286 lemmas letrecTs = letrecT letrec2T letrec3T
   286 lemmas letrecTs = letrecT letrec2T letrec3T
   287 
   287 
   518 
   518 
   519 lemma applyV [eval]:
   519 lemma applyV [eval]:
   520   assumes "f ---> lam x. b(x)"
   520   assumes "f ---> lam x. b(x)"
   521     and "b(a) ---> c"
   521     and "b(a) ---> c"
   522   shows "f ` a ---> c"
   522   shows "f ` a ---> c"
   523   unfolding apply_def by (eval prems)
   523   unfolding apply_def by (eval assms)
   524 
   524 
   525 lemma letV:
   525 lemma letV:
   526   assumes 1: "t ---> a"
   526   assumes 1: "t ---> a"
   527     and 2: "f(a) ---> c"
   527     and 2: "f(a) ---> c"
   528   shows "let x be t in f(x) ---> c"
   528   shows "let x be t in f(x) ---> c"