I feel like the lone preacher in the dessert.. :-)
On Wed, Jun 4, 2014 at 11:18 AM, Altenkirch Thorsten <psz...@exmail.nottingham.ac.uk> wrote:I feel like the lone preacher in the dessert.. :-)I don't really understand why. :)
What you're talking about seems widely implemented (Agda, Coq?, probably Idris). And the only thing I know about that (properly, at least) implements the coinduction you'd get by dualizing induction in category theory is Charity, although I have to take the web site's word for it, because I've never installed Charity, nor met anyone who has.Coinduction seems almost unexplored practically relative to the 'put a checker on top of partial recursive domains with delaying' that most things actually implement.It's also quite common for people to think that inductive and coinductive should be synonymous with eager and delayed, even though in a total language, one can have inductive types with delays (though not eager coinductives in general), and there are certainly uses for those.
-- Dan
one can consistently have two Pi-type constructors in the theory simultaneously, with one extensionality holding for one but failing for the other.
--
First of all, let’s remark that a term of type
Id (Streams A) s (map id s)
is all that is needed to prove that Streams A is isomorphic to (N -> A). (In Martin’s setup, this is the missing step in showing that the other composite s o r : Streams A -> Streams A is the identity.)
Secondly, I would argue that having a term of this type can be interpreted as a kind of infinitary eta-rule for coinductive types.
Indeed, define
id’ : Streams A -> Streams A
id’ (cons a as) = cons a (id’ as)
If we write out the fixed point combinator explicitly, we have
id’ = cofix f. \s. match s with (cons x xs => cons x (f xs))
To simplify notation, let’s write
\s. match s with (cons x xs => …)
as
\(x,xs). …
Also, let’s write
F = \f \(x,xs). cons x (f xs)
Now the Bohm tree of id’ can be reduced as
id’ s = Y F s
= Y (\f \(x,xs). cons x (f xs)) s
—> (\f \(x,xs). cons x (f xs)) (Y F) s
—> (\(x,xs). cons x (Y F xs)) s
—> (\(x,xs). cons x ((\(x’,xs’). cons x’ (Y F xs’)) xs) s
—> (\(x,xs). cons x ((\(x’,xs’). cons x’ ((\(x’’,xs’’). cons x’’ (Y F xs’’)) xs’)) xs)) s
—> …
The usual eta-rule states that, in any context C[x], we have
C[s] = match s with (cons x xs => C[cons x xs])
With this rule, we have
s = match s with (cons x xs => cons x xs)
= match s with (cons x xs => cons x (match xs with (cons x’ xs’ => cons x’ xs’)))
= …
which matches the result of normalizing (id’ s) above until the deepest level, where we come across the Y. So the conversion makes s equal to id’ s “at infinity”.
With inductive types, the eta-rule can be proved propositionally by induction. But with coinductive types the derivation is infinite, so there is no finite term that can witness the propositional equality. This strongly suggests that for coinductive types propositional equality should also be coinductive.
To unsubscribe from this group and stop receiving emails from it, send an email to HomotopyTypeTheory+unsub...@googlegroups.com.