Độc giả, nhà văn đơn nguyên


17

Đặt là CCC . Hãy là một bifunctor sản phẩm trên . Vì Cat là CCC, chúng ta có thể cà ri :( × ) C ( × )C(×)C(×)

curry(×):C(CC)

curry(×)A=λB.A×B

Functor loại có cấu trúc đơn hình thông thường. CC C C C CMột monoid trong là một đơn nguyên trong . CCC Chúng tôi coi các sản phẩm hữu hạn như cấu trúc monoidal trên .C

curry(×)1id

A B.curry(×)(A×B)(curry(×)A)(curry(×)B)

Do đó bảo tồn cấu trúc đơn hình, do đó, nó vận chuyển một monoid thành một đơn nguyên và một comonoid thành một comonad. Cụ thể, nó vận chuyển một monoid tùy ý để đơn nguyên (xem định nghĩa - phải là một monoid). Tương tự như vậy, nó vận chuyển comonoid chéo đến comonad Coreader.(curry(×))w(Writer w)w

Bây giờ, để cụ thể, tôi mở ra việc xây dựng Nhà văn.

Bắt đầu Trên thực tế , họ chỉ đơn giản là có tên riêng biệt trong Haskell. Chúng tôi có một Haskell monoid :Writer=Coreader=curry(×) w,mappend,mempty

mappend:w×ww

mempty:1w

Nhà văn là một functor, vì vậy nó cũng phải ánh xạ các hình thái, chẳng hạn như và . Tôi viết như sau, mặc dù nó không hợp lệ trong Haskell:mappendmempty

Writer mappend:Writer(w×w)Writer w

Writer mappend là sự chuyển hóa tự nhiên, một cấu xạ trong . Theo tính chất của nó là một hàm, lấy \ trong Ob (C) và đưa ra một hình thái trong C :CCcurry(×)aOb(C)C

Writer mappend a=mappend×(id(a)):Writer(w×w)aWriter w a

Không chính thức, khoản thành phần của loại và bơm nguyên vẹn. Đây chính xác là định nghĩa của Nhà văn trong Haskell. Một trở ngại là đối với đơn vị chúng ta cầnw một W r i t e r w , μ , η Writer mappend awaWriter w,μ,η

μ:Writer wWriter wWriter w

tức là không tương thích về các loại. Nhưng các hàm này là đẳng cấu: bởi cộng tác viên thông thường cho các sản phẩm hữu hạn là đẳng cấu tự nhiên . Sau đó, chúng tôi xác định thông qua . Tôi bỏ qua việc xây dựng thông qua .Writer(w×w)=λa.(w×w)×aλa.w×(w×a)=Writer wWriter wμWriter mappendηmempty

Nhà văn, là một functor, bảo tồn các sơ đồ giao hoán, tức là bảo toàn các đẳng thức monoid, vì vậy chúng tôi đã cấp các đẳng thức đã được chứng minh cho = một monoid trong = một đơn nguyên trong . Kết thúc.Writer w,μ,η(CC)C

Còn về Reader và Cowriter thì sao? Trình đọc được bổ sung cho Coreader, như được giải thích trong định nghĩa của Coreader, xem liên kết ở trên. Tương tự, Cowriter được bổ sung cho Nhà văn. Tôi không tìm thấy định nghĩa về Cowriter, vì vậy tôi đã tạo ra nó bằng cách tương tự được hiển thị trong bảng:

văn bản thay thế

{- base, Hackage.category-extras -}
import Control.Comonad
import Data.Monoid
data Cowriter w a = Cowriter (w -> a)
instance Functor (Cowriter w) where
    fmap f (Cowriter g) = Cowriter (f . g)
instance Monoid w => Copointed (Cowriter w) where
    extract (Cowriter g) = g mempty
instance Monoid w => Comonad (Cowriter w) where
    duplicate (Cowriter g) = Cowriter
        (\w' -> Cowriter (\w -> g (w `mappend` w')))

Dưới đây là các định nghĩa đơn giản hóa của các đơn nguyên (đồng). fr_ob F biểu thị ánh xạ của functor F trên các đối tượng, fr_mor F biểu thị ánh xạ của functor F trên các hình thái. Có một đối tượng monoid trong .w,+^,0^C

  • nhà văn
    • fr_ob(Writer w)a=a×w
    • fr_mor(Writer w)f=λa0,w2.a0,f w2
    • ηa=λa0.a0,0^
    • μa=λa0,w1,w0.a0,w0+^w1
  • Người đọc
    • fr_ob(Reader r)a=ra
    • fr_mor(Reader r)f=λg r0.f(g r0)
    • ηa=λa0 r0.a0
    • μa=λf r0.f r0 r0
  • Điều tra viên
    • fr_ob(Coreader r)a=r×a
    • fr_mor(Coreader r)f=λr0,a0.f r0,a0
    • ηa=λr0,a0.a0
    • μa=λr0,a0.r0,r0,a0
  • Cao bồi
    • fr_ob(Cowriter w)a=wa
    • fr_mor(Cowriter w)f=λg r0.f(g r0)
    • ηa=λf.f 0^
    • μa=λf w1w0.f(w0+^w1)

