Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Guardedness failure for mixed inductive coinductive types

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Guardedness failure for mixed inductive coinductive types


Chronological Thread 
  • From: Chung-Kil Hur <gil.hur AT gmail.com>
  • To: Li-yao Xia <lysxia AT gmail.com>
  • Cc: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] Guardedness failure for mixed inductive coinductive types
  • Date: Fri, 3 Mar 2023 22:10:58 +0900
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=gil.hur AT gmail.com; spf=Pass smtp.mailfrom=gil.hur AT gmail.com; spf=None smtp.helo=postmaster AT mail-vs1-f51.google.com
  • Ironport-data: A9a23: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 4QqbTgsfXxXgnId3Sqtl7C51f3ZUP7SI+0UUBqy
  • Ironport-hdrordr: A9a23:1zNgh6jhD0cwqWlwyDn72eYvNHBQXuUji2hC6mlwRA09TyVXra 6TdZUgpHvJYVkqMk3I9ersBEDEexPhHP1OkOws1NWZPTUO0VHAROpfBMnZsl7d8kvFmtK1vp 0QEZSWfeeAdWSS+vyKmTVQfexO/DD+ytHPuQ6I9QYLcT1X
  • Ironport-phdr: A9a23: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 S+XsMU35l/7y6+AzT1oVBcIoTFO1trjgA==
  • Ironport-sdr: 6401f1ec_uiQ7f7/C6Nnzwxn9JvdhcICXprwyWz5wbEIAWmYZl8oPtm+ ixthNb1uOVz95aUBs+sLOKJjLjhPs/Surzo49fg==

Hi Li-yao,

Thanks for pointing out the github issue.
Although using a container type is a sensible workaround, it might be better to directly support inductive coinductive types.

After reading the github issue, I thought about a simple improvement to just accept the lifting of a coalgebra f: X -> F X to the corecursive map !f : X -> nu F.
Once the lifting is accepted, in principle one can define any desired corecursive function by lifting an appropriate coalgebra, and then prove that the lifted function satisfies the desired recursive equation (eg, using paco and the axiom saying that bisimulation implies equality).

Now, the simple idea is to make the guardedness checking allow a fixpoint under a (guarding) constructor if the definition of fixpoint does not include any destructor.
It seems that this simple relaxation is sound and also allows the desired lifting of a coalgebra.

For example, in my example of rosetree below, the fixpoint function under the guarding constructor "rtgo" does not include any destructor "rtobs" and thus the lifting function "rtfix" would be accepted.

====================
Set Implicit Arguments.

Variant rtreeF X :=
| node (n: nat) (chl: list X).

CoInductive rtree : Type := rtgo
{ rtobs : rtreeF rtree }.

CoFixpoint rtfix {X} (coalg: X -> rtreeF X) (x: X) : rtree :=
  match coalg x with
  | node n chl => rtgo (node n
    ((fix itr xs := match xs with
                   | nil => nil
                   | cons x xs' => cons (rtfix coalg x) (itr xs')
                   end) chl))
  end.
========================

I wonder whether this simple improvement has any problem.

Thanks,
Gil

On Thu, Mar 2, 2023 at 9:30 PM Li-yao Xia <lysxia AT gmail.com> wrote:
Hi Gil,

Just allowing `fix` in `cofix` would be unsound (see
https://github.com/coq/coq/issues/4261). But maybe fix could be treated
similarly to cofix for the purposes of guardedness checking, in addition
to its decreasing argument requirement?

One workaround is to replace the inductive type with a non-recursive
encoding, list X = { n : nat & fin n -> X }.

Li-yao

On 2023-03-02 2:02 AM, Chung-Kil Hur wrote:
> Hi Coq-Club,
>
> I just realized that Coq's guardedness checking basically rejects
> *every* corecursive function for mixed inductive coinductive types.
> I wonder whether there is a way around, or why Coq does not support it.
>
> To be more specific, here is an example.
> ==================
> Variant rtreeF X :=
> | node (n: nat) (chl: list X).
>
> CoInductive rtree : Type := rtgo
> { rtobs : rtreeF rtree }.
>
> CoFixpoint rtfix {X} (coalg: X -> rtreeF X) (x: X) : rtree :=
>   match coalg x with
>   | node n chl => rtgo (node n
>     ((fix itr xs := match xs with
>                    | nil => nil
>                    | cons x xs' => cons (rtfix coalg x) (itr xs')
>                    end) chl))
>   end.
> ========================
>
> The function `rtfix` defines the unique function from X to rtree,
> given a coalgebra from X to streamF X.
>
> I think this corecursive function must be accepted in order to use the
> mixed inductive-coinductive type `rtree`.
> However, it seems that there is no way to accept the above `rtfix`
> function.
>
> Thanks!
> Gil



Archive powered by MHonArc 2.6.19+.

Top of Page