補題:我々はそれを持っているETA-同等と仮定すると(\x -> ⊥) = ⊥ :: A -> B。
証明:⊥ = (\x -> ⊥ x)イータ等価、および(\x -> ⊥ x) = (\x -> ⊥)ラムダの下での還元。
Haskell 2010レポートのセクション6.2では、seq2つの式で関数を指定しています。
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ますか?