論理関数と区分関数

ネストした論理関数と区分関数は,ネストした数学関数と同じように展開することができる.展開にはLogicalExpandPiecewiseExpandを使用する.

LogicalExpand[expr]expr 中の論理関数を展開する
PiecewiseExpand[expr]expr 中の区分関数を展開する
PiecewiseExpand[expr,assum]指定の仮定のもとで展開する

論理関数と区分関数の展開

LogicalExpandは論理式をORとANDからなる標準的な選言標準形(disjunctive normal form,略してDNF)にする.

デフォルトにより,Wolfram言語はこの式を変更しない.
In[1]:=
Click for copyable input
Out[1]=
LogicalExpandを使うとこの式がORとANDを含む形に展開される.
In[2]:=
Click for copyable input
Out[2]=

LogicalExpandはすべての論理関数に使うことができ,常に論理式を標準的なORとANDの形式にする.必然的に結果が非常に大きくなることもある.

XorはANDとORを用いて表すことができる.
In[3]:=
Click for copyable input
Out[3]=

ネストした条件の任意の集合は常に,単一のPiecewiseオブジェクトからなる「区分標準形式」に事実上平坦化される.Wolfram言語ではPiecewiseExpandを使ってこれが行える.

デフォルトにより,Wolfram言語はこの式を変更しない.
In[4]:=
Click for copyable input
Out[4]=
PiecewiseExpandを使うと,この式が単一のPiecewiseオブジェクトに平坦化される.
In[5]:=
Click for copyable input
Out[5]=

MaxAbsのような関数は,ClipUnitStepと同じように,暗示的に条件を含んでいる.それらの条件の組合せはPiecewiseExpandを使って単一のPiecewiseオブジェクトに簡約することができる.

これは結果を単一のPiecewiseオブジェクトとして与える.
In[6]:=
Click for copyable input
Out[6]=
これは,が実数であると仮定すると,Piecewiseオブジェクトとして書くこともできる.
In[7]:=
Click for copyable input
Out[7]=

FloorModFractionalPart等の関数は,原則として無限の場合を含むことができるが,Piecewiseオブジェクトによって表すこともできる.

に境界がなければ,場合数が無限になるかもしれない.
In[8]:=
Click for copyable input
Out[8]=

Wolfram言語はデフォルトで,計算のどの段階においても,Floorのような単一の区分関数の展開で明示的に生成する場合数を限定している.この境界は$MaxPiecewiseCasesを再設定することで変更できる.