Generally speaking I believe that the richness of the English language should be used at every opportunity. If you use the same expression over and over again, it becomes potboiler writing. Boring. Unimaginative. Tedious.
There is a "but" here. And that "but" is technical documentation, which I believe is more effective if the writer maintains a uniform style of description. The reason is that the reader then doesn't have to guess whether the writer was using some form of nuance in their description of the code. If you're describing an Interface, and always use the same terms, then the reader knows exactly what you are saying and doesn't have to guess whether you might have been implying a difference between this Interface and that Interface because a different term was used to describe it.
All that having been said, I would suggest one change to what you're writing. (And I realise that this is well outside the ELU group's usual purview.) As you doubtless well know, an Interface does not in itself "provide" functionality (in the sense of implementing that functionality in a usable form), any more than the blueprint of a house can be said to provide the house. It's part of the process of providing the house, true; but it does not itself provide it. It merely defines the base level of functionality that a class which implements the Interface must provide. I would therefore be more inclined to write:
"The Interface IMath defines the common math functions for..."
"The Interface IMath specifies the common math functions for..."
There are probably some other words that you could use instead of defines or specifies, and I'll readily admit that anyone who knows what an Interface is won't be actually misled by the word "provides" in this context... but in my humble opinion it's not a technically accurate definition of what it's doing.
Though I'm well aware that others may have differing opinions on that point.