src/HOLCF/Domain.thy
changeset 17835 74e6140e5f1f
parent 16754 1b979f8b7e8e
child 17836 5d9c9e284d16
--- a/src/HOLCF/Domain.thy	Tue Oct 11 23:27:14 2005 +0200
+++ b/src/HOLCF/Domain.thy	Tue Oct 11 23:27:49 2005 +0200
@@ -33,6 +33,25 @@
 lemma (in iso) swap: "iso rep abs"
 by (rule iso.intro [OF rep_iso abs_iso])
 
+lemma (in iso) abs_less: "(abs\<cdot>x \<sqsubseteq> abs\<cdot>y) = (x \<sqsubseteq> y)"
+proof
+  assume "abs\<cdot>x \<sqsubseteq> abs\<cdot>y"
+  hence "rep\<cdot>(abs\<cdot>x) \<sqsubseteq> rep\<cdot>(abs\<cdot>y)" by (rule monofun_cfun_arg)
+  thus "x \<sqsubseteq> y" by simp
+next
+  assume "x \<sqsubseteq> y"
+  thus "abs\<cdot>x \<sqsubseteq> abs\<cdot>y" by (rule monofun_cfun_arg)
+qed
+
+lemma (in iso) rep_less: "(rep\<cdot>x \<sqsubseteq> rep\<cdot>y) = (x \<sqsubseteq> y)"
+by (rule iso.abs_less [OF swap])
+
+lemma (in iso) abs_eq: "(abs\<cdot>x = abs\<cdot>y) = (x = y)"
+by (simp add: po_eq_conv abs_less)
+
+lemma (in iso) rep_eq: "(rep\<cdot>x = rep\<cdot>y) = (x = y)"
+by (rule iso.abs_eq [OF swap])
+
 lemma (in iso) abs_strict: "abs\<cdot>\<bottom> = \<bottom>"
 proof -
   have "\<bottom> \<sqsubseteq> rep\<cdot>\<bottom>" ..
@@ -44,13 +63,12 @@
 lemma (in iso) rep_strict: "rep\<cdot>\<bottom> = \<bottom>"
 by (rule iso.abs_strict [OF swap])
 
-lemma (in iso) abs_defin': "abs\<cdot>z = \<bottom> \<Longrightarrow> z = \<bottom>"
+lemma (in iso) abs_defin': "abs\<cdot>x = \<bottom> \<Longrightarrow> x = \<bottom>"
 proof -
-  assume A: "abs\<cdot>z = \<bottom>"
-  have "z = rep\<cdot>(abs\<cdot>z)" by simp
-  also have "\<dots> = rep\<cdot>\<bottom>" by (simp only: A)
+  have "x = rep\<cdot>(abs\<cdot>x)" by simp
+  also assume "abs\<cdot>x = \<bottom>"
   also note rep_strict
-  finally show "z = \<bottom>" .
+  finally show "x = \<bottom>" .
 qed
 
 lemma (in iso) rep_defin': "rep\<cdot>z = \<bottom> \<Longrightarrow> z = \<bottom>"
@@ -60,7 +78,13 @@
 by (erule contrapos_nn, erule abs_defin')
 
 lemma (in iso) rep_defined: "z \<noteq> \<bottom> \<Longrightarrow> rep\<cdot>z \<noteq> \<bottom>"
-by (erule contrapos_nn, erule rep_defin')
+by (rule iso.abs_defined [OF iso.swap])
+
+lemma (in iso) abs_defined_iff: "(abs\<cdot>x = \<bottom>) = (x = \<bottom>)"
+by (auto elim: abs_defin' intro: abs_strict)
+
+lemma (in iso) rep_defined_iff: "(rep\<cdot>x = \<bottom>) = (x = \<bottom>)"
+by (rule iso.abs_defined_iff [OF iso.swap])
 
 lemma (in iso) iso_swap: "(x = abs\<cdot>y) = (rep\<cdot>x = y)"
 proof
@@ -127,8 +151,8 @@
    apply (rule disjI1, fast)
   apply (rule disjI2, fast)
  apply (erule disjE)
-  apply (force intro: sinl_defined)
- apply (force intro: sinr_defined)
+  apply force
+ apply force
 done
 
 lemma exh_start: "p = \<bottom> \<or> (\<exists>x. p = x \<and> x \<noteq> \<bottom>)"