anchor.diff:  
   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 []+  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)
positive.code:         let nx = new Var(newVar (x.Name), x.Type)
          nx, (x, nx) :: renamings
        else
          x, renamings
      let ne = variableRenaming e newRenamings
      Expr.Lambda(nx, ne)
    | ExprShape.ShapeVar(x) ->
  
negative.code:         let nv = new Var(newVar (v.Name), v.Type)
          nv, (v, nv) :: renamings
        else
          v, (v, v) :: renamings
      let ne2 = variableRenaming e2 newRenamings
      Expr.Let(nv, ne1, ne2)
    | ExprShape.ShapeLambda(x, e) ->
  