バード・ミーアテンス形式(BMF)は、関数型プログラミング環境において、プログラム仕様から方程式推論のプロセスを用いてプログラムを導出するための計算法です。IFIPワーキンググループ2.1における研究の一環として、リチャード・バードとランバート・ミーアテンスによって考案されました。
出版物では、バッカス・ナウア形式にちなんでBMFと呼ばれることもあります。また、 WG 2.1の管轄下にあったALGOLにちなんで、また「曲がりくねった」記号を使用していることから、冗談めかしてSquiggolと呼ばれることもあります。あまり使われていない別名ですが、実際には最初に提案されたのはSQUIGOLです。MartinとNipkowは、 Larch Proverを用いてSquiggolの開発証明の自動サポートを提供しました。[1]
基本的な例と表記
Map は、リストのすべての要素に特定の関数を適用するよく知られた 2 階関数です。BMF では次のように記述されます。
同様に、reduceは二項演算子を繰り返し適用することでリストを単一の値に縮める関数です。BMFでは/と表記されます。中立要素eを持つ適切な二項演算子として、
これら2つの演算子と、プリミティブ(通常の加算)と(リストの連結)を使うと、リストのすべての要素の合計とflatten関数を、ポイントフリースタイルで、 およびのように簡単に表現できます。つまり、次のようになります。
同様に、関数合成と連言をと記述すると、リストのすべての要素が述語p を満たすかどうかをテストする関数を次のように簡単に記述できます。
バード(1989)は、非効率で分かりやすい表現(「仕様」)を代数的操作によって効率的な複雑な表現(「プログラム」)に変換します。例えば、仕様「」は最大線分和問題[6]のほぼ文字通りの翻訳ですが、この関数プログラムをサイズのリストに対して実行すると、一般に時間がかかります。バードはこれを基に、時間 で実行される同等の関数プログラムを計算し、これは実際にはカダネのアルゴリズムの関数版です。
導出は図に示されており、計算複雑度[7]は青で示され、法則の適用は赤で示されています。法則の例は[表示]をクリックすると開くことができ、整数、加算、減算、乗算のリストを使用します。Bird の論文での表記は上で使用されている表記とは異なります。、、およびはそれぞれ上記の、、およびの一般化バージョンに対応し、およびはそれぞれその引数のすべての接頭辞と接尾辞のリストを計算します。上と同様に、関数合成は " "で示され、結合優先順位は最も低くなります。例では、リストはネストの深さによって色分けされています。場合によっては、新しい演算がアドホックに定義されます (灰色のボックス)。
準同型補題とその並列実装への応用
リスト上の関数hは、結合二項演算子と中立元 が存在し、次の式が成り立つ 場合、リスト準同型と呼ばれます。
準同型補題は、となる演算子と関数fが存在する場合にのみ、hが準同型であることを述べています。
この補題の大きな興味深い点は、計算の高度に並列化された実装の導出への応用です。確かに、 が高度に並列化された実装を持つことは明らかであり、また、二分木としても同様です。したがって、任意のリスト準同型hに対して、並列実装が存在します。その実装では、リストをチャンクに分割し、それらを異なるコンピュータに割り当てます。各コンピュータは、自分のチャンクで結果を計算します。ネットワーク上を移動するのはこれらの結果であり、最終的に 1 つに結合されます。リストが膨大で、結果が非常に単純な型 (たとえば整数) であるアプリケーションでは、並列化のメリットは非常に大きくなります。これがmap-reduceアプローチの基礎です。
参照
参考文献
- ^ Ursula Martin、Tobias Nipkow (1990年4月). 「Squiggolの自動化」. Manfred Broy、Cliff B. Jones (編). Proc. IFIP WG 2.2/2.3 Working Conference on Programming Concepts and Methods . North-Holland. pp. 233– 247.
- ^ バード 1989、第8節、p.126r。
- ^ ab Bird 1989、Sect.2、p.123l。
- ^ バード 1989、第7節、第1論、p.125l。
- ^ ab Bird 1989、Sect.5、p.124r。
- ^ ここで、、、はそれぞれ、指定されたリストの最大値、合計、すべてのセグメント (つまりサブリスト) のリストを返します。
- ^ 行内の各式は、最大セグメント合計を計算する実行可能な関数プログラムを表します。
- Meertens, Lambert (1986). 「アルゴリズム:数学的活動としてのプログラミングに向けて」. de Bakker, JW; Hazewinkel, M.; Lenstra, JK (編).数学とコンピュータサイエンス. CWIモノグラフ. 第1巻. 北ホラント. pp. 289– 334.
- メルテンス、ランバート、バード、リチャード(1987). 「アルゴリズムに関する書籍に掲載されている2つの演習」(PDF) . ノースホランド.
- バックハウス、ローランド(1988). バード・ミーアテンス形式の探究(PDF) (技術レポート).
- バード, リチャード・S. (1989). 「プログラム計算のための代数的恒等式」(PDF) .コンピュータジャーナル. 32 (2): 122– 126. doi : 10.1093/comjnl/32.2.122 .
- コール、マレー (1993). 「並列プログラミング、リスト準同型性、そして最大セグメント和問題」.並列コンピューティング:トレンドとアプリケーション, PARCO 1993, グルノーブル, フランス. pp. 489– 492.
- バックハウス、ローランド、フーゲンダイク、ポール (1993). 関係データ型理論の要素(PDF) . pp. 7– 42. doi :10.1007/3-540-57499-9_15. ISBN 978-3-540-57499-6。
- ブンケンバーグ、アレクサンダー (1994). オドネル、ジョン・T.、ハモンド、ケビン (編). ブーム階層(PDF) .関数型プログラミング、グラスゴー 1993: 関数型プログラミングに関する1993年グラスゴーワークショップ議事録、スコットランド、エア、1993年7月5~7日. ロンドン: シュプリンガー. pp. 1– 8. doi :10.1007/978-1-4471-3236-3_1. ISBN 978-1-4471-3236-3。
- バード、リチャード、デ・ムーア、オーゲ (1997).プログラミングの代数. 国際計算科学シリーズ. 第100巻. プレンティス・ホール. ISBN 0-13-507245-X。
- ギボンズ、ジェレミー(2020). トロイ・アスタルト編. スクイゴル学派:バード・ミーアテンス形式主義の歴史(PDF) .形式手法(形式手法の歴史に関するワークショップ) . LNCS. Vol. 12233. Springer. doi :10.1007/978-3-030-54997-8_2.




