Skip to Content.
Sympa Menu

coq-club - [Coq-Club] Proving equality of coinductives

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

[Coq-Club] Proving equality of coinductives


chronological Thread 
  • From: Daniel Schepler <dschepler AT gmail.com>
  • To: coq-club AT inria.fr
  • Subject: [Coq-Club] Proving equality of coinductives
  • Date: Tue, 26 Apr 2011 09:56:42 -0700
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:subject:date:user-agent:mime-version:content-type :content-transfer-encoding:message-id; b=sx6YIIvgcn16JLAcZJautt3tta08TUWSdkTsRbTosKPHLTCqyQe6oL0Tw+PZQnxDSZ UIaDhIs/7WdJh4ZMXkmAZP8C1xFLCgNlQMXHRQyIMZWp6PyKwXEwxbjsn3jgvPxsU+eZ xR8iLB5aRbYMdz3MesC7l2czmM7MhBQqyODGQ=

I was looking at proving monad properties of:

CoInductive Coroutine (X:Type) : Type :=
| coroutine_return : X -> Coroutine X
| yield_with_continuation : Coroutine X -> Coroutine X.

Implicit Arguments coroutine_return [[X]].
Implicit Arguments yield_with_continuation [[X]].

I was eventually able to prove the necessary identities, assuming the axiom:

CoInductive coroutine_eq {X} : Coroutine X -> Coroutine X -> Prop :=
| coroutine_return_eq: forall x0:X,
    coroutine_eq (coroutine_return x0) (coroutine_return x0)
| yield_eq: forall x y:Coroutine X, coroutine_eq x y ->
    coroutine_eq (yield_with_continuation x) (yield_with_continuation y).
Axiom coroutine_eq_eq: forall {X} (x y:Coroutine X),
  coroutine_eq x y -> x = y.

My question is: is there any way to prove that axiom?  Maybe using a single 
axiom which would also imply corresponding statements for Stream, 
PossiblyTerminatingStream, InfinitelyBranchingBinaryTree, etc.?
-- 
Daniel Schepler



Archive powered by MhonArc 2.6.16.

Top of Page