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?

  • 4
    $\begingroup$ =. works nicely for removing any of the last two definitions. You need TagUnset[] to remove the first one. $\endgroup$ Commented Jan 18, 2012 at 0:32

2 Answers 2


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

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

Unsetting the definition for a[b_, c_],

a[b_, c_] =.
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


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.