anchor.diff:          | Some r ->
               Some (PackageInfo.from r x.Options.Settings)
           | None -> None
  +
   module LockFileSerializer =
  +    let packageNames = System.Collections.Concurrent.ConcurrentDictionary<string,string>()
  +    let writePackageName (name:PackageName) =
  +        let packageName = name.ToString()
  +        match packageNames.TryGetValue(packageName.ToLower()) with
  +        | true, x -> x
  +        | _ -> packageName
  +
       /// [omit]
       let serializeOptionsAsLines options = [
           if options.Strict then yield "REFERENCES: STRICT"
  
positive.code:                                 failwithf "No version specified for package %O in group %O." package currentGroup.GroupName
                              parts'.[1] |> removeBrackets
  
                          { currentGroup with 
                              LastWasPackage = true
                              Packages = 
                                      { Source = PackageSource.Parse(remote, AuthService.GetGlobalAuthenticationProvider remote)
                                        Name = PackageName parts'.[0]
                                        Dependencies = Set.empty
                                        Unlisted = false
                                        Settings = settings
  
negative.code: 
                            let restrictions = filterRestrictions options.Settings.FrameworkRestrictions restrictions |> getExplicitRestriction
                            if FrameworkRestriction.NoRestriction = restrictions || restrictions = getExplicitRestriction options.Settings.FrameworkRestrictions then
                              yield sprintf "      %s %s" (writePackageName name) versionStr
                            else
                              yield sprintf "      %s %s - restriction: %O" (writePackageName name) versionStr restrictions]
      
          String.Join(Environment.NewLine, all |> List.map (fun s -> s.TrimEnd()))
  
  