Consider the following (invalid) Agda code
data Example : Example ex → Set where
ex : Example ex
This type can be writtien validly in Agda in the following way, making use of Agda's feature of allowing values to be given a type earlier and a definition later
exampleex : Set
ex' : exampleex
data Example : exampleex → Set where
ex : Example ex'
exampleex = Example ex'
ex' = ex
This all compiles, and Agda correctly knows that ex : Example ex
However, trying to define a function out of Example with pattern matching causes the compiler to crash
test : (e : Example ex) → Example e → ℕ
test ex x = 0
When I add this function to the file, and run "agda main.agda", agda says "Checking main" but never finishes running. Isn't type checking in Agda supposed to be deciable?
Also, is there any way to fix this and make the test function possible to define?
Example
this way, although I’m not an Agda expert. I would not at all be surprised if the bug here was that Agda let you define this strangely-recursive type in the first place – Antal Spector-Zabusky