To phrase the question differently: if we were to remove termination-checking and the guardedness condition on uses of inductive and coinductive data types, respectively, would there cease to be a fundamental difference between inductive/coinductive and fix/cofix?
By "fundamental difference" I mean a difference in the core calculus of Coq–not differences in things like syntax and proof search.
This seems to ultimately boil down to a question about the Calculus of Constructions.
Note: I know a theorem prover that skipped termination-checking/guardedness of recursion/corecursion could prove False
–so, if it helps, please take this as a question about non-total programming rather than proving.
The termination check for fix and cofix is part of their well-formedness rules. If we ignore that, the other important distinguishing feature of those constructs is in the computation rules.
fix
only reduces if its decreasing argument is a constructorcofix
only reduces when under a destructor (match
or a primitive projection)Those peculiar rules are that way in order to ensure termination. If you do not care about that, and allow
fix
andcofix
to unfold in any context, then they behave identically as a fixpoint combinator: