--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOLCF/Adm.ML Tue May 24 05:03:54 2005 +0200
@@ -0,0 +1,34 @@
+
+(* legacy ML bindings *)
+
+val adm_def = thm "adm_def";
+val admI = thm "admI";
+val triv_admI = thm "triv_admI";
+val admD = thm "admD";
+val adm_max_in_chain = thm "adm_max_in_chain";
+val adm_chfin = thm "adm_chfin";
+val adm_chfindom = thm "adm_chfindom";
+val admI2 = thm "admI2";
+val adm_less = thm "adm_less";
+val adm_conj = thm "adm_conj";
+val adm_not_free = thm "adm_not_free";
+val adm_not_less = thm "adm_not_less";
+val adm_all = thm "adm_all";
+val adm_all2 = thm "adm_all2";
+val adm_subst = thm "adm_subst";
+val adm_UU_not_less = thm "adm_UU_not_less";
+val adm_not_UU = thm "adm_not_UU";
+val adm_eq = thm "adm_eq";
+val adm_disj_lemma1 = thm "adm_disj_lemma1";
+val adm_disj_lemma2 = thm "adm_disj_lemma2";
+val adm_disj_lemma3 = thm "adm_disj_lemma3";
+val adm_disj_lemma4 = thm "adm_disj_lemma4";
+val adm_disj_lemma5 = thm "adm_disj_lemma5";
+val adm_disj_lemma6 = thm "adm_disj_lemma6";
+val adm_disj_lemma7 = thm "adm_disj_lemma7";
+val adm_disj = thm "adm_disj";
+val adm_imp = thm "adm_imp";
+val adm_iff = thm "adm_iff";
+val adm_not_conj = thm "adm_not_conj";
+val adm_lemmas = [adm_not_free, adm_imp, adm_disj, adm_eq, adm_not_UU,
+ adm_UU_not_less, adm_all2, adm_not_less, adm_not_conj, adm_iff]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOLCF/Adm.thy Tue May 24 05:03:54 2005 +0200
@@ -0,0 +1,264 @@
+(* Title: HOLCF/Adm.thy
+ ID: $Id$
+ Author: Franz Regensburger
+ License: GPL (GNU GENERAL PUBLIC LICENSE)
+*)
+
+header {* Admissibility *}
+
+theory Adm
+imports Cfun
+begin
+
+defaultsort cpo
+
+subsection {* Definitions *}
+
+consts
+adm :: "('a::cpo=>bool)=>bool"
+
+defs
+adm_def: "adm P == !Y. chain(Y) -->
+ (!i. P(Y i)) --> P(lub(range Y))"
+
+subsection {* Admissibility and fixed point induction *}
+
+text {* access to definitions *}
+
+lemma admI:
+ "(!!Y. [| chain Y; !i. P (Y i) |] ==> P (lub (range Y))) ==> adm P"
+apply (unfold adm_def)
+apply blast
+done
+
+lemma triv_admI: "!x. P x ==> adm P"
+apply (rule admI)
+apply (erule spec)
+done
+
+lemma admD: "[| adm(P); chain(Y); !i. P(Y(i)) |] ==> P(lub(range(Y)))"
+apply (unfold adm_def)
+apply blast
+done
+
+text {* for chain-finite (easy) types every formula is admissible *}
+
+lemma adm_max_in_chain:
+"!Y. chain(Y::nat=>'a) --> (? n. max_in_chain n Y) ==> adm(P::'a=>bool)"
+apply (unfold adm_def)
+apply (intro strip)
+apply (rule exE)
+apply (rule mp)
+apply (erule spec)
+apply assumption
+apply (subst lub_finch1 [THEN thelubI])
+apply assumption
+apply assumption
+apply (erule spec)
+done
+
+lemmas adm_chfin = chfin [THEN adm_max_in_chain, standard]
+
+text {* some lemmata for functions with flat/chfin domain/range types *}
+
+lemma adm_chfindom: "adm (%(u::'a::cpo->'b::chfin). P(u$s))"
+apply (unfold adm_def)
+apply (intro strip)
+apply (drule chfin_Rep_CFunR)
+apply (erule_tac x = "s" in allE)
+apply clarsimp
+done
+
+(* adm_flat not needed any more, since it is a special case of adm_chfindom *)
+
+text {* improved admissibility introduction *}
+
+lemma admI2:
+ "(!!Y. [| chain Y; !i. P (Y i); !i. ? j. i < j & Y i ~= Y j & Y i << Y j |]
+ ==> P(lub (range Y))) ==> adm P"
+apply (unfold adm_def)
+apply (intro strip)
+apply (erule increasing_chain_adm_lemma)
+apply assumption
+apply fast
+done
+
+text {* admissibility of special formulae and propagation *}
+
+lemma adm_less [simp]: "[|cont u;cont v|]==> adm(%x. u x << v x)"
+apply (unfold adm_def)
+apply (intro strip)
+apply (frule_tac f = "u" in cont2mono [THEN ch2ch_monofun])
+apply assumption
+apply (frule_tac f = "v" in cont2mono [THEN ch2ch_monofun])
+apply assumption
+apply (erule cont2contlub [THEN contlubE, THEN spec, THEN mp, THEN ssubst])
+apply assumption
+apply (erule cont2contlub [THEN contlubE, THEN spec, THEN mp, THEN ssubst])
+apply assumption
+apply (blast intro: lub_mono)
+done
+
+lemma adm_conj [simp]: "[| adm P; adm Q |] ==> adm(%x. P x & Q x)"
+by (fast elim: admD intro: admI)
+
+lemma adm_not_free [simp]: "adm(%x. t)"
+apply (unfold adm_def)
+apply fast
+done
+
+lemma adm_not_less: "cont t ==> adm(%x.~ (t x) << u)"
+apply (unfold adm_def)
+apply (intro strip)
+apply (rule contrapos_nn)
+apply (erule spec)
+apply (rule trans_less)
+prefer 2 apply (assumption)
+apply (erule cont2mono [THEN monofun_fun_arg])
+apply (rule is_ub_thelub)
+apply assumption
+done
+
+lemma adm_all: "!y. adm(P y) ==> adm(%x.!y. P y x)"
+by (fast intro: admI elim: admD)
+
+lemmas adm_all2 = allI [THEN adm_all, standard]
+
+lemma adm_subst: "[|cont t; adm P|] ==> adm(%x. P (t x))"
+apply (rule admI)
+apply (simplesubst cont2contlub [THEN contlubE, THEN spec, THEN mp])
+apply assumption
+apply assumption
+apply (erule admD)
+apply (erule cont2mono [THEN ch2ch_monofun])
+apply assumption
+apply assumption
+done
+
+lemma adm_UU_not_less: "adm(%x.~ UU << t(x))"
+by simp
+
+lemma adm_not_UU: "cont(t)==> adm(%x.~ (t x) = UU)"
+apply (unfold adm_def)
+apply (intro strip)
+apply (rule contrapos_nn)
+apply (erule spec)
+apply (rule chain_UU_I [THEN spec])
+apply (erule cont2mono [THEN ch2ch_monofun])
+apply assumption
+apply (erule cont2contlub [THEN contlubE, THEN spec, THEN mp, THEN subst])
+apply assumption
+apply assumption
+done
+
+lemma adm_eq: "[|cont u ; cont v|]==> adm(%x. u x = v x)"
+by (simp add: po_eq_conv)
+
+text {* admissibility for disjunction is hard to prove. It takes 7 Lemmas *}
+
+lemma adm_disj_lemma1:
+ "\<forall>n::nat. P n \<or> Q n \<Longrightarrow> (\<forall>i. \<exists>j\<ge>i. P j) \<or> (\<forall>i. \<exists>j\<ge>i. Q j)"
+apply (erule contrapos_pp)
+apply clarsimp
+apply (rule exI)
+apply (rule conjI)
+apply (drule spec, erule mp)
+apply (rule le_maxI1)
+apply (drule spec, erule mp)
+apply (rule le_maxI2)
+done
+
+lemma adm_disj_lemma2: "[| adm P; \<exists>X. chain X & (!n. P(X n)) &
+ lub(range Y)=lub(range X)|] ==> P(lub(range Y))"
+by (force elim: admD)
+
+lemma adm_disj_lemma3:
+ "[| chain(Y::nat=>'a::cpo); \<forall>i. \<exists>j\<ge>i. P (Y j) |] ==>
+ chain(%m. Y (LEAST j. m\<le>j \<and> P(Y j)))"
+apply (rule chainI)
+apply (erule chain_mono3)
+apply (rule Least_le)
+apply (rule conjI)
+apply (rule Suc_leD)
+apply (erule allE)
+apply (erule exE)
+apply (erule LeastI [THEN conjunct1])
+apply (erule allE)
+apply (erule exE)
+apply (erule LeastI [THEN conjunct2])
+done
+
+lemma adm_disj_lemma4:
+ "[| \<forall>i. \<exists>j\<ge>i. P (Y j) |] ==> ! m. P(Y(LEAST j::nat. m\<le>j & P(Y j)))"
+apply (rule allI)
+apply (erule allE)
+apply (erule exE)
+apply (erule LeastI [THEN conjunct2])
+done
+
+lemma adm_disj_lemma5:
+ "[| chain(Y::nat=>'a::cpo); \<forall>i. \<exists>j\<ge>i. P(Y j) |] ==>
+ lub(range(Y)) = (LUB m. Y(LEAST j. m\<le>j & P(Y j)))"
+ apply (rule antisym_less)
+ apply (rule lub_mono)
+ apply assumption
+ apply (erule adm_disj_lemma3)
+ apply assumption
+ apply (rule allI)
+ apply (erule chain_mono3)
+ apply (erule allE)
+ apply (erule exE)
+ apply (erule LeastI [THEN conjunct1])
+ apply (rule lub_mono3)
+ apply (erule adm_disj_lemma3)
+ apply assumption
+ apply assumption
+ apply (rule allI)
+ apply (rule exI)
+ apply (rule refl_less)
+done
+
+lemma adm_disj_lemma6:
+ "[| chain(Y::nat=>'a::cpo); \<forall>i. \<exists>j\<ge>i. P(Y j) |] ==>
+ \<exists>X. chain X & (\<forall>n. P(X n)) & lub(range Y) = lub(range X)"
+apply (rule_tac x = "%m. Y (LEAST j. m\<le>j & P (Y j))" in exI)
+apply (fast intro!: adm_disj_lemma3 adm_disj_lemma4 adm_disj_lemma5)
+done
+
+lemma adm_disj_lemma7:
+"[| adm(P); chain(Y); \<forall>i. \<exists>j\<ge>i. P(Y j) |]==>P(lub(range(Y)))"
+apply (erule adm_disj_lemma2)
+apply (erule adm_disj_lemma6)
+apply assumption
+done
+
+lemma adm_disj: "[| adm P; adm Q |] ==> adm(%x. P x | Q x)"
+apply (rule admI)
+apply (erule adm_disj_lemma1 [THEN disjE])
+apply (rule disjI1)
+apply (erule adm_disj_lemma7)
+apply assumption
+apply assumption
+apply (rule disjI2)
+apply (erule adm_disj_lemma7)
+apply assumption
+apply assumption
+done
+
+lemma adm_imp: "[| adm(%x.~(P x)); adm Q |] ==> adm(%x. P x --> Q x)"
+by (subst imp_conv_disj, rule adm_disj)
+
+lemma adm_iff: "[| adm (%x. P x --> Q x); adm (%x. Q x --> P x) |]
+ ==> adm (%x. P x = Q x)"
+by (subst iff_conv_conj_imp, rule adm_conj)
+
+lemma adm_not_conj: "[| adm (%x. ~ P x); adm (%x. ~ Q x) |] ==> adm (%x. ~ (P x & Q x))"
+by (subst de_Morgan_conj, rule adm_disj)
+
+lemmas adm_lemmas = adm_not_free adm_imp adm_disj adm_eq adm_not_UU
+ adm_UU_not_less adm_all2 adm_not_less adm_not_conj adm_iff
+
+declare adm_lemmas [simp]
+
+end
+
--- a/src/HOLCF/Fix.ML Mon May 23 23:32:07 2005 +0200
+++ b/src/HOLCF/Fix.ML Tue May 24 05:03:54 2005 +0200
@@ -5,7 +5,6 @@
val iterate_Suc = thm "iterate_Suc";
val Ifix_def = thm "Ifix_def";
val fix_def = thm "fix_def";
-val adm_def = thm "adm_def";
val admw_def = thm "admw_def";
val iterate_Suc2 = thm "iterate_Suc2";
val chain_iterate2 = thm "chain_iterate2";
@@ -33,9 +32,6 @@
val fix_eq5 = thm "fix_eq5";
val Ifix_def2 = thm "Ifix_def2";
val fix_def2 = thm "fix_def2";
-val admI = thm "admI";
-val triv_admI = thm "triv_admI";
-val admD = thm "admD";
val admw_def2 = thm "admw_def2";
val def_fix_ind = thm "def_fix_ind";
val adm_impl_admw = thm "adm_impl_admw";
@@ -43,33 +39,6 @@
val def_fix_ind = thm "def_fix_ind";
val wfix_ind = thm "wfix_ind";
val def_wfix_ind = thm "def_wfix_ind";
-val adm_max_in_chain = thm "adm_max_in_chain";
-val adm_chfin = thm "adm_chfin";
-val adm_chfindom = thm "adm_chfindom";
-val admI2 = thm "admI2";
-val adm_less = thm "adm_less";
-val adm_conj = thm "adm_conj";
-val adm_not_free = thm "adm_not_free";
-val adm_not_less = thm "adm_not_less";
-val adm_all = thm "adm_all";
-val adm_all2 = thm "adm_all2";
-val adm_subst = thm "adm_subst";
-val adm_UU_not_less = thm "adm_UU_not_less";
-val adm_not_UU = thm "adm_not_UU";
-val adm_eq = thm "adm_eq";
-val adm_disj_lemma1 = thm "adm_disj_lemma1";
-val adm_disj_lemma2 = thm "adm_disj_lemma2";
-val adm_disj_lemma3 = thm "adm_disj_lemma3";
-val adm_disj_lemma4 = thm "adm_disj_lemma4";
-val adm_disj_lemma5 = thm "adm_disj_lemma5";
-val adm_disj_lemma6 = thm "adm_disj_lemma6";
-val adm_disj_lemma7 = thm "adm_disj_lemma7";
-val adm_disj = thm "adm_disj";
-val adm_imp = thm "adm_imp";
-val adm_iff = thm "adm_iff";
-val adm_not_conj = thm "adm_not_conj";
-val adm_lemmas = [adm_not_free, adm_imp, adm_disj, adm_eq, adm_not_UU,
- adm_UU_not_less, adm_all2, adm_not_less, adm_not_conj, adm_iff]
structure Fix =
struct
--- a/src/HOLCF/Fix.thy Mon May 23 23:32:07 2005 +0200
+++ b/src/HOLCF/Fix.thy Tue May 24 05:03:54 2005 +0200
@@ -9,7 +9,7 @@
header {* Fixed point operator and admissibility *}
theory Fix
-imports Cfun Cprod
+imports Cfun Cprod Adm
begin
subsection {* Definitions *}
@@ -19,7 +19,6 @@
iterate :: "nat=>('a->'a)=>'a=>'a"
Ifix :: "('a->'a)=>'a"
"fix" :: "('a->'a)->'a"
-adm :: "('a::cpo=>bool)=>bool"
admw :: "('a=>bool)=>bool"
primrec
@@ -31,9 +30,6 @@
Ifix_def: "Ifix F == lub(range(%i. iterate i F UU))"
fix_def: "fix == (LAM f. Ifix f)"
-adm_def: "adm P == !Y. chain(Y) -->
- (!i. P(Y i)) --> P(lub(range Y))"
-
admw_def: "admw P == !F. (!n. P (iterate n F UU)) -->
P (lub(range (%i. iterate i F UU)))"
@@ -236,24 +232,6 @@
subsection {* Admissibility and fixed point induction *}
-text {* access to definitions *}
-
-lemma admI:
- "(!!Y. [| chain Y; !i. P (Y i) |] ==> P (lub (range Y))) ==> adm P"
-apply (unfold adm_def)
-apply blast
-done
-
-lemma triv_admI: "!x. P x ==> adm P"
-apply (rule admI)
-apply (erule spec)
-done
-
-lemma admD: "[| adm(P); chain(Y); !i. P(Y(i)) |] ==> P(lub(range(Y)))"
-apply (unfold adm_def)
-apply blast
-done
-
lemma admw_def2: "admw(P) = (!F.(!n. P(iterate n F UU)) -->
P (lub(range(%i. iterate i F UU))))"
apply (unfold admw_def)
@@ -308,224 +286,5 @@
apply assumption
done
-text {* for chain-finite (easy) types every formula is admissible *}
-
-lemma adm_max_in_chain:
-"!Y. chain(Y::nat=>'a) --> (? n. max_in_chain n Y) ==> adm(P::'a=>bool)"
-apply (unfold adm_def)
-apply (intro strip)
-apply (rule exE)
-apply (rule mp)
-apply (erule spec)
-apply assumption
-apply (subst lub_finch1 [THEN thelubI])
-apply assumption
-apply assumption
-apply (erule spec)
-done
-
-lemmas adm_chfin = chfin [THEN adm_max_in_chain, standard]
-
-text {* some lemmata for functions with flat/chfin domain/range types *}
-
-lemma adm_chfindom: "adm (%(u::'a::cpo->'b::chfin). P(u$s))"
-apply (unfold adm_def)
-apply (intro strip)
-apply (drule chfin_Rep_CFunR)
-apply (erule_tac x = "s" in allE)
-apply clarsimp
-done
-
-(* adm_flat not needed any more, since it is a special case of adm_chfindom *)
-
-text {* improved admissibility introduction *}
-
-lemma admI2:
- "(!!Y. [| chain Y; !i. P (Y i); !i. ? j. i < j & Y i ~= Y j & Y i << Y j |]
- ==> P(lub (range Y))) ==> adm P"
-apply (unfold adm_def)
-apply (intro strip)
-apply (erule increasing_chain_adm_lemma)
-apply assumption
-apply fast
-done
-
-text {* admissibility of special formulae and propagation *}
-
-lemma adm_less [simp]: "[|cont u;cont v|]==> adm(%x. u x << v x)"
-apply (unfold adm_def)
-apply (intro strip)
-apply (frule_tac f = "u" in cont2mono [THEN ch2ch_monofun])
-apply assumption
-apply (frule_tac f = "v" in cont2mono [THEN ch2ch_monofun])
-apply assumption
-apply (erule cont2contlub [THEN contlubE, THEN spec, THEN mp, THEN ssubst])
-apply assumption
-apply (erule cont2contlub [THEN contlubE, THEN spec, THEN mp, THEN ssubst])
-apply assumption
-apply (blast intro: lub_mono)
-done
-
-lemma adm_conj [simp]: "[| adm P; adm Q |] ==> adm(%x. P x & Q x)"
-by (fast elim: admD intro: admI)
-
-lemma adm_not_free [simp]: "adm(%x. t)"
-apply (unfold adm_def)
-apply fast
-done
-
-lemma adm_not_less: "cont t ==> adm(%x.~ (t x) << u)"
-apply (unfold adm_def)
-apply (intro strip)
-apply (rule contrapos_nn)
-apply (erule spec)
-apply (rule trans_less)
-prefer 2 apply (assumption)
-apply (erule cont2mono [THEN monofun_fun_arg])
-apply (rule is_ub_thelub)
-apply assumption
-done
-
-lemma adm_all: "!y. adm(P y) ==> adm(%x.!y. P y x)"
-by (fast intro: admI elim: admD)
-
-lemmas adm_all2 = allI [THEN adm_all, standard]
-
-lemma adm_subst: "[|cont t; adm P|] ==> adm(%x. P (t x))"
-apply (rule admI)
-apply (simplesubst cont2contlub [THEN contlubE, THEN spec, THEN mp])
-apply assumption
-apply assumption
-apply (erule admD)
-apply (erule cont2mono [THEN ch2ch_monofun])
-apply assumption
-apply assumption
-done
-
-lemma adm_UU_not_less: "adm(%x.~ UU << t(x))"
-by simp
-
-lemma adm_not_UU: "cont(t)==> adm(%x.~ (t x) = UU)"
-apply (unfold adm_def)
-apply (intro strip)
-apply (rule contrapos_nn)
-apply (erule spec)
-apply (rule chain_UU_I [THEN spec])
-apply (erule cont2mono [THEN ch2ch_monofun])
-apply assumption
-apply (erule cont2contlub [THEN contlubE, THEN spec, THEN mp, THEN subst])
-apply assumption
-apply assumption
-done
-
-lemma adm_eq: "[|cont u ; cont v|]==> adm(%x. u x = v x)"
-by (simp add: po_eq_conv)
-
-text {* admissibility for disjunction is hard to prove. It takes 7 Lemmas *}
-
-lemma adm_disj_lemma1:
- "\<forall>n::nat. P n \<or> Q n \<Longrightarrow> (\<forall>i. \<exists>j\<ge>i. P j) \<or> (\<forall>i. \<exists>j\<ge>i. Q j)"
-apply (erule contrapos_pp)
-apply clarsimp
-apply (rule exI)
-apply (rule conjI)
-apply (drule spec, erule mp)
-apply (rule le_maxI1)
-apply (drule spec, erule mp)
-apply (rule le_maxI2)
-done
-
-lemma adm_disj_lemma2: "[| adm P; \<exists>X. chain X & (!n. P(X n)) &
- lub(range Y)=lub(range X)|] ==> P(lub(range Y))"
-by (force elim: admD)
-
-lemma adm_disj_lemma3:
- "[| chain(Y::nat=>'a::cpo); \<forall>i. \<exists>j\<ge>i. P (Y j) |] ==>
- chain(%m. Y (LEAST j. m\<le>j \<and> P(Y j)))"
-apply (rule chainI)
-apply (erule chain_mono3)
-apply (rule Least_le)
-apply (rule conjI)
-apply (rule Suc_leD)
-apply (erule allE)
-apply (erule exE)
-apply (erule LeastI [THEN conjunct1])
-apply (erule allE)
-apply (erule exE)
-apply (erule LeastI [THEN conjunct2])
-done
-
-lemma adm_disj_lemma4:
- "[| \<forall>i. \<exists>j\<ge>i. P (Y j) |] ==> ! m. P(Y(LEAST j::nat. m\<le>j & P(Y j)))"
-apply (rule allI)
-apply (erule allE)
-apply (erule exE)
-apply (erule LeastI [THEN conjunct2])
-done
-
-lemma adm_disj_lemma5:
- "[| chain(Y::nat=>'a::cpo); \<forall>i. \<exists>j\<ge>i. P(Y j) |] ==>
- lub(range(Y)) = (LUB m. Y(LEAST j. m\<le>j & P(Y j)))"
- apply (rule antisym_less)
- apply (rule lub_mono)
- apply assumption
- apply (erule adm_disj_lemma3)
- apply assumption
- apply (rule allI)
- apply (erule chain_mono3)
- apply (erule allE)
- apply (erule exE)
- apply (erule LeastI [THEN conjunct1])
- apply (rule lub_mono3)
- apply (erule adm_disj_lemma3)
- apply assumption
- apply assumption
- apply (rule allI)
- apply (rule exI)
- apply (rule refl_less)
-done
-
-lemma adm_disj_lemma6:
- "[| chain(Y::nat=>'a::cpo); \<forall>i. \<exists>j\<ge>i. P(Y j) |] ==>
- \<exists>X. chain X & (\<forall>n. P(X n)) & lub(range Y) = lub(range X)"
-apply (rule_tac x = "%m. Y (LEAST j. m\<le>j & P (Y j))" in exI)
-apply (fast intro!: adm_disj_lemma3 adm_disj_lemma4 adm_disj_lemma5)
-done
-
-lemma adm_disj_lemma7:
-"[| adm(P); chain(Y); \<forall>i. \<exists>j\<ge>i. P(Y j) |]==>P(lub(range(Y)))"
-apply (erule adm_disj_lemma2)
-apply (erule adm_disj_lemma6)
-apply assumption
-done
-
-lemma adm_disj: "[| adm P; adm Q |] ==> adm(%x. P x | Q x)"
-apply (rule admI)
-apply (erule adm_disj_lemma1 [THEN disjE])
-apply (rule disjI1)
-apply (erule adm_disj_lemma7)
-apply assumption
-apply assumption
-apply (rule disjI2)
-apply (erule adm_disj_lemma7)
-apply assumption
-apply assumption
-done
-
-lemma adm_imp: "[| adm(%x.~(P x)); adm Q |] ==> adm(%x. P x --> Q x)"
-by (subst imp_conv_disj, rule adm_disj)
-
-lemma adm_iff: "[| adm (%x. P x --> Q x); adm (%x. Q x --> P x) |]
- ==> adm (%x. P x = Q x)"
-by (subst iff_conv_conj_imp, rule adm_conj)
-
-lemma adm_not_conj: "[| adm (%x. ~ P x); adm (%x. ~ Q x) |] ==> adm (%x. ~ (P x & Q x))"
-by (subst de_Morgan_conj, rule adm_disj)
-
-lemmas adm_lemmas = adm_not_free adm_imp adm_disj adm_eq adm_not_UU
- adm_UU_not_less adm_all2 adm_not_less adm_not_conj adm_iff
-
-declare adm_lemmas [simp]
-
end
--- a/src/HOLCF/IsaMakefile Mon May 23 23:32:07 2005 +0200
+++ b/src/HOLCF/IsaMakefile Tue May 24 05:03:54 2005 +0200
@@ -27,7 +27,7 @@
HOL:
@cd $(SRC)/HOL; $(ISATOOL) make HOL
-$(OUT)/HOLCF: $(OUT)/HOL Cfun.ML Cfun.thy \
+$(OUT)/HOLCF: $(OUT)/HOL Adm.ML Adm.thy Cfun.ML Cfun.thy \
Cont.ML Cont.thy Cprod.ML Cprod.thy \
Discrete.thy Domain.thy Fix.ML Fix.thy FunCpo.ML \
FunCpo.thy HOLCF.ML HOLCF.thy Lift.ML \