I think you are trying to say a "but" operator is equivalent "not and" operator and that !(A->B) is equivalent to "but".
I am assuming that "!" symbolizes the negation operator and "->" symbolized the if-then ( or implies ) operator.

Yet ...

P

Q

P->Q

T

T

T

T

F

F

F

T

T

F

F

T

P

Q

P and Q

!(P and Q)

T

T

T

F

T

F

F

T

F

T

F

T

F

F

F

T

So I would say "A and !B"is not equivalent to "!(A -> B)" and I wouldn't say "A but B" <=> "A and !B", but I could just be misunderstanding your notation. :)

As far a what a but operator is I would say it should be equivalent to the "Boolean And" operator.
And is not needed in a programming language. The word "but" is used in commonly to emphasis
that an assumption is false. Example ...

If a student where to errorously assume that multiplaction is
the same as addition the student might state ...
1 + 1 = 2 and 2 + 2 = 4 and 2 * 2 = 4 and 1 * 1 = 2
... which we know to be false. The student's teacher would say ...
1 + 1 = 2 and 2 + 2 = 4 and 2 * 2 = 4 but 1 * 1 != 2
... to correct the student.
This is the same as
1 + 1 = 2 and 2 + 2 = 4 and 2 * 2 = 4 and 1 * 1 != 2
T and T and T and T is TRUE
It is not equal to
1 + 1 = 2 and 2 + 2 = 4 and 2 * 2 = 4 and not (1 * 1 != 2)
T and T and T and F is FALSE

But merely gives emphasis to the fact that the student's assumption is false.

Being right, does not endow the right to be rude; politeness costs nothing.Being unknowing, is not the same as being stupid.Expressing a contrary opinion, whether to the individual or the group, is more often a sign of deeper thought than of cantankerous belligerence.Do not mistake your goals as the only goals; your opinion as the only opinion; your confidence as correctness. Saying you know better is not the same as explaining you know better.

I shouldn't have to say this, but any code, unless otherwise stated, is untested