不連続部で有向限界を評価するときの限界関数の一貫性のない動作

Aug 19 2020

次の式について考えてみます。

(* In *) expr1 = Hold[Limit[Sign[x], x -> y, Direction -> "FromAbove"] == Sign[y]]

次に、特定の値をy次のように置き換えます。

(* In *) expr2 = expr1 /. y -> 0

今それを評価すると、一貫性のない結果が得られます。

(* In *) ReleaseHold[expr1]
(* Out *) True
(* In *) ReleaseHold[expr2]
(* Out *) False

私の意見でexpr1は、誤って評価されています。この問題につながるLimit可能性のある特殊なケースを関数がどういうわけか「忘れている」と思いますy == 0。どうすればこれを回避できますか?Limit[Sign[x], x -> y, Direction -> "FromAbove"]正しい結果として、次のようなものが得られると思います。

(* Out *) Piecewise[{{Sign[y], y != 0}, {1, y == 0}}]

回答

2 Pillsy Aug 19 2020 at 21:25

次のように、のGenerateConditionsオプションを使用しますLimit

limit = Limit[Sign[x], x -> y, GenerateConditions -> True]
(* ConditionalExpression[Sign[y], y != 0] *)

limit /. y -> 0
(* Undefined *)

これは多くのシンボリック関数で機能します。私の意見では、それはTrue全面的にデフォルトになるはずですが、現在のデフォルトはAutomaticであり、これは異なる機能で異なることを行います。