Constructive type theory