src/HOL/ex/Primrec.thy
changeset 16588 8de758143786
parent 16563 a92f96951355
child 16731 124b4782944f
equal deleted inserted replaced
16587:b34c8aa657a5 16588:8de758143786
   284   "\<forall>l. g l < ack (kg, list_add l) ==>
   284   "\<forall>l. g l < ack (kg, list_add l) ==>
   285   fs \<in> lists(PRIMREC Int {f. \<exists>kf. \<forall>l. f l < ack(kf, list_add l)})
   285   fs \<in> lists(PRIMREC Int {f. \<exists>kf. \<forall>l. f l < ack(kf, list_add l)})
   286   ==> \<exists>k. \<forall>l. COMP g fs  l < ack(k, list_add l)"
   286   ==> \<exists>k. \<forall>l. COMP g fs  l < ack(k, list_add l)"
   287   apply (unfold COMP_def)
   287   apply (unfold COMP_def)
   288   apply (frule Int_lower1 [THEN lists_mono, THEN subsetD])
   288   apply (frule Int_lower1 [THEN lists_mono, THEN subsetD])
   289   apply (drule COMP_map_aux)
   289     --{*Now, if meson tolerated map, we could finish with
   290   apply (meson ack_less_mono2 ack_nest_bound less_trans)
   290   @{text "(drule COMP_map_aux, meson ack_less_mono2 ack_nest_bound less_trans).*}
       
   291   apply (erule COMP_map_aux [THEN exE])
       
   292   apply (rule exI)
       
   293   apply (rule allI)
       
   294   apply (drule spec)+
       
   295   apply (erule less_trans)
       
   296   apply (blast intro: ack_less_mono2 ack_nest_bound less_trans)
   291   done
   297   done
   292 
   298 
   293 
   299 
   294 text {* @{term PREC} case *}
   300 text {* @{term PREC} case *}
   295 
   301