Edited at

式・文・述語・言明・表現・項


式/formula @数学

式はざっくり「真か偽かが判定できる記号列」。例えば 1 + 1 = 2というのは真な式。1 + 1 = 3 は偽な式。x + 1 = 2 は真になり得る式。一方 1 + 1 は真でも偽でもないので式でない。+ 1 + は意味不明(構文的に正しくない)なので式ではない。

注:正確な定義は 純構文的な規則をもつ記号列として与えられるので、上記の「真偽が問える」という性質は付随的。式に真偽値を与える意味論的操作は付値と呼ばれる。


文/sentence @数学

文は自由変数を含まない式。自由変数を含まないっていうのは登場する変数が見せかけの変数でしかないもの。1 + 1 = 2は変数がいないので文。∀x. x = x(意味: どんな数も自分自身と等しい)は変数が登場するけど、∀で束縛されているので文。x + 1 = 2 は xが自由変数なので文ではない。∀x. y = x + 1(意味: 全ての数に対して自身に1を足した数とyが一致する)は yが自由変数なので文でない。

ただし、「自由変数が現れていても∀をくっつける」という取り決めをしている場合、自由変数があっても文とみなすことがある。∀x. x + y = 1は文ではないけど、∀y∀x x + y = 1の略記だと見なして話を進めることがある(例:集合論の公理)。


述語/predicate @数学

文とは逆で、自由変数を含む式のことを述語という。x + 1 = 5はxが自由変数なので述語。述語では、自由変数への付値によって真になったり偽になったりする。真になる付値全体を真理条件と呼ぶこともある。x + 3 > 0の真理条件は -3より大きい数 といった具合。「真理条件を満たすモノたち」という形で数(などの議論対象)の集合を指定することを内包表記という。

述語に登場する変数の数に注目して、1変数述語、2変数述語などと呼び分けることがある。述語の具体的な形を捨象したい場合は φ(x), ψ(x, y)などと記述することがある。この描像では述語は(関数ではないが)関数的である。


言明/statement @数学

数学でははっきりとした定義はない(と思う)。多くの場合 文と交換可能に使われたり、メタレベルの文を指すことがある。なお、論理学では 命題/proposition と言明 はかなり似た使われ方をする(命題自体も結構曖昧に使われている用語でもあるが、式/文の記号列そのものではなく、それが意味しているもの、例えば真理条件といった抽象的な存在物を指す)


表現/expression @数学

数学でははっきりとした定義はない(と思う)。論理学寄りな使われ方では 項/term や 部分論理式/subformula 部分項/subterm と互換に使われ、計算論寄り(というかラムダ計算)の文脈では 式/statement と互換な使われ方をする。


項/term @数学

式を構成する部分。変数や定数は項で、それらに関数を適用したのも項。つまり 1-4x は項。1 + 1x * 3も項。1 + 1 = 2は項ではない(等号は述語であり関数ではない)。


式/expression @プログラミング

数学における term/項 と互換に扱われることが多い。つまり変数や定数は式で(注: 構文的には定数・変数であるが式とみなしてもよい)、それらに関数・演算子を適用したのも式。1-4x は式。1 + 1x * 3toString(x + 7)も式。

式は「値を持つ」という性質が最もフォーカスされる。「その式の値は何になる?」というのが常にプログラム上の重要な点となる。

lisp系の言語や Rubyではすべてが expression なので (後述する) 文/statement @プログラミング と同じ意味に使われることになる。


項/term @プログラミング

式/expression @プログラミング と互換。


文/statement @プログラミング

プログラミングにおいて式という訳語は statement や sentence が当てられることが多い。大抵の言語において「プログラムは 文の集まりだ」で文を定義する。if文, 定義文/代入文, for文など。

文は「値を持たない」という性質を持つことが多い。(例:「for 文の値は?」が多くの言語においてナンセンス)ただし、C言語の代入文 a = 1のように 値を持つ式もあり、式文とよばれることもある。特に Rubyでは全ての文が値を持つ。


述語/predicate @プログラミング

True, Falseというデータを返す関数(数学では述語は式/真理関数であり 関数ではない)。テスト関数とも呼ばれる。isEven(x)hasElement(x)といった名づけがされる。