+++ /dev/null
-(* Let's define an infinite tree whose nodes are made of natural value and an *)
-(* infinite forest of infinite trees whose nodes ... *)
-
-(* (obbrobrio_tree n) is used to build such a tree whose root value is n and *)
-(* root forest is made of the corecursively defined tress whose roots values *)
-(* are (n+1), (n+2), ... *)
-
-(* To finish, we provide also some destructors and a funny (?!?) theorem *)
-
-CoInductive tree : Set :=
- node : nat -> forest -> tree
-with forest : Set :=
- nil : forest
- | cons : tree -> forest -> forest.
-
-CoFixpoint obbrobrio_tree : nat -> tree :=
- [n:nat]
- (node n (obbrobrio_forest (S n) nil))
-with obbrobrio_forest : nat -> forest -> forest :=
- [n:nat][f:forest]
- (cons (obbrobrio_tree n) (obbrobrio_forest (S n) f)).
-
-Definition root_value : tree -> nat :=
- [t:tree]
- Cases t of
- (node n _) => n
- end.
-
-Definition root_forest : tree -> forest :=
- [t:tree]
- Cases t of
- (node _ f) => f
- end.
-
-Definition root_tree : forest -> tree :=
- [f:forest]
- Cases f of
- nil => (obbrobrio_tree (S (S (S O))))
- | (cons t _) => t
- end.
-
-Theorem easy : (root_value (root_tree (root_forest (obbrobrio_tree O))))=(S O).
-Proof.
- Trivial.
-Qed.