2017-11-08 16 views
9

tôi là kinda ngạc nhiên khi tôi đọc mã nguồn của các trường hợp Applicative ComplexMonad Complex từ GHC Data.Complex mô-đun:Ý nghĩa và cách sử dụng số functor phức tạp và đơn nguyên?

-- | @since 4.9.0.0 
instance Applicative Complex where 
    pure a = a :+ a 
    f :+ g <*> a :+ b = f a :+ g b 
    liftA2 f (x :+ y) (a :+ b) = f x a :+ f y b 

-- | @since 4.9.0.0 
instance Monad Complex where 
    a :+ b >>= f = realPart (f a) :+ imagPart (f b) 

Cái quái gì ...? Ví dụ Applicative Complex dường như đối xử với các số phức như chỉ hai mảng kích thước. Và cả hai dường như giống như các hoạt động mũi tên. Có cơ sở toán học nào đằng sau chúng không? Hoặc là có hay không, chúng được sử dụng để làm gì?

+0

Chúng là trường hợp tuân thủ pháp luật, vì vậy không có lý do gì để chúng không tồn tại (đây là cơ sở 'toán học') – user2407038

+0

Vì vậy, không có kết nối với phân tích phức tạp và số phức chỉ là kích thước hai mảng ở đây? –

+0

Số phức * là, theo một nghĩa nào đó, chỉ các mảng có kích thước 2. ℂ là đẳng cấu với ℝ². – chepner

Trả lời

8

Đã chỉnh sửa để thêm ghi chú ở phần dưới cùng: gói "tuyến tính".

Các trường hợp đã được thêm vào theo số Trac 10609 ticket này bắt đầu bằng a mailing list post nơi Fumiaki Kinoshita lưu ý rằng có một số trường hợp bị thiếu trong thư viện cơ sở dường như chỉ có một cách và đề xuất bản vá để thêm chúng.

Theo như tôi thấy, không có động lực toán học cho thêm chúng, mặc dù có ít nhất một hoạt động về mặt toán học có ý nghĩa có thể được bày tỏ applicatively, nhân cụ thể là vô hướng:

> pure (*) <*> pure 2 <*> (3 :+ 4) 
6 :+ 8 
> 

Trong một follow-up đến ở trên danh sách gửi thư, Edward Kmett lưu ý rằng anh ta có lợi vì anh ta phải thêm các trường hợp trẻ mồ côi cho Complex vào gói linear của mình trong nhiều năm để bù đắp cho các trường hợp bị thiếu.

Có vẻ như ông thấy chúng hữu ích khi xác định một cá thể Additive cho Complex do đó về cơ bản tạo ra một trường hợp đặc biệt là véc tơ hai chiều.

Các vấn đề liên quan