Functional programming 为什么和(或区别并集或不相交并集)是乘积的倒数?

Functional programming 为什么和(或区别并集或不相交并集)是乘积的倒数?,functional-programming,category-theory,Functional Programming,Category Theory,我试图用范畴理论来概括我的头脑,我突然想到了这个问题——为什么总和类型是乘积类型的倒数?我的意思是,我看到箭头如何在相反的类别中改变方向,但我不明白为什么sum不能包含两个组件。它们是双重的,一个由mapping-in属性定义,另一个由mapping-out属性定义。每个映射到一个产品,c->(a,b),相当于一对函数c->a和c->b。一个副产品的每一个映射,ab->c都相当于一对函数a->c和b->c(考虑匹配左a和右b构造函数的模式) 这不是“相反”。这是“双重的”。好吧,那有什么区别呢?

我试图用范畴理论来概括我的头脑,我突然想到了这个问题——为什么总和类型是乘积类型的倒数?我的意思是,我看到箭头如何在相反的类别中改变方向,但我不明白为什么sum不能包含两个组件。

它们是双重的,一个由mapping-in属性定义,另一个由mapping-out属性定义。每个映射到一个产品,
c->(a,b)
,相当于一对函数
c->a
c->b
。一个副产品的每一个映射,
ab->c
都相当于一对函数
a->c
b->c
(考虑匹配
左a
右b
构造函数的模式)

这不是“相反”。这是“双重的”。好吧,那有什么区别呢?根据定义,一个和不能同时包含两个分量;这是一个或另一个。这是“不相交”一词的另一种含义。术语“产品”类似于cartesion产品,意思是它必须同时包含这两个组件。是的,这是我从你们的讲座中理解的。然而,我感到困惑的是,为什么两个值中包含一个值的东西与总是同时包含两个值的东西是对偶的。为什么两者不同时包含这两个值?换句话说,为什么一个普通的联盟不是双重的?但后来我又回到了你们关于副产品的讲座,大约在第16分钟,你们完成了你们的证明,然后点击:)