This paper proposes a type system for logic programming where types are \u000Astructured in two ways. Firstly, functions and predicates may be declared with \u000Atypes containing type parameters which are universally quantified over all \u000Atypes. In this case each instance of the type declaration can be used in the \u000Alogic program. Secondly, types are related by subset inclusions. In this case a \u000Afunction or predicate can be applied to all subtypes of its declared type. \u000AWhile previous proposals for such type systems have strong restrictions on the \u000Asubtype relation, we assume that the subtype order is specified by Horn clauses \u000Afor the subtype relation ≤. This allows the declaration of a lot of \u000Ainteresting...