# Clearing a specific definition

Consider the case where a symbol has multiple definitions attached to it,

a /: Subscript[a,2] := 1
a[b_] := 2
a[b_, c_] := 3


How does one clear (/unset/remove) only one of those definitions while leaving the others intact?

-
=. works nicely for removing any of the last two definitions. You need TagUnset[] to remove the first one. –  Ｊ. Ｍ. Jan 18 '12 at 0:32

You can use Unset for this, like so:

a[b_, c_] =.


=. works with UpValues too (the full form of this has TagUnset):

a /: Subscript[a,2] =.


You need to use the same pattern in Unset that you used in the definition. Get this using Information (i.e. ?a).

-

You can use Unset or =. to remove a single definition. For example, for your above function its DownValues are

DownValues@a
Out[1]= {HoldPattern[a[b_]] :> 2, HoldPattern[a[b_, c_]] :> 3}


Unsetting the definition for a[b_, c_],

a[b_, c_] =.
DownValues@a
Out[2]= {HoldPattern[a[b_]] :> 2}


It works similarly for UpValues too, i.e., you can do a /: Subscript[a,2]=. to clear that particular UpValue

-