src/LCF/LCF.thy
changeset 58973 2a683fb686fd
parent 58889 5b7a9633cfa8
child 58975 762ee71498fa
equal deleted inserted replaced
58972:5b026cfc5f04 58973:2a683fb686fd
   316 
   316 
   317 lemmas adm_lemmas =
   317 lemmas adm_lemmas =
   318   adm_not_free adm_eq adm_less adm_not_less
   318   adm_not_free adm_eq adm_less adm_not_less
   319   adm_not_eq_tr adm_conj adm_disj adm_imp adm_all
   319   adm_not_eq_tr adm_conj adm_disj adm_imp adm_all
   320 
   320 
   321 
   321 method_setup induct = {*
   322 ML {*
   322   Scan.lift Args.name >> (fn v => fn ctxt =>
   323   fun induct_tac ctxt v i =
   323     SIMPLE_METHOD' (fn i =>
   324     res_inst_tac ctxt [(("f", 0), v)] @{thm induct} i THEN
   324       res_inst_tac ctxt [(("f", 0), v)] @{thm induct} i THEN
   325     REPEAT (resolve_tac @{thms adm_lemmas} i)
   325       REPEAT (resolve_tac @{thms adm_lemmas} i)))
   326 *}
   326 *}
   327 
   327 
   328 lemma least_FIX: "f(p) = p ==> FIX(f) << p"
   328 lemma least_FIX: "f(p) = p ==> FIX(f) << p"
   329   apply (tactic {* induct_tac @{context} "f" 1 *})
   329   apply (induct f)
   330   apply (rule minimal)
   330   apply (rule minimal)
   331   apply (intro strip)
   331   apply (intro strip)
   332   apply (erule subst)
   332   apply (erule subst)
   333   apply (erule less_ap_term)
   333   apply (erule less_ap_term)
   334   done
   334   done