Conversation

The basics are the same. Notable difference: evaluation/conversion should be non-type directed, types shouldn't appear in semantics; it's both simpler and faster. Andreas Abel & Danny use types to eta expand nfs and check conversion on nfs...
1
2
Instead we should check conversion on semantic values directly, and it's known that eta for Pi and Sigma are decidable in purely syntax-directed way. The result is that types don't appear in evaluation, nor do we have to build up useless intermediate nfs just to check conversion
3
2
(syntax-directed eta doesn't work for unit type, but in that case it's better to handle eta in the elaborator, by tagging irrelevant terms during checking, than in the unifier, where hauling types around is a major overhead)
1