 	}
 
 	static func Constructor(body: AST<ABTTerm>) -> ABTTerm {
-		return .In(body.foldMap { $0.freeVariables }, .Constructor(body))
+		return .In(body.foldMap { $0.freeVariables }, .Identity(body))
 	}
 
 	var freeVariables: Set<Name> {

enum ABT<Syntax, Term> {
	case Variable(Name)
	case Abstraction(Name, Term)
	case Constructor(Syntax)


	static func equal(syntaxEqual syntaxEqual: (Syntax, Syntax) -> Bool, termEqual: (Term, Term) -> Bool)(_ left: ABT, _ right: ABT) -> Bool {

			return name == old
				? self
				: .Abstraction(name, body.rename(old, new))
		case let .Identity(syntax):
			return .Constructor(syntax.map { $0.rename(old, new) })
		}
	}
