src/HOL/Induct/Tree.thy
author berghofe
Fri, 16 Jul 1999 14:03:03 +0200
changeset 7018 ae18bb3075c3
child 11046 b5f5942781a0
permissions -rw-r--r--
Infinitely branching trees.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7018
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
     1
(*  Title:      HOL/Induct/Tree.thy
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
     2
    ID:         $Id$
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
     3
    Author:     Stefan Berghofer,  TU Muenchen
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
     4
    Copyright   1999  TU Muenchen
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
     5
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
     6
Infinitely branching trees
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
     7
*)
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
     8
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
     9
Tree = Main +
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
    10
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
    11
datatype 'a tree = Atom 'a | Branch "nat => 'a tree"
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
    12
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
    13
consts
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
    14
  map_tree :: "('a => 'b) => 'a tree => 'b tree"
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
    15
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
    16
primrec
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
    17
  "map_tree f (Atom a) = Atom (f a)"
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
    18
  "map_tree f (Branch ts) = Branch (%x. map_tree f (ts x))"
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
    19
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
    20
consts
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
    21
  exists_tree :: "('a => bool) => 'a tree => bool"
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
    22
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
    23
primrec
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
    24
  "exists_tree P (Atom a) = P a"
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
    25
  "exists_tree P (Branch ts) = (? x. exists_tree P (ts x))"
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
    26
ae18bb3075c3 Infinitely branching trees.
berghofe
parents:
diff changeset
    27
end