问题标签 [free-theorem]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
270 浏览

haskell - 对于一个类型的不同可能的 Monad 实例,隐含的 Functor 实例是否总是相同的?

根据Typeclassopedia这个链接,一个类型只能有一个Functor实例(链接中有一个证明)。但我的理解是,给定类型可能有多个可能的Monad实例,对吗?但是对于给定的Monad实例,有一个免费的Functor实例

由此,我得出结论,如果我偶然发现了一种可以Monad以不同方式定义多个实例的类型,那么上述fmap派生的函数必须对所有这些实例都相等,换句话说,如果我有两对函数:

对于相同类型的构造函数m,比,必然:

对于所有xs :: af :: a -> b

这是真的?这是否作为一个定理成立?

0 投票
1 回答
228 浏览

agda - Agda 中的参数利用证明

阅读这个答案促使我尝试构建并证明多态容器函数的规范形式。结构很简单,但证明让我难过。下面是我尝试编写证明的简化版本。

简化版本证明,由于参数性,足够多态的函数不能仅根据参数的选择来改变它们的行为。假设我们有两个参数的函数,一个是固定类型,一个是参数:

我想证明的属性:

Agda 内部可以证明这样的陈述吗?

0 投票
1 回答
336 浏览

idris - 在 Idris 中,我可以证明自由定理吗,例如类型为 `forall t. 的唯一(总)函数。t -> t` 是`id`?

对于足够多态的类型,参数性可以唯一地确定函数本身(详情请参阅Wadler定理!)。例如,唯一具有类型的总函数forall t. t -> t是恒等函数id

是否有可能在 Idris 中陈述和证明这一点?(如果它不能在 Idris 内部得到证明,那是真的吗?)

以下是我的尝试(我知道函数相等不是 Idris 中的原始概念,所以我断言任何泛型类型的函数t -> t总是返回与恒等函数返回的结果相同的结果):

产生的洞是:

0 投票
1 回答
140 浏览

haskell - 寻找“自由定理”

我如何推导出类型的自由定理:

Nat简直在哪里data Nat = Z | S Nat

原则上,这可以通过 Haskell 的“自由定理”包来回答,但它太老了,无法在我可以合理安装的任何 GHC 版本下编译。

0 投票
1 回答
191 浏览

coq - Paramcoq:Coq 中的自由定理

如何使用插件Paramcoq证明以下自由定理

如果不可能,那么这个插件的目的是什么?

0 投票
2 回答
151 浏览

haskell - 类型 [[a]] -> ([a], [a]) 的法则

我正在尝试从我的作业中做这个问题:

给定任意foo :: [[a]] -> ([a], [a]),写下函数foo满足的一个定律,涉及map列表和对。

一些背景:我是一年级本科生,正在学习函数式编程课程。虽然这门课程是介绍性的,但讲师在教学大纲中提到了许多内容,其中包括自由定理。因此,在尝试阅读 Wadler 的论文后,我认为concat :: [[a]] -> [a]法律map f . concat = concat . map (map f)看起来与我的问题相关,因为我们必须具有foo xss = (concat xss, concat' xss)whereconcatconcat'are 类型的任何函数[[a]] -> [a]。然后foo满足bimap (map f, map g) . foo = \xss -> ((fst . foo . map (map f)) xss, (snd . foo . map (map g)) xss)

这个“法律”似乎太长了,不正确,我也不确定我的逻辑。所以我想到了使用在线免费定理生成器,但我不明白是什么lift{(,)}意思:

我应该如何理解这个输出?我应该如何foo正确推导出函数的定律?

0 投票
2 回答
202 浏览

haskell - `Alt` 类型类的函子分布规律是微不足道的吗?

我正在查看typeclass的法律Alt如下所示:

其中一项法律是这样的:

更详细地说,这是:

假设我们 uncurry<!>操作,即我们假设类是这样写的:

我们可以这样写一个组合器:

这表示type Pair a = (a, a)函子与给定函子的组合f。所以它本身就是函子的态射映射。

有问题的法律现在可以这样写(不改变其含义):

请注意,就像在法律的原始陈述中一样,mapBoth f它只是适用fmap f于 的两个论点。alt

This is akin to demanding that alt is a natural transformation from the functor (f -, f -) to the functor f -.

However, isn't it actually impossible for a function of alt's type not to be a natural transformation? How would one write a "bad" implementation of alt that that typechecks, but would be rejected by the law?

0 投票
1 回答
185 浏览

haskell - fmap 的自由定理

考虑以下包装器:

我想反驳(作为围绕这个有趣帖子的练习)存在一个合法Functor F实例,它允许我们将Int -> Int类型函数应用于实际内容并〜忽略〜所有其他函数(即fmap nonIntInt = id)。

我相信这应该用一个自由定理来完成(我在这里fmap读到): 对于给定的 ,和,这样: ,给定构造函数的自然映射在哪里。fghkg . f = k . h$map g . fmap f = fmap k . $map h$map

什么定义了自然地图?我是否正确地假设它是一个简单flip const的 for F

据我所知:$map f是我们Ff在范畴论中所指的。因此,从分类的意义上说,我们只是想要下图中的一些东西来通勤: 在此处输入图像描述

然而,我不知道用什么代替???s (也就是说,我们应用什么函子来得到这样的图,我们如何表示这个几乎fmap-?)。

那么,一般来说,什么是自然地图F?的自由定理的正确图是什么fmap


我要去哪里?

考虑:

很容易看出f . gh . k。然而,不存在的fmap只会执行,而f不是k,给出不同的结果。如果我对自然性的直觉是正确的,那么这样的证明就会奏效。这就是我想要弄清楚的。

@leftaroundabout提出了一个更简单的证明:fmap show . fmap (+1)改变内容,不像fmap $ show . (+1). 这是一个很好的证明,但我仍然想将自由定理作为练习。