Re: question about Protect

• To: mathgroup at smc.vnet.net
• Subject: [mg75116] Re: [mg75079] question about Protect
• From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
• Date: Wed, 18 Apr 2007 04:52:07 -0400 (EDT)
• References: <200704170011.UAA08565@smc.vnet.net>

```I made a similar point in my post:

hhttp://forums.wolfram.com/mathgroup/archive/2007/Apr/msg00254.html

It seems that built-in functions, when they call on another built in
function will sometimes Protect if it had previously been
Unprotected. You can see this here:

In[5]:=
Unprotect[Limit];

In[6]:=
Attributes[Limit]

Out[6]=

In[9]:=
Integrate[Exp[-x], {x, 1, Infinity}]

Out[9]=
1/E

In[10]:=
Attributes[Limit]

Out[10]=

By contrast:

In[11]:=
Unprotect[Limit];

In[12]:=
Attributes[Limit]

Out[12]=

In[13]:=
Integrate[Exp[-x], {x, 1, 2}]

Out[13]=
(-1 + E)/E^2

In[14]:=
Attributes[Limit]

Out[14]=

I have not investigated this sufficiently to be able to describe the
exact circumstancs under which this happens but I speculate that a
Mathematica function that calls on another Mathematica function
sometimes (or often or always (?)) Unprotects it and when it finished
its job Protects it again. If this is correct than a function that
had been earlier Unprotected by a user would end up automatically
Protected. Probably a better approach would be to simply save and
resotore the attributes the function had when it was called; so this
might be a minor bug?

Andrzej Kozlowski

On 17 Apr 2007, at 09:11, dimitris wrote:

> Hello.
>
> The following code add a rule for the Limit command
>
> In[1]:=
> Off[General::spell1]
> Unprotect[Limit];
> Limit[a___] := Null /; (Print[InputForm[limit[a]]]; False)
>
> For example
>
> In[7]:=
> Integrate[1/Sqrt[Abs[x]], {x, -1, 2}]
>
>> From In[7]:=
> InputForm[limit[1 + (1 + x)/2 + (3*(1 + x)^2)/8, x -> -1, Direction ->
> -1, Assumptions -> True]]
>> From In[7]:=
> InputForm[limit[(-I)/Sqrt[x], x -> 0, Direction -> 1, Assumptions ->
> True]]
>> From In[7]:=
> InputForm[limit[I/Sqrt[x], x -> 0, Assumptions -> True]]
>> From In[7]:=
> InputForm[limit[2*Sqrt[x], x -> 1, Direction -> 1, Assumptions ->
> True]]
>> From In[7]:=
> InputForm[limit[2*Sqrt[x], x -> 0, Direction -> -1, Assumptions ->
> True]]
>> From In[7]:=
> InputForm[limit[1/Sqrt[x], x -> 0, Direction -> -1, Assumptions ->
> True]]
>> From In[7]:=
> InputForm[limit[1/Sqrt[x], x -> 0, Assumptions -> True]]
>> From In[7]:=
> InputForm[limit[1/Sqrt[2] - (-2 + x)/(4*Sqrt[2]) + (3*(-2 + x)^2)/
> (32*Sqrt[2]), x -> 2, Direction -> 1, Assumptions -> True]]
>> From In[7]:=
> InputForm[limit[2*Sqrt[x], x -> 2, Direction -> 1, Assumptions ->
> True]]
>> From In[7]:=
> InputForm[limit[2*Sqrt[x], x -> 0, Direction -> -1, Assumptions ->
> True]]
>
> Out[7]=
> 2*(1 + Sqrt[2])
>
> Note that I have NOT protect the Limit command. Nevertheless,
>
> In[8]:=
> Clear[Limit]
> Clear::wrsym: Symbol Limit is Protected.
>
>
> Why do we get this message? How Limit was protected WITHOUT telling
> so?
>
> In[12]:=
> Information["Limit", LongForm -> True]
>
> "Limit[expr, x->x0] finds the limiting value of expr when x approaches
> x0."*Button[More..., ButtonData :> "Limit",
>    Active -> True, ButtonStyle -> "RefGuideLink"]
> Attributes[Limit] = {Listable, Protected}
> Limit[a___] := Null /; (Print[InputForm[limit[a]]]; False)
> Options[Limit] = {Analytic -> False, Assumptions :> \$Assumptions,
> Direction -> Automatic}
>
> Of course
>
> In[19]:=
> Unprotect[Limit];
> Clear[Limit];
> Protect[Limit];
>
> In[22]:=
> Information["Limit", LongForm -> True]
>
> "Limit[expr, x->x0] finds the limiting value of expr when x approaches
> x0."*Button[More..., ButtonData :> "Limit",
>    Active -> True, ButtonStyle -> "RefGuideLink"]
> Attributes[Limit] = {Listable, Protected}
> Options[Limit] = {Analytic -> False, Assumptions :> \$Assumptions,
> Direction -> Automatic}
>
> but the question still remains!
>
>

```

• Prev by Date: Finding unknown parameters
• Next by Date: Re: LegendreP Evaluation Mystery
• Previous by thread: question about Protect
• Next by thread: Re: question about Protect