# HG changeset patch # User huffman # Date 1129066069 -7200 # Node ID 74e6140e5f1f59d258ba25a8e3aabc8636199b4c # Parent 28414668b43d985642a17337b791ed6853e09116 added several theorems in locale iso diff -r 28414668b43d -r 74e6140e5f1f src/HOLCF/Domain.thy --- 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\x \ abs\y) = (x \ y)" +proof + assume "abs\x \ abs\y" + hence "rep\(abs\x) \ rep\(abs\y)" by (rule monofun_cfun_arg) + thus "x \ y" by simp +next + assume "x \ y" + thus "abs\x \ abs\y" by (rule monofun_cfun_arg) +qed + +lemma (in iso) rep_less: "(rep\x \ rep\y) = (x \ y)" +by (rule iso.abs_less [OF swap]) + +lemma (in iso) abs_eq: "(abs\x = abs\y) = (x = y)" +by (simp add: po_eq_conv abs_less) + +lemma (in iso) rep_eq: "(rep\x = rep\y) = (x = y)" +by (rule iso.abs_eq [OF swap]) + lemma (in iso) abs_strict: "abs\\ = \" proof - have "\ \ rep\\" .. @@ -44,13 +63,12 @@ lemma (in iso) rep_strict: "rep\\ = \" by (rule iso.abs_strict [OF swap]) -lemma (in iso) abs_defin': "abs\z = \ \ z = \" +lemma (in iso) abs_defin': "abs\x = \ \ x = \" proof - - assume A: "abs\z = \" - have "z = rep\(abs\z)" by simp - also have "\ = rep\\" by (simp only: A) + have "x = rep\(abs\x)" by simp + also assume "abs\x = \" also note rep_strict - finally show "z = \" . + finally show "x = \" . qed lemma (in iso) rep_defin': "rep\z = \ \ z = \" @@ -60,7 +78,13 @@ by (erule contrapos_nn, erule abs_defin') lemma (in iso) rep_defined: "z \ \ \ rep\z \ \" -by (erule contrapos_nn, erule rep_defin') +by (rule iso.abs_defined [OF iso.swap]) + +lemma (in iso) abs_defined_iff: "(abs\x = \) = (x = \)" +by (auto elim: abs_defin' intro: abs_strict) + +lemma (in iso) rep_defined_iff: "(rep\x = \) = (x = \)" +by (rule iso.abs_defined_iff [OF iso.swap]) lemma (in iso) iso_swap: "(x = abs\y) = (rep\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 = \ \ (\x. p = x \ x \ \)"