anchor.diff:          let nx = new Var(newVar (x.Name), x.Type)
           nx, (x, nx) :: renamings
         else
  -        x, renamings
  +        x, (x, x) :: renamings
       let ne = variableRenaming e newRenamings
       Expr.Lambda(nx, ne)
     | ExprShape.ShapeVar(x) ->
  
positive.code:         let nv = new Var(newVar (v.Name), v.Type)
          nv, (v, nv) :: renamings
        else
          v, renamings
      let ne2 = variableRenaming e2 newRenamings
      Expr.Let(nv, ne1, ne2)
    | ExprShape.ShapeLambda(x, e) ->
  
negative.code: 
  let captureAvoidingSubstitution (e: Expr) (mapping: (Var * Expr) list): Expr = 
    let substitutedE = e.Substitute(fun v2 -> mapping |> List.tryFind (fun (v, a) -> v = v2) |> Option.map snd)
    variableRenaming substitutedE []
    // let renamedE = mapping |> List.map (fun (v, _) -> v, v) |> variableRenaming e
    // renamedE.Substitute(fun v2 -> mapping |> List.tryFind (fun (v, a) -> v = v2) |> Option.map snd)