Ramified type theory