equal
deleted
inserted
replaced
1 (* Title: HOLCF/Coind.thy |
1 (* Title: HOLCF/Coind.thy |
2 ID: $Id$ |
2 ID: $Id$ |
3 Author: Franz Regensburger |
3 Author: Franz Regensburger |
4 Copyright 1993 Technische Universitaet Muenchen |
4 Copyright 1993 Technische Universitaet Muenchen |
5 |
5 |
6 Example for co-induction on streams |
6 Example for co-induction on streams |
7 *) |
7 *) |
8 |
8 |
9 Coind = Stream2 + |
9 Coind = Stream2 + |
10 |
10 |
11 |
11 |
12 consts |
12 consts |
13 |
13 |
14 nats :: "dnat stream" |
14 nats :: "dnat stream" |
15 from :: "dnat -> dnat stream" |
15 from :: "dnat -> dnat stream" |
16 |
16 |
17 defs |
17 defs |
18 nats_def "nats == fix`(LAM h.scons`dzero`(smap`dsucc`h))" |
18 nats_def "nats == fix`(LAM h.scons`dzero`(smap`dsucc`h))" |
19 |
19 |
20 from_def "from == fix`(LAM h n.scons`n`(h`(dsucc`n)))" |
20 from_def "from == fix`(LAM h n.scons`n`(h`(dsucc`n)))" |
21 |
21 |
22 end |
22 end |
23 |
23 |
24 (* |
24 (* |
25 smap`f`UU = UU |
25 smap`f`UU = UU |
26 x~=UU --> smap`f`(scons`x`xs) = scons`(f`x)`(smap`f`xs) |
26 x~=UU --> smap`f`(scons`x`xs) = scons`(f`x)`(smap`f`xs) |
27 |
27 |
28 nats = scons`dzero`(smap`dsucc`nats) |
28 nats = scons`dzero`(smap`dsucc`nats) |
29 |
29 |
30 from`n = scons`n`(from`(dsucc`n)) |
30 from`n = scons`n`(from`(dsucc`n)) |
31 *) |
31 *) |
32 |
32 |
33 |
33 |