算法
n 項演算(エヌこうえんざん、n-ary operation)は、集合の用語で説明すると、集合 A の直積集合 A の部分集合 D から A への写像であり、ここではそれを f とする。またこの D を定義域という。 n は任意の順序数でよい。これを(仮に)f の項数とよぶ。 A は、 i < n をみたす順序数 i を添数とする A の元の族 (ai)i<n すべてからなる集合を表す。 集合 A とそこにおける演算の族 R との組 (A, R) を代数系という。
この記事では以下これを「算法」と呼んでいる(理由は最後の節を参照)。"operation" の訳としては他に「作用」もあり、 "operator" を「演算子」ではなく「作用素」とするのはその流儀である。他言語において相互に連想されるような語が使われている場合、日本語訳としてもそれに対応するような語が選べれば望ましいが、難しい場合も多い。
他の「算法」の語については、(曖昧さ回避記事となっている)算法 (数学) の記事を参照。
非全域的(あるいは局所的)な算法も珍しくはない。 例えば、あらゆるサイズの行列の全体を M で表すとき、M の二元 A, B にその和 A + B を対応させる写像は M における 2 項算法であるが、A, B が同サイズのときにしか A + B が定義されないから、非全域的算法である。 A, B にその積 AB を対応させる写像も M における 2 項算法であるが、A の列の個数と B の行の個数が等しいときにしか AB が定義されないから、やはり非全域的算法である。
形式言語における算法は、非全域的のものが一般的である。 例えば、述語言語(論理式と項とから成る)における論理記号は、論理式に対してのみ適用可能な 2 項または 1 項の非全域的算法を表すと解される。
項数が 2 より多い非全域的算法も珍しくはない。 例えば、述語言語における n 変数関数記号や n 変数述語記号は、項に対してのみ適用可能な n 項算法を表すと解される。
算法を「演算」とよぶことも多い。 しかし、ここで考えた「算法の概念」の名前としては、「算法」も「演算」も相応しくはないであろう。 「算法」は「計算の規則」あるいは「計算の方法」を連想させ、「演算」は「計算を演ずるという行為」を連想させ、ともに「写像」としての「算法の概念」を連想させにくい。 一つの写像に対しても、それの「計算の方法」は一般に複数あり、「計算する方法」も「計算の規則」も具体的に記述できない場合さえあり、人や機械が「計算を演ずるという行為」はもちろん写像とは異なるからである。 「写像」という概念が未発達で「計算」と「計算の仕方」の違いも曖昧であった時代に生まれた「算法」とか「演算」とかの言葉を用いるのが間違っているのであろう。
冒頭に記したとおり、計算機科学の分野ではアルゴリズムを「算法」とよぶこともあり、その場合には上記の意味での「算法」は「演算」とよぶ方がよいかもしれない。 しかし数学の分野では、上記の意味での「算法」という術語も昔から定着している。 むしろアルゴリズムを「算法」ではなく「計算手順」とする方が、意味からいっても先例を尊ぶ点でも、好ましいであろう。