Câu hỏi là sự điều chỉnh trong liên quan đến functor, không phải monads. Tôi không thấy cách điều chỉnh ngụ ý "Coreader is a comonad" "Reader is a monad" và "Writer is a monad" "Cowriter is a comonad".C

Ghi chú. Tôi đang vật lộn để cung cấp thêm bối cảnh. Nó đòi hỏi một số công việc. Đặc biệt, nếu bạn yêu cầu độ tinh khiết phân loại và những (các) đơn nguyên được giới thiệu cho các lập trình viên. Hãy cằn nhằn! ;)


Ưu đãi: Bạn có thể chụp ảnh màn hình của bảng và đặt hình ảnh ở đây.
MS Dousti

Bạn nên sao chép câu hỏi ở đây.
Dave Clarke

2
mọi người downvote nên đăng một bình luận giải thích lý do tại sao.
Suresh Venkat

1
@Ohad. Tôi thú nhận rằng tôi đã giới thiệu thay đổi đó để cố gắng cung cấp câu hỏi với nhiều ngữ cảnh hơn (như ban đầu được tìm thấy trong bài đăng blog được tham chiếu ban đầu). Tôi nghĩ rằng beroal nên dành nhiều nỗ lực hơn để làm cho câu hỏi của anh ta được khép kín, ví dụ, bằng cách xác định những gì Reader và Writer và Coreader và Cowriter trong các thuật ngữ phân loại hoặc trong Haskell hoặc cả hai, thay vì cho rằng tất cả chúng ta đều biết những gì đang được đề cập.
Dave Clarke

2
@beroal: Ý tôi là, vì tôi không sử dụng Haskell hàng ngày, phân tích mã Haskell và thực hiện chuyển đổi sang CT là không tầm thường đối với tôi và có lẽ những người khác. Bằng cách đọc lại câu hỏi theo cách hoàn toàn phân loại, bạn có nhiều khả năng nhận được câu trả lời nhanh hơn ...
Ohad Kammar

Câu trả lời:


13

Có, nếu một đơn vị có quyền điều chỉnh , thì sẽ tự động kế thừa cấu trúc comonad.M:CCNN

Các thiết lập lý thuyết thể loại chung để hiểu điều này là như sau. Đặt và là hai loại. Viết cho phần tử của functor từ đến ; Đối tượng của nó là functor và biến đổi hình thái tự nhiên của nó. Viết cho các tiểu thể loại đầy trên functors mà adjoints đúng có (nói cách khác, chúng ta xem xét functors với adjoints đúng và biến đổi tự nhiên tùy ý giữa chúng). Viết cho liên hợp bên phải của một functor . Sau đóCDFun(C,D)CDFunL(C,D)Fun(C,D)CDFR:DCF:CDR:FunL(C,D)Fun(D,C) là một functor chống chỉ định: nếu là một phép biến đổi tự nhiên thì có một biến đổi tự nhiên chuyển đổi tự nhiên .α:FGαR:GRFR

Nếu , thì có cấu trúc đơn hình được đưa ra bởi thành phần và , vì thành phần của các điều chỉnh bên trái là một sự điều chỉnh bên trái. Cụ thể, , vì vậy là một functor chống đối kháng antimonoidal. Nếu bạn áp dụng cho các phép biến đổi tự nhiên cấu trúc trang bị cho functor với cấu trúc của một đơn nguyên, những gì bạn nhận được là một sự kết hợp.C=DFun(C,C)FunL(C,D)(FG)R=GRFRRRM


1
Và người ta nên đề cập rằng một số trong số các functor này, ví dụ không thực sự là một functor mà là một cái gì đó giống như một functor giả bởi vì nó thường thỏa mãn functoriality chỉ cho đến đẳng cấu chính tắc. Tuy nhiên, điểm chính là hợp lệ. R
Andrej Bauer

7

Nhân tiện, cái này:

Hãy là một bifunctor sản phẩm trong . Vì là CCC, chúng ta có thể cà ri(×)CC(×)

là hơi không chính xác. Thứ nhất, các thuật ngữ thông thường sẽ là (nếu tôi không nhầm) rằng là một bifunctor trên hoặc trên . "Trong" thường có nghĩa là các công trình sử dụng các mũi tên và đối tượng của một danh mục, trong khi các danh mục "trên" đề cập đến các công trình liên quan đến nhiều danh mục. Và bifunctor sản phẩm không phải là một công trình trong danh mục của Cartesian.×C

Và điều này liên quan đến sự thiếu chính xác lớn hơn: khả năng cà ri bifunctor của sản phẩm không liên quan gì đến việc bị Cartesian đóng cửa. Thay vào đó, có thể bởi vì , danh mục thể loại (chèn hãy cẩn thận) là Cartesian đóng. Vì vậy, cà ri trong câu hỏi được đưa ra bởi:CCat

HomCat(C×D,E)HomCat(C,ED)

Trong đó là sản phẩm của các danh mục và là danh mục của functorC×DEDF:DE . Điều này hoạt động bất kể , và đã đóng Cartesian, mặc dù. Khi chúng ta để , chúng ta nhận được:CDEC=D=E

×:C×CC
curry×:CCC

Nhưng đây chỉ là một trường hợp đặc biệt của:

F:C×DE
curryF:CED

2 Dan Doel: Vâng, vâng, vâng, cảm ơn. Tôi đã làm sai trong khi dịch từ bài viết gốc beroal.livejournal.com/23223.html .
beroal

4

Hãy xem xét các điều chỉnh . Đối với mỗi điều chỉnh như vậy, chúng ta có một đơn vị và cũng là một comonad . Đáng chú ý, và G S e t M o nF,G,ϵ,ηGF,η,GϵFFG,ϵ,FηGFG không cần phải là endofunctor và nói chung, chúng không (ví dụ, danh sách đơn vị là sự điều chỉnh giữa hàm functor miễn phí và hay quên giữa và ).SetMon

Vì vậy, những gì bạn muốn làm là lấy Reader (hoặc Nhà văn) và phân tách nó thành các hàm xử lý bổ trợ để tạo ra đơn nguyên và comonad tương ứng. Điều đó có nghĩa là kết nối giữa Reader và Coreader (hoặc Nhà văn và Cowriter) không phải là kết nối mà bạn đang tìm kiếm.

Và nó có thể là tốt hơn để nghĩ về tách lạng bộ như , tức là X , Y . { F : X × Một Y } { f * : X Y Một }:hom(×A,=)hom(,=A)X,Y. {f:X×AY}{f:XYA} . Hoặc nếu nó giúp, :hom(×A,=×1)hom(1,=A)


2 wren ng thornton: Tôi không biết về bất kỳ điều chỉnh xác định nào cho Reader và Writer tương tự như các điều chỉnh giữa Set và một loại cấu trúc đại số. Hay bạn có nghĩa là mọi đơn nguyên được xác định bởi một điều chỉnh như trong "MacLane. Các danh mục cho Nhà toán học làm việc. VI. Monads và Algebras. 2. Algebras for a Monad. Định lý 1 (Mọi đơn vị được xác định bởi T-algebras). "? Bạn có thể cụ thể hơn không? Trên thực tế câu hỏi của tôi là kết luận về một nỗ lực để xác định các đơn nguyên (đồng) đó bằng những từ thanh lịch như danh sách đơn nguyên.
beroal

@beroal: Tôi khá chắc chắn rằng Reader và Writer không điều chỉnh, hoặc ít nhất là tôi vẫn chưa tìm ra cách để các danh mục giải quyết nó. Không, quan điểm của tôi là các đơn nguyên và đồng chí phát sinh theo "cùng một cách", cụ thể là thông qua một điều chỉnh, như được mô tả ở trên. Tôi không có bản sao của MacLane, nhưng vâng, -achebras là tên tiêu chuẩn cho thủ thuật ở trên (nhưng sau đó, tất cả các loại không liên quan được gọi là "X-algebras", "Y-algebras", ... ). T
wren romano

Mô tả nào về danh sách đơn vị bạn đang cố gắng để phù hợp với tài hùng biện của? Do miễn phí monoid functor , các functor quên U : M o nS e t , đơn vị chuyển đổi η : id S e tU F , và việc chuyển đổi counit ε : F U id M o nF:SetMonU:MonSetη:idSetUFϵ:FUidMon bạn có một adjunction . Có nghĩa là bạn có một đơn nguyênU F , η , U ε F , cụ thể là danh sách đơn nguyên trong S e t . Và bạn sẽ có được danh sách comonad trong M o n :F U , ε , F η U . Hiệu quả? F,U,η,ϵUF,η,UϵFSetMonFU,ϵ,FηU
wren romano

Functor (Reader a) và (Nhà văn a) là sự điều chỉnh, và sự điều chỉnh đó làm phát sinh đơn vị (Bang a).
beroal

"Không, quan điểm của tôi là các đơn nguyên và đồng chí phát sinh theo" cùng một cách ", cụ thể là thông qua một điều chỉnh, như được mô tả ở trên". Nếu bạn nhận được đơn nguyên và đơn vị từ sự điều chỉnh giữa các danh mục Set và Mon, bạn sẽ nhận được đơn vị trên Set và comonad trên Mon - các danh mục khác nhau. Nhưng Reader và Writer nằm trên cùng một thể loại CCC.
nhị
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.