मैं अभी भी पुलबैक (श्रेणी सिद्धांत से), सीमाओं और सार्वभौमिक गुणों के अंतर्ज्ञान को समझने की कोशिश कर रहा हूं, और मैं उनकी उपयोगिता को काफी पकड़ नहीं रहा हूं, इसलिए शायद आप उस पर कुछ अंतर्दृष्टि छोड़ने में मदद कर सकते हैं मेरे छोटे उदाहरण की पुष्टि?क्या यह हास्केल पुलबैक का एक सटीक उदाहरण है?
निम्नलिखित जानबूझकर वर्बोज़ है, पुलबैक (p, p1, p2)
होना चाहिए, और (q, q1, q2)
अगर चीजें ठीक से निकल देखने के लिए "परीक्षण" के खिलाफ पुलबैक करने के लिए एक गैर सार्वभौमिक वस्तु का एक उदाहरण है।
-- MY DIAGRAM, A -> B <- C
type A = Int
type C = Bool
type B = (A, C)
f :: A -> B
f x = (x, True)
g :: C -> B
g x = (1, x)
-- PULLBACK, (p, p1, p2)
type PL = Int
type PR = Bool
type P = (PL, PR)
p = (1, True) :: P
p1 = fst
p2 = snd
-- (g . p2) p == (f . p1) p
-- TEST CASE
type QL = Int
type QR = Bool
type Q = (QL, QR)
q = (152, False) :: Q
q1 :: Q -> A
q1 = ((+) 1) . fst
q2 :: Q -> C
q2 = ((||) True) . snd
u :: Q -> P
u (_, _) = (1, True)
-- (p2 . u == q2) && (p1 . u = q1)
मैं सिर्फ एक उदाहरण के साथ आने की कोशिश कर रहा था जो परिभाषा के अनुरूप है, लेकिन यह विशेष रूप से उपयोगी प्रतीत नहीं होता है। मैं वापस खींचने के लिए "देखो", या एक का उपयोग कब करूंगा?
आह, यह समझ में आता है। संबंधपरक भाषाओं में pushouts के लिए एक समान ऑपरेशन होगा? –
क्या मूलभूत समस्या नहीं है कि हैस्केल को उस विशेष आरेख को व्यक्त करने का कोई तरीका नहीं है, बजाय सबसेट के साथ कुछ भी करने के बजाय? मुझे आश्चर्य है कि 'TypeInType' हमें इन विचारों के बारे में बात करने के लिए पर्याप्त शक्ति देता है, दर्दनाक रूप से, प्रकार के स्तर पर। – dfeuer
मैं दो बार ऊपर उठाना चाहता हूं। महान उत्तर – beefyhalo