# HG changeset patch # User huffman # Date 1269323001 25200 # Node ID cd1b0166481037bc96c4ef630aa17bbba2c12386 # Parent 9ef9a20cfba13c056c460a9dad815e2a0b1b1abf convert lemma fix_cprod to use Pair, fst, snd diff -r 9ef9a20cfba1 -r cd1b01664810 src/HOLCF/Fix.thy --- a/src/HOLCF/Fix.thy Mon Mar 22 22:42:34 2010 -0700 +++ b/src/HOLCF/Fix.thy Mon Mar 22 22:43:21 2010 -0700 @@ -236,29 +236,31 @@ lemma fix_cprod: "fix\(F::'a \ 'b \ 'a \ 'b) = - \\ x. cfst\(F\\x, \ y. csnd\(F\\x, y\)\), - \ y. csnd\(F\\\ x. cfst\(F\\x, \ y. csnd\(F\\x, y\)\), y\)\" - (is "fix\F = \?x, ?y\") + (\ x. fst (F\(x, \ y. snd (F\(x, y)))), + \ y. snd (F\(\ x. fst (F\(x, \ y. snd (F\(x, y)))), y)))" + (is "fix\F = (?x, ?y)") proof (rule fix_eqI) - have 1: "cfst\(F\\?x, ?y\) = ?x" + have 1: "fst (F\(?x, ?y)) = ?x" by (rule trans [symmetric, OF fix_eq], simp) - have 2: "csnd\(F\\?x, ?y\) = ?y" + have 2: "snd (F\(?x, ?y)) = ?y" by (rule trans [symmetric, OF fix_eq], simp) - from 1 2 show "F\\?x, ?y\ = \?x, ?y\" by (simp add: eq_cprod) + from 1 2 show "F\(?x, ?y) = (?x, ?y)" by (simp add: Pair_fst_snd_eq) next fix z assume F_z: "F\z = z" - then obtain x y where z: "z = \x,y\" by (rule_tac p=z in cprodE) - from F_z z have F_x: "cfst\(F\\x, y\) = x" by simp - from F_z z have F_y: "csnd\(F\\x, y\) = y" by simp - let ?y1 = "\ y. csnd\(F\\x, y\)" + obtain x y where z: "z = (x,y)" by (rule prod.exhaust) + from F_z z have F_x: "fst (F\(x, y)) = x" by simp + from F_z z have F_y: "snd (F\(x, y)) = y" by simp + let ?y1 = "\ y. snd (F\(x, y))" have "?y1 \ y" by (rule fix_least, simp add: F_y) - hence "cfst\(F\\x, ?y1\) \ cfst\(F\\x, y\)" by (simp add: monofun_cfun) - hence "cfst\(F\\x, ?y1\) \ x" using F_x by simp + hence "fst (F\(x, ?y1)) \ fst (F\(x, y))" + by (simp add: fst_monofun monofun_cfun) + hence "fst (F\(x, ?y1)) \ x" using F_x by simp hence 1: "?x \ x" by (simp add: fix_least_below) - hence "csnd\(F\\?x, y\) \ csnd\(F\\x, y\)" by (simp add: monofun_cfun) - hence "csnd\(F\\?x, y\) \ y" using F_y by simp + hence "snd (F\(?x, y)) \ snd (F\(x, y))" + by (simp add: snd_monofun monofun_cfun) + hence "snd (F\(?x, y)) \ y" using F_y by simp hence 2: "?y \ y" by (simp add: fix_least_below) - show "\?x, ?y\ \ z" using z 1 2 by simp + show "(?x, ?y) \ z" using z 1 2 by simp qed end