Forming conjugate acid of borate anion via protonation

I am a biologist so please forgive me as I likely won't be as rigorous as a professional chemist. I am using the [RDKit](https://www.rdkit.org/) package to extract organic molecules from salts, where one ion is organic and the other inorganic. My code is attached below.


My strategy is to first isolate the organic ion, and then add or subtract protons, $\ce{H+}$, as necessary. For organic anions I try to form the neutral molecule by protonating atoms with negative formal charge; for organic cations I try to remove $\ce{H+}$ from an atom with positive formal charge.


In the simple case of sodium acetate, this method works as expected to give acetic acid:


![Acetic acid from sodium acetate](https://i.stack.imgur.com/oZ8o2.png)
However, this approach fails with sodium trihydroxy(phenyl)borate:


![Sodium trihydroxy(phenyl)borate](https://i.stack.imgur.com/x56fI.png)
since there is no way to add an extra proton to the boron atom which has negative formal charge.


I am guessing that it is not really possible to neutralize the trihydroxy(phenyl)borate anion by adding a proton.
Removing one of the $\ce{-OH}$ groups would work, but that is not acceptable for me, because that is not dependent on the pH.
Is this correct, or there is another explanation?


The code:



```
SMARTS_inorganic_ion="[Li,Na,K,Mg,Ca,F,Cl,Br,I]"

from rdkit.Chem import SaltRemover
remover = SaltRemover.SaltRemover(defnData=SMARTS_inorganic_ion)
SMILES_sodium_acetate="CC(=O)[O-].[Na+]"
mol_acetate = remover.StripMol(mol_sodium_acetate)

def neutralize_atoms(mol):
    # Recognize charged atoms
    pattern = Chem.MolFromSmarts(
        "[+1!h0!$([\*]~[-1,-2,-3,-4]),-1!$([*]~[+1,+2,+3,+4])]")
    at_matches = mol.GetSubstructMatches(pattern)
    at_matches_list = [y[0] for y in at_matches]
    if len(at_matches_list) > 0:
        for at_idx in at_matches_list:
            atom = mol.GetAtomWithIdx(at_idx)
            chg = atom.GetFormalCharge()
            hcount = atom.GetTotalNumHs()
            atom.SetFormalCharge(0)
            # Adjut the number of hydrogen according to the change in charge
            atom.SetNumExplicitHs(hcount - chg)
            atom.UpdatePropertyCache()
    return mol

```



Essentially, you are trying to determine the *conjugate acid* of the borate anion.


Yes, that approach is likely to fail with boric acid & borate anions. In fact if you want to form the conjugate acid of $\ce{RB(OH)3-}$ by protonation, instead of protonating the *boron* atom, you should protonate the *oxygen* atom, because that's the atom that possesses an actual lone pair that can accept the proton.


[![Formal "protonation" of borate anion](https://i.stack.imgur.com/4Qb5b.png)](https://i.stack.imgur.com/4Qb5b.png)


Formally speaking, this species in the middle would be the conjugate acid, because you have added a proton to the original base. In practice, the water molecule would "fall off" to reveal the original boric acid. [Of course, this is probably quite difficult to code in a foolproof way.]


The boric acid / borate pair is special:\* it doesn't work via the usual "release $\ce{H+}$" like what acetic acid does.† Instead, boric acid *accepts* $\ce{OH-}$ to form borate. So, instead of adding and subtracting $\ce{H+}$, you need to give and take $\ce{OH-}$. Naturally, both of these two methods (producing $\ce{H+}$ and absorbing $\ce{OH-}$) have the same effect on the pH, that is, they both bring the pH down. Effectively, the following reaction is responsible for the acidity:


$$\ce{RB(OH)2 + H2O <=> RB(OH)3- + H+}$$


and it's not right to say that this is pH-independent. If you add more acid to the borate anion, the position of this equilibrium clearly shifts to the left, which regenerates the original boric acid. Conversely, if you add more base to this system, then the base will react with $\ce{H+}$ on the right, pulling the equilibrium position over to the right and generating more of the borate anion.




---


\* Some might argue that borate is a problematic conjugate base because boric acid is a problematic acid, but I find that reasoning to be slightly circular. I think it's clearer to ascribe weirdness to the entire acid-base system.


† Actually, it's possible for *boric acid* to work as an acid by releasing $\ce{H+}$: $$\ce{RB(OH)2 <=> RB(OH)(O)- + H+}$$ but that's a different conjugate base, and your question focuses on $\ce{RB(OH)3-}$, so we can't go down that path.


 1