Extensional type theory