数学の問題の例文を用いて、文脈(Context)と事実(fact)を説明しよう。
a,tを実数として、A=\begin{pmatrix}t & t-1 \\ a & t+3\end{pmatrix}とする。
a=1, t=-2のとき、Aの逆行列を求めよ。
a=0のとき、Aが逆行列を持つようなtの値をの範囲を求めよ。
どのようなtに対しても、Aが常に逆行列を持つように、aの範囲を定めよ。
Aはあるtの値に対しても、常に逆行列を持つことを示せ。
まず、初めの文から「a,tを実数として」という事実(fact)が加わる。また行列Aの定義も一つの事実である。これら事実の集合を文脈(context)という。ここで初めの文の文脈を文脈rootと名づけておこう。また、1.で新しい事実が加わるが(この加えた文脈を文脈1としておこう。)、2.では文脈rootの事実以外は忘れ去られる。(この文の時点の文脈を文脈2としておこう。)このとき、文脈rootは文脈1,文脈2の部分文脈(subcontext)といい、2.の時点で文脈1は不活性(inactive)で文脈2が活性(active)であるという。
declare(a1,属性1,a2,属性2,...)は、a1に属性1,a2に属性2,を付ける。
変数・関数に指定できる事実の属性はfeatures()で確認できる。(それ以外にも属性はあるが、それはここでは書かない。)
属性は以下のようになっており、競合しない属性ならいくつもつけることができる。
またassume(kind(変数,属性))でも、宣言できる。
関数に対して../関数を定義する
featurep(変数,属性)は変数に属性があるとき、trueを返す。
assume(式)は「式が成り立つとする」といった仮定を現行の文脈に付加する。
facts(変数)は変数に課された事実を一覧する。
facts()はいまの文脈で成り立つ事実を一覧する。
forget(式)は式の仮定が成り立つ事実を消す。
Maximaでは、起動時にglobalと、それを部分文脈を持つinitialの2つの空の文脈が作られる。どちらも不活性で、現行の文脈はinitialになっている。
supercontext(文脈名,部分文脈)は新しい文脈を部分文脈(subcontent)の上に作る。
newcontext(文脈名)は新しい文脈をglobalを部分文脈として作った上、新しい文脈を活性化し、現在の文脈とする。
contexts()は文脈の一覧をリストで返す。
activecontexts()は活性化している文脈の一覧をリストで返す。
contextの変数に現行の文脈が割り当てられている。現行の文脈を変えるときはこの変数に新しい文脈を割り当る。
activate(文脈名)は文脈を活性化する。
deactivate(文脈名)は文脈を不活性化する。
killcontext(文脈名)は文脈を消す。ただし、globalは消せない。