A question was recently asked on the Coq-club mailing list on Coq rejecting a nastily nested inductive type. We encountered a similar difficulty while trying to port code from Agda to Coq: Agda accepts the following
record Foo (x : Set -> Set) : Set wheredata Bar : Set -> Set where bar : Bar (Foo Bar)
while Coq rejects
Record Foo (x : Type -> Type) : Type := {}.Fail Inductive Bar : Type -> Type := | bar : Bar (Foo Bar).(*Non strictly positive occurrence of "Bar" in "Bar (Foo Bar)".*)
It seems like Coq does not accept nested inductive types in indices, while Agda does.
So I tried to look up what kind of complex induction pattern (induction-induction, induction-recursion, nestedness…) Agda exactly allows.I found the manual page on mutual recursion, which gives some examples, but is rather vague… Is there any more precise reference on what Agda allows and forbids? And, ideally, some hint as to why the allowed things are ok/have a semantic?