 				},
 				ifUniversal: { parameters, type in
 					Substitution(lazy(parameters).map { ($0, Term(freshVariable?() ?? Manifold.Variable())) }).apply(type.instantiate(freshVariable))
-			})
+				},
+				otherwise: const(Term(type)))
 		}
 		return cata(instantiate)(self)
 	}

	private static func distinctTerms(type: Type<Set<Term>>) -> Set<Term> {
		let binary: (Set<Term>, Set<Term>) -> Set<Term> = { $0.union($1) }
		return type.analysis(
			ifVariable: const([]),
			ifUnit: const([]),
			ifConstructed: {
				$0.analysis(
					ifUnit: [],

	public var parameters: [Term] {
		func parameters(type: Type<(Term, [Term])>) -> [Term] {
			return type.analysis(
				ifConstructed: {
					$0.analysis(
						ifUnit: [],
