Quot/Examples/LamEx.thy
changeset 902 82cdc3755c2c
parent 901 28e084a66c7f
child 903 f7cafd3c86b0
equal deleted inserted replaced
901:28e084a66c7f 902:82cdc3755c2c
   481 apply(simp)
   481 apply(simp)
   482 apply(simp)
   482 apply(simp)
   483 sorry
   483 sorry
   484 
   484 
   485 function
   485 function
   486   term1_hom :: "(name \<Rightarrow> 'a) \<Rightarrow> (rlam \<Rightarrow> rlam \<Rightarrow> 'a \<Rightarrow> 'a \<Rightarrow> 'a) \<Rightarrow> ((name \<Rightarrow> rlam) \<Rightarrow> (name \<Rightarrow> 'a) \<Rightarrow> 'a) \<Rightarrow> rlam \<Rightarrow> 'a"
   486   term1_hom :: "(name \<Rightarrow> 'a) \<Rightarrow> 
       
   487                 (rlam \<Rightarrow> rlam \<Rightarrow> 'a \<Rightarrow> 'a \<Rightarrow> 'a) \<Rightarrow> 
       
   488                 ((name \<Rightarrow> rlam) \<Rightarrow> (name \<Rightarrow> 'a) \<Rightarrow> 'a) \<Rightarrow> rlam \<Rightarrow> 'a"
   487 where
   489 where
   488   "term1_hom var app abs' (rVar x) = (var x)"
   490   "term1_hom var app abs' (rVar x) = (var x)"
   489 | "term1_hom var app abs' (rApp t u) =
   491 | "term1_hom var app abs' (rApp t u) =
   490      app t u (term1_hom var app abs' t) (term1_hom var app abs' u)"
   492      app t u (term1_hom var app abs' t) (term1_hom var app abs' u)"
   491 | "term1_hom var app abs' (rLam x u) =
   493 | "term1_hom var app abs' (rLam x u) =
   492      abs' (\<lambda>y. [(x, y)] \<bullet> u) (\<lambda>y. term1_hom var app abs' ([(x, y)] \<bullet> u))"
   494      abs' (\<lambda>y. [(x, y)] \<bullet> u) (\<lambda>y. term1_hom var app abs' ([(x, y)] \<bullet> u))"
   493 sorry
   495 apply(pat_completeness)
   494 
   496 apply(auto)
   495 print_theorems
   497 done
       
   498 
       
   499 lemma pi_size:
       
   500   fixes pi::"name prm"
       
   501   and   t::"rlam"
       
   502   shows "size (pi \<bullet> t) = size t"
       
   503 apply(induct t)
       
   504 apply(auto)
       
   505 done
       
   506 
       
   507 termination term1_hom
       
   508   apply -
       
   509   apply(relation "measure (\<lambda>(f1, f2, f3, t). size t)")
       
   510 apply(auto simp add: pi_size)
       
   511 done
   496 
   512 
   497 lemma hom_res: "
   513 lemma hom_res: "
   498 \<forall>f_var. \<forall>f_app \<in> Respects(alpha ===> alpha ===> op =).
   514 \<forall>f_var. \<forall>f_app \<in> Respects(alpha ===> alpha ===> op =).
   499 \<forall>f_lam \<in> Respects((op = ===> alpha) ===> op =).
   515 \<forall>f_lam \<in> Respects((op = ===> alpha) ===> op =).
   500 \<exists>hom\<in>Respects (alpha ===> op =). 
   516 \<exists>hom\<in>Respects (alpha ===> op =).