2009-05-08 9 views
15

私は"A tutorial on the universality and expressiveness of fold"と呼ばれる無料のPDFににつながった、「実世界Haskellの」を通じて働いています。それは、 "折りたたみ"が "普遍的"であるという点を示している。私は、「ユニバーサル」の彼の定義と格闘していて、すでにそれを消化する時間を投資している人たちから聞きたい:最も簡単な、最も専門用語のない英語可能に説明してください、「折り目の普遍的な性質」?この「普遍的な財産」とは何ですか、なぜ重要なのですか?最も簡単な、最も専門用語フリー英語の可能な、「折り目の普遍的な性質」で説明してください?

ありがとうございました。

+2

私が尋ねてから4年後、今夜はこれについて話している記事に出会った。私はそれが完全に私の質問に答えるかわからないが、それは間違いなく関連している。 「普遍的な財産」のためにこのURLを検索してください:http://jeremykun.com/2013/04/16/categories-whats-the-point/ –

+1

4年前、私は普遍的な財産がどれほどのものか分かりませんでした。今、私は一連のブログ記事を書いています。普遍的な財産に関するより詳細な記事を書いているうちに、私はこれを横断して何があったのでしょう。来週に行うべきです。 – JeremyKun

+0

@Bean、それを聞いてうれしい!私はそれを読むことを楽しみにしています。なぜなら、私は眠りにつくようになっていますが、普遍的な財産が何であるかを深く理解できるからです。 –

答えて

15

(ジャーゴンモードオフは2つの式が等しいことを証明するだけの方法です。 (それは専門用語「証拠主義」が意味するものだ。) ユニバーサルプロパティを使用すると、これらの二つの式を証明することができれば

g []  = v 
g (x:xs) = f x (g xs) 

、あなたは追加の方程式を締結することができると述べている

g = fold f v 

逆もまた真であるが、それはfoldの定義を拡大することにより、単に表示するように些細なのです。普遍的な財産は、それが本当である理由があまり明白でないという慣習的な方法であるより深い財産です。

これを行うのは興味深い理由は、誘導によって証明を避けることができるからです。ほとんど常に避ける価値がある。

+0

また、紙面には、「右から折りたたんで機能を適用する方法は1つしかありませんが、折りたたみ方法は1つあります。ただ一つの方法しか存在しないので、それは違うものではないことがわかります」少なくとも、それは私が読んだと思うものです:)。私はもう少し読書が必要です。私が言ったことは正しいのか野球場にあるのか?もしそうなら、これは普遍的な財産にどのように関連していますか?ありがとう。 –

+0

チャーリー、私は紙のその部分をgrokkedとは思わない。 –

+1

チャーリー、そうだと思います。普遍的なプロパティは、適切な種類の再帰的定義を折り畳みの形で書き換えることができる点で優れています。 –

8

紙は、二つのプロパティ定義:

g []  = v 
g (x : xs) = f x (g xs) 

を、次いでfoldはこれらの特性を満足するが、これらの特性を満たすのみ関数で機能だけではないと述べています。その点でユニークであるということは、紙が使用している意味で「普遍的な」ものにしています。

ユニバーサルプロパティ:-)

6

持っ倍プロパティは、それはあなたがそれを右のパラメータを与えて、他のすべてのリスト再帰関数に相当し、リスト、再帰関数であるということです。

それがパラメータとして受け入れるので、それは、リスト内の項目に適用される機能を、このプロパティを持っています。

我々は、単純なSUM関数を書いた場合たとえば、:

sum []   = 0 
sum (head:tail) = head + (sum tail) 

を、我々は実際に我々が結合するために使用する(+)演算子を渡すことによって、代わりに折り機能としてそれを書くことができますアイテム:

sum list = foldl (+) 0 list 

したがって、リストに対して単純かつ再帰的に動作する関数は、折り返し関数として書き換えられます。その等価性は、それが保持する特性です。私はすべてこれらの線形リスト再帰アルゴリズムを例外なく処理するので、彼はプロパティをユニバーサルと呼んでいると信じています。

このプロパティが非常に便利な理由は、これらの他のすべてのアルゴリズムが折り畳みと同じであることを示すことができるからです。折り畳みに関する何かを証明することによって、他のすべてのアルゴリズムに対しても証明されます。

私は個人的にはそう時々私はこのようになりますどの私自身を使用し、理解しにくい折り畳み機能が見つかりました:

-- forall - A kind of for next loop 
-- list is list of things to loop through 
-- f is function to perform on each thing 
-- c is the function which combines the results of f 
-- e is the thing to combine to when the end of the list is reached 
forall :: [a] -> (a->b) -> (b->b->b) -> b -> b 
forall [] f c e = e 
forall (x:xs) f c e = c (f x) (forall xs f c e) 

それは適用の余分な機能を持っているので(これは実際にはもう少し強力なfoldlのより関数fをリストの各項目に追加します)。

私の機能については誰も何も証明していません。しかし、それは私が私の機能は、実際には倍の関数であることを示すことができるので、重要ではありません。したがって、およそ倍に証明されているすべてのものが、また私のFORALLの機能のために真の証明されている

forall l f c e = foldl c e (map fn l) 

そして、そして私のプログラム全体でそのすべての使用。 (forallとfoldlのそれぞれの呼び出しのそれぞれで、どんな種類の関数cが提供されているかを考慮する必要はありません、それは問題ではありません)

+3

for all l f c e = foldr(c。f)e l – Tirpen

4

私はWikipediaで新しいユニバーサルプロパティ "。この質問には、光のトーンが出ています。あなたは、リストの中を歩くための100個の異なった方法、道に沿ってコンピューティングを考えると、リストから1つの最終値を生成することがありますが、

  1. のすべての100:それからHere's the link: は、I(tenatively)以下を締結しますそれらの方法は同形(最終的には同じです)です。実際にリストを1つの値に減らす方法は1つだけあり、それはFOLDです。
  2. フォールドは、リストを単一の値に減らす方法の「最も効率的な解決策」です。あるいは、最も重要な、あるいは最も単純化されたソリューションといえます。

これらの2つのポイントは、「ユニバーサルプロパティ」という用語の意味を取り込んでいるようです。

2

カテゴリの観点から普遍的な性質を説明しているシリーズの前の記事を読まなければ、少し難しかったかもしれませんが、この記事では、折り畳みの一般的な性質と、マップとフィルタについて詳しく説明します。

http://jeremykun.com/2013/09/30/the-universal-properties-of-map-fold-and-filter/

私はそれを書くためには至っていないものの、フォローはこれを一般化します(そして、より抽象的ではあるが、理解することがはるかに簡単に)「フォールド様」するために、一般的なデータ構造上の動作を制御します。

普遍的な性質が何であるかの詳細については、この記事を参照してください:http://jeremykun.com/2013/05/24/universal-properties/シリーズすべての投稿へのリンクについて

そしてここに:真実でhttp://jeremykun.com/main-content/

を、現在受け入れ答えは理解する最も簡単な方法です普遍的な財産が折り目について何を言っているのか。上記にリンクされた記事は、問題の論文にはないカテゴリ理論を介して、より詳細な技術的説明を与えるだけです。しかし、普遍的な財産は、専門用語がない声明よりもはるかに深い財産であると、私は受け入れられた回答の陳述に同意しない。折り目の普遍的な性質は、まったく同じステートメントであり、カテゴリ理論を使って物事を分析する性質に従って、最初と最後のオブジェクトの言語に囲まれているだけです。この分析は、その自然な一般化のために貴重です。

関連する問題