 enum ABT<Syntax, Term> {
 	case Variable(Name)
 	case Abstraction(Name, Term)
-	case Constructor(Syntax)
+	case Identity(Syntax)
 
 
 	static func equal(syntaxEqual syntaxEqual: (Syntax, Syntax) -> Bool, termEqual: (Term, Term) -> Bool)(_ left: ABT, _ right: ABT) -> Bool {

	}

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

	var freeVariables: Set<Name> {

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