equal
deleted
inserted
replaced
41 WHEN :: "['a=>'c, 'b=>'c, 'a+'b] => 'c" |
41 WHEN :: "['a=>'c, 'b=>'c, 'a+'b] => 'c" |
42 adm :: "('a => o) => o" |
42 adm :: "('a => o) => o" |
43 VOID :: "void" ("'(')") |
43 VOID :: "void" ("'(')") |
44 PAIR :: "['a,'b] => 'a*'b" ("(1<_,/_>)" [0,0] 100) |
44 PAIR :: "['a,'b] => 'a*'b" ("(1<_,/_>)" [0,0] 100) |
45 COND :: "[tr,'a,'a] => 'a" ("(_ =>/ (_ |/ _))" [60,60,60] 60) |
45 COND :: "[tr,'a,'a] => 'a" ("(_ =>/ (_ |/ _))" [60,60,60] 60) |
46 "<<" :: "['a,'a] => o" (infixl 50) |
46 less :: "['a,'a] => o" (infixl "<<" 50) |
47 |
47 |
48 axioms |
48 axioms |
49 (** DOMAIN THEORY **) |
49 (** DOMAIN THEORY **) |
50 |
50 |
51 eq_def: "x=y == x << y & y << x" |
51 eq_def: "x=y == x << y & y << x" |
314 adm_not_free adm_eq adm_less adm_not_less |
314 adm_not_free adm_eq adm_less adm_not_less |
315 adm_not_eq_tr adm_conj adm_disj adm_imp adm_all |
315 adm_not_eq_tr adm_conj adm_disj adm_imp adm_all |
316 |
316 |
317 |
317 |
318 ML {* |
318 ML {* |
319 local |
|
320 val adm_lemmas = thms "adm_lemmas" |
|
321 val induct = thm "induct" |
|
322 in |
|
323 fun induct_tac v i = |
319 fun induct_tac v i = |
324 res_inst_tac[("f",v)] induct i THEN REPEAT (resolve_tac adm_lemmas i) |
320 res_inst_tac[("f",v)] @{thm induct} i THEN |
325 end |
321 REPEAT (resolve_tac @{thms adm_lemmas} i) |
326 *} |
322 *} |
327 |
323 |
328 lemma least_FIX: "f(p) = p ==> FIX(f) << p" |
324 lemma least_FIX: "f(p) = p ==> FIX(f) << p" |
329 apply (tactic {* induct_tac "f" 1 *}) |
325 apply (tactic {* induct_tac "f" 1 *}) |
330 apply (rule minimal) |
326 apply (rule minimal) |
377 apply (simp add: expand_all_PROD) |
373 apply (simp add: expand_all_PROD) |
378 apply (rule 3) |
374 apply (rule 3) |
379 done |
375 done |
380 |
376 |
381 ML {* |
377 ML {* |
382 local |
|
383 val induct2 = thm "induct2" |
|
384 val adm_lemmas = thms "adm_lemmas" |
|
385 in |
|
386 |
|
387 fun induct2_tac (f,g) i = |
378 fun induct2_tac (f,g) i = |
388 res_inst_tac[("f",f),("g",g)] induct2 i THEN |
379 res_inst_tac[("f",f),("g",g)] @{thm induct2} i THEN |
389 REPEAT(resolve_tac adm_lemmas i) |
380 REPEAT(resolve_tac @{thms adm_lemmas} i) |
|
381 *} |
390 |
382 |
391 end |
383 end |
392 *} |
|
393 |
|
394 end |
|