補題:我々はそれを持っているETA-同等と仮定すると(\x -> ⊥) = ⊥ :: A -> B
。
証明:⊥ = (\x -> ⊥ x)
イータ等価、および(\x -> ⊥ x) = (\x -> ⊥)
ラムダの下での還元。
Haskell 2010レポートのセクション6.2では、seq
2つの式で関数を指定しています。
seq :: a-> b-> b seq⊥b =⊥ seq ab = b、a≠ifの場合
その後、「seqを使用してそれらを区別できるため、notは\ x-> beと同じではありません」と主張します。
私の質問は、それは本当にの定義の結果seq
ですか?
暗黙の引数は、seq
計算できない場合seq (\x -> ⊥) b = ⊥
です。しかし、私はそのようseq
なものが計算できないことを証明することができませんでした。私にはそのようなa seq
は単調で連続的であるように思われ、それは計算可能という領域にそれを置きます。
seqなどを実装するアルゴリズムは、starting で始まるドメインを列挙することx
で、どこを検索しようとすることで機能する場合f x ≠ ⊥
がありますf
。そのような実装は、たとえ可能であっても、seq
多態性を作りたいと思うとかなり毛深いものになります。
証拠は何も計算が存在しないことがあるseq
ことを識別(\x -> ⊥)
して⊥ :: A -> B
?または、その構造seq
が特定され(\x -> ⊥)
てい⊥ :: A -> B
ますか?