4905
|
1 |
|
17248
|
2 |
(* $Id$ *)
|
|
3 |
|
|
4 |
header {* Section 10.4 *}
|
4905
|
5 |
|
17248
|
6 |
theory Ex1
|
|
7 |
imports LCF
|
|
8 |
begin
|
4905
|
9 |
|
|
10 |
consts
|
17248
|
11 |
P :: "'a => tr"
|
|
12 |
G :: "'a => 'a"
|
|
13 |
H :: "'a => 'a"
|
|
14 |
K :: "('a => 'a) => ('a => 'a)"
|
4905
|
15 |
|
17248
|
16 |
axioms
|
|
17 |
P_strict: "P(UU) = UU"
|
|
18 |
K: "K = (%h x. P(x) => x | h(h(G(x))))"
|
|
19 |
H: "H = FIX(K)"
|
|
20 |
|
19755
|
21 |
|
|
22 |
declare P_strict [simp] K [simp]
|
|
23 |
|
|
24 |
lemma H_unfold: "H = K(H)"
|
|
25 |
apply (simplesubst H)
|
|
26 |
apply (rule FIX_eq [symmetric])
|
|
27 |
done
|
|
28 |
|
|
29 |
lemma H_strict [simp]: "H(UU)=UU"
|
|
30 |
apply (simplesubst H_unfold)
|
|
31 |
apply simp
|
|
32 |
done
|
|
33 |
|
|
34 |
lemma H_idemp_lemma: "ALL x. H(FIX(K,x)) = FIX(K,x)"
|
|
35 |
apply (tactic {* induct_tac "K" 1 *})
|
|
36 |
apply (simp (no_asm))
|
|
37 |
apply (simp (no_asm) split: COND_cases_iff)
|
|
38 |
apply (intro strip)
|
|
39 |
apply (subst H_unfold)
|
|
40 |
apply (simp (no_asm_simp))
|
|
41 |
done
|
|
42 |
|
|
43 |
lemma H_idemp: "ALL x. H(H(x)) = H(x)"
|
|
44 |
apply (rule H_idemp_lemma [folded H])
|
|
45 |
done
|
4905
|
46 |
|
|
47 |
end
|