Thanks for the detailed response...
On 28 Dec 2010, at 23:29, Luke Palmer wrote:...I suppose I might say something.
Eta conversion corresponds to extensionality; i.e. there is nothing
more to a function than what it does to its argument.
I think
Conor McBride is the local expert on that subject.
Dependent type theories have programs in types, and
so require some notion of when it is safe to consider open terms equal
in order to say when types match:
it's interesting to see how far one
can chuck eta into equality without losing decidability of conversion,
messing up the "Geuvers property", or breaking type-preservation.
It's a minefield, so tread carefully. There are all sorts of bad
interactions, e.g. with subtyping (if -> subtyping is too weak,
(\x -> f x) can have more types than f), with strictness (if
p = (fst p, snd p), then (case p of (x, y) -> True) = True, which
breaks the Geuvers property on open terms), with reduction (there
is no good way to orientate the unit type eta-rule, u = (), in a
system of untyped reduction rules).
But the news is not all bad. It is possible to add some eta-rules
without breaking the Geuvers property (for functions it's ok; for
pairs and unit it's ok if you make their patterns irrefutable). You
can then decide the beta-eta theory by postprocessing beta-normal
forms with type-directed eta-expansion (or some equivalent
type-directed trick). Epigram 2 has eta for functions, pairs,
and logical propositions (seen as types with proofs as their
indistinguishable inhabitants). I've spent a lot of time banging my
head off these issues: my head has a lot of dents, but so have the
issues.
So, indeed, eta-rules make conversion more extensional, which is
unimportant for closed computation, but useful for reasoning and for
comparing open terms. It's a fascinating, maddening game trying to
add extensionality to conversion while keeping it decidable and
ensuring that open computation is not too strict to deliver values.
Hoping this is useful, suspecting that it's TMI