equal
deleted
inserted
replaced
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 |