 	func quote(n: Int) -> Term {
 		return analysis(
 			ifType: const(.type),
-			ifFree: {
-				$0.analysis(
-					ifGlobal: const(Term.free($0)),
-					ifLocal: const(Term.free($0)),
-					ifQuote: Term.bound)
-			},
 			ifPi: { type, f in
 				f(.parameter(.Quote(n))).either(
 					ifLeft: { x in assert(false, "\(x) in \(self)") ; return Term.type },

	// MARK: Cases

	case Type
	case Free(Name)
	case Pi(Box<Value>, Value -> Either<Error, Value>)
	case Sigma(Box<Value>, Value -> Either<Error, Value>)
	case Neutral(Box<Manifold.Neutral>)


	public func analysis<T>(
		@noescape #ifType: () -> T,
		@noescape ifPi: (Value, Value -> Either<Error, Value>) -> T,
		@noescape ifSigma: (Value, Value -> Either<Error, Value>) -> T,
		@noescape ifNeutral: Manifold.Neutral -> T) -> T {
		switch self {
		case .Type:
			return ifType()
		case let .Pi(type, body):
			return ifPi(type.value, body)
		case let .Sigma(type, body):
