題
我正在尋找描述化學工程中將某些物質轉化為其他物質的程序。有沒有描述消耗“物質”的態射的類別?
我想建模的例子
舉一些例子:
將兩種物質組合成混合物的轉化混合物。
將物質煮沸成一些副產品的轉化沸騰。
根據預定義的比例分離要在 2 個不同程序中使用的物質的轉換拆分。
等等...
不是函式
正如你所看到的,每個化學程序不僅僅是一個函式,因為它的目標不是“計算”一個值,而是將一些特定的物質轉化為其他物質。
也許是一個類別?
這使我考慮了泛化函式概念的類別。
類別 cat where -- | 恒等態射 id :: cat aa
-- | morphism composition
(.) :: cat b c -> cat a b -> cat a c
從概念上講,這是可行的,因為化學程序完全可以以這種方式組合。
更具體的類別
我知道有更具體的類別實體可以編碼更多的抽象(例如,笛卡爾類別)。笛卡爾類別介紹產品:
instance PreCartesian Hask (,) where
fst = Prelude.fst
snd = Prelude.snd
diag a = (a,a)
(f &&& g) a = (f a, g a)
-- alias
class (Monoidal k p i, PreCartesian k p) => Cartesian k p i | k -> p i
instance (Monoidal k p i, PreCartesian k p) => Cartesian k p i
但是,有一個問題。從概念上講,笛卡爾范疇中的態射“計算”而不是“消耗”它們的物件。從函式 diag a = (a, a) 你可以看到它能夠復制物件(這在化學工程中是不可能的)。
似乎大多數類別型別類都處理“計算”而不是“消費”。
消耗品類別?
是否有任何類別描述了消耗其物件的態射?Haskell 中的任何有用的實作或我可以尋找的研究論文?
線性邏輯
使用 Curry-Howard,可能更容易先找到等效邏輯,然后映射到類別。我偶然發現了似乎有幫助的線性邏輯:
更多關于線性邏輯
uj5u.com熱心網友回復:
這可能是 Linear Haskell 的一個很好的應用!GHC 9.0 和更新版本支持LinearHaskell啟用線性函式的 。
uj5u.com熱心網友回復:
在使用線性邏輯進行反應建模方面肯定有現有技術。
如果多個反應物可以結合,也許你正在尋找的是一個運算子,而不是一個類別。
多重集不足以作為基本表示有什么特別的原因嗎?
uj5u.com熱心網友回復:
本文強調了一個選項(Paykin,Zdancewic):https ://jpaykin.github.io/papers/pz_linearity_monad_2017.pdf 。
uj5u.com熱心網友回復:
你的PreCartesian課太強了。你真正想要的類應該只抽象一個對稱的幺半群類別
class Category k where id :: k a a
(.) :: k b c -> k a b -> k a c
class=>Monoidal k where attachUnit :: k a (a,())
detachUnit :: k (a,()) a
regroup :: k (a, (b, c)) ((a, b), c)
regroup' :: k ((a, b), c) (a, (b, c))
(***) :: k a b -> k α β -> k (a,α) (b,β)
class=>Symmetric k where swap :: k (a,b) (b,a)
attachUnit...regroup'是樣板,需要因為 Haskell 的(,)/()不是真正的幺半群。
或者,可以呼叫該類,該類也Braided將具有swap. 不同之處在于對稱類別要求swap . swap ≡ id,這在您的情況下似乎是合理的。
其中constrained-categories,我呼叫了封裝這些方法的類Morphism。(這是一個用詞不當;遺憾的是,我選擇的名稱相當糟糕,是為了保持與 Haskell 標準類的密切兼容性,并且只暗示數學名稱。)你PreCartesian對應于我的PreArrow.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/431368.html
上一篇:型別的代數
下一篇:最小完整定義Ord是如何選擇的?
