src/LCF/LCF.thy
changeset 22810 a8455ca995d6
parent 19758 093690d4ba60
child 27208 5fe899199f85
equal deleted inserted replaced
22809:3cf5df73d50a 22810:a8455ca995d6
    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