ポーランド記法(PN)は、通常ポーランド記法(NPN)[ 1 ] 、ルカシェヴィチ記法、ワルシャワ記法、ポーランド接頭記法、東方記法、または単に接頭記法とも呼ばれ、演算子が 被演算子の前に配置される数学記法です。これは、演算子が被演算子の間に配置されるより一般的な中置記法や、演算子が被演算子の後に配置される逆ポーランド記法(RPN)とは対照的です。各演算子の被演算子の数が固定されている限り、括弧は必要ありません。「ポーランド」という名称は、1924年にポーランド記法を考案した論理学者ヤン・ルカシェヴィチ[ 2 ] : 24 [ 3 ] : 78 [ 4 ]の国籍に由来します。 [ 5 ] : 367、脚注3 [ 6 ] : 180、脚注3
ポーランド記法という用語は、通常のポーランド記法と逆ポーランド記法(前置記法と後置記法、中置記法の2つの代替手段)を総称して指す場合がある。[ 7 ]
プログラミング言語のインタプリタが数式表現の構文としてポーランド記法を用いる場合、それは容易に抽象構文木に解析され、実際には数式と1対1の対応関係を定義することができます。そのため、Lisp(下記の「実装」を参照)や関連するプログラミング言語は、構文全体を接頭記法で定義しています(他の言語は接尾記法を使用しています)。
1931年のヤン・ウカシェヴィチの論文[ 5 ]: 367、脚注3 [ 6 ]: 180、脚注3からの引用では、この記法がどのように考案されたかが述べられています。
私は1924年に括弧のない記法のアイデアを思いつきました。その記法を初めて使用したのは、私の論文Łukasiewicz (1)、p.610、脚注です。
Łukasiewicz が引用した文献、すなわち Łukasiewicz (1) [ 8 ]は、明らかにポーランド語の石版印刷された報告書である。Łukasiewicz による参照論文[ 5 ]は、 1965 年にHenry A. PogorzelskiによってJournal of Symbolic Logicでレビューされた。[ 9 ] 1924 年にMoses Schönfinkelの論文を編集したHeinrich Behmann [ 10 ]は、すでに論理式から括弧をなくすというアイデアを持っていた。Łukasiewicz は論文の 1 つで、自分の記法は最もコンパクトで、最初の直線的に書かれた括弧のない記法であると述べているが、最初の記法ではない。なぜなら、Gottlob Frege はすでに 1879 年に括弧のないBegriffsschrift記法を提案していたからである。[ 11 ]
アロンゾ・チャーチは、数学論理に関する彼の古典的な著書の中で、この記法を、アルフレッド・ホワイトヘッドとバートランド・ラッセルの『プリンキピア・マテマティカ』における論理記法の説明や研究と比較しても、記法体系の中で注目に値するものとして言及している。[ 12 ]
ルカシェヴィチの1951年の著書『現代形式論理の観点から見たアリストテレスの三段論法』の中で、彼は自身の記法の原則は括弧を避けるために関数を引数の前に書くことであり、1929年以来、自身の論理学論文でこの記法を用いてきたと述べている。 [ 3 ]: 78彼はさらに例として、アルフレッド・タルスキと共著した1930年の命題計算に関する論文を挙げている。[ 13 ]
論理学ではあまり使われなくなったが、[ 14 ]ポーランド記法はその後コンピュータ科学で地位を確立した。
1と2を足す式は、ポーランド記法では1 + 2 (中置記法)ではなく、+ 1 2(前置記法)と表記されます。より複雑な式では、演算子は依然として被演算子の前に置かれますが、被演算子自体が再び演算子とその被演算子を含む式である場合もあります。たとえば、従来の中置記法では次のように表記される式は、次のようになります。
ポーランド記法では次のように書ける。
関係するすべての演算子の引数数が既知であると仮定すると(ここで「−」は符号変更の単項関数ではなく、減算の二項演算を表す)、整形式の接頭辞表現は曖昧さがなく、接頭辞式内の括弧は不要である。したがって、上記の式はさらに簡略化して次のようにすることができる。
積の処理は、その2つのオペランド(つまり、5マイナス6と7)が利用可能になるまで延期されます。どの記法でもそうですが、最も内側の式が最初に評価されますが、ポーランド記法では、この「最も内側」であることは、括弧ではなく、演算子とオペランドの順序によって表現されます。
従来の接中記法では、括弧は標準の優先順位規則を上書きするために必要です。上記の例を参照すると、括弧を移動させると、
またはそれらを削除する
式の意味と結果が変わります。このバージョンはポーランド記法で次のように書かれています。
除算や減算のような非可換演算を扱う場合、演算子が引数を取る順序(左から右)と被演算項の順序を一致させる必要があります。例えば、÷ 10 5は、5 の左に 10 があるため、10 ÷ 5(「10 を 5 で割る」と読みます)という意味になります。また、− 7 6 は、6 の左に 7 があるため、7 − 6(「7 から被演算項 6 を引く」と読みます)という意味になります。
前置記法/後置記法は、中置記法で通常用いられる括弧やその他の優先順位規則を用いることなく、意図した演算順序を表現できるという固有の能力から特に人気があります。代わりに、この記法はどの演算子を最初に評価するかを一意に示します。演算子はそれぞれ固定の引数数を持つものとし、必要なオペランドはすべて明示的に与えられるものとします。有効な前置式は常に演算子で始まり、オペランドで終わります。評価は左から右、または逆方向に進めることができます。左から始め、演算子またはオペランドを表すトークンで構成される入力文字列は、スタックの最上位エントリが最上位の演算子(直下)に合う数のオペランドを含むまで、トークンごとにスタックにプッシュされます。スタックの最上位にあるこのトークンのグループ(最後にスタックされた演算子とそれに対応する数のオペランド)は、これらのオペランドに対して演算子を実行した結果に置き換えられます。その後、入力の処理はこの方法で続行されます。有効な接頭辞式の右端のオペランドは、式全体の評価結果を除いてスタックを空にします。右端から開始する場合、トークンのプッシュは同様に行われますが、評価は演算子によってトリガーされ、スタックの先頭で既にその引数数に合う適切な数のオペランドが見つかります。次に、有効な接頭辞式の左端のトークンは、スタック内のオペランド数に合う演算子である必要があり、これも結果を生成します。説明からわかるように、任意のスタック検査機能を持たないプッシュダウンストアで、この解析を実装するのに十分です。
上記のスタック操作の概略は、入力が反転している場合、逆ポーランド記法の式にも適用できます。
下の表は、現代論理学におけるヤン・ウカシェヴィチの記法の核心部分を示しており、これは例えばアーサー・プライアーの形式論理学でも使用されました。[ 15 ]ポーランド語の記法表にあるいくつかの文字は、以下に示すように、ポーランド語の特定の単語を表しています。
ルカシェヴィチの多値論理に関する研究では、量化子は命題値の範囲を網羅していた。
ボチェンスキは、古典命題論理の16個の二項結合子すべてに名前を付けるポーランド記法を導入した。[ 20 ]: 16古典命題論理においては、これはルカシェヴィチの記法の互換性のある拡張である。しかし、ボチェンスキが使用する記法の意味では、両者は互換性がない。そして(非含意と逆非含意について)命題論理とルカシェヴィチはそして様相論理において。
接頭辞表記は、 Lisp S 式で広く使用されています。Lisp では、演算子自体がデータ (第一級関数) であるため、括弧が必要です。Lisp 関数は可変引数にすることもできます。Tclプログラミング言語も Lisp と同様に、mathop ライブラリを通じてポーランド記法を使用します。Ambi [ 21 ]プログラミング言語は、算術演算とプログラム構築にポーランド記法を使用します。LDAPフィルタ構文は、ポーランド接頭辞表記を使用します。[ 22 ]
後置記法は、PostScriptやForthといった多くのスタック指向プログラミング言語で使用されています。CoffeeScriptの構文では、他の言語で一般的な単項後置記法をサポートしつつ、前置記法を用いた関数呼び出しも可能です。
式の戻り値の数は、式に含まれるオペランドの数と演算子の総アリティの差から、演算子の戻り値の総数を引いた値に等しくなります。
ポーランド記法は、通常は後置記法で、特にヒューレット・パッカード社の電卓で採用されている記法です。[ 23 ]より低いレベルでは、後置演算子は、バローズ社の大型システムなどのスタックマシンで使用されています。
Die ältesten Texte in den 'Selected Works', in denen Łukasiewicz polnische Notation verwendet, datieren relativ spät, sind aber Präsentationen vorangehender Arbeiten, die 'in the course of the years 1920–1930' (S. 131) stattgefunden haben, also auchケイネ・ゲナウエレ・ゼイタンガベ・ゲベン。[ルカシェヴィチがポーランド語の記譜法を用いている『選集』の中で最も古いテキストは、比較的後期の作品であるが、「1920年から1930年の間に」制作された以前の作品を紹介するものであり(131ページ)、より正確な年代は示されていない。]
... 注目すべきは、Jan Łukasiewicz の括弧を用いない記法である。この記法では、文字 N、A、C、E、K がそれぞれ否定、選言、含意、同値、連言の役割を果たす。 ...
その使用に伴う困難さから、現在では使われなくなっている。