एमएल प्रकार के अनुमान की घातीय लागत का संक्षिप्त उदाहरण


11

यह मेरे ध्यान में लाया गया था कि ओकेएमएल जैसी कार्यात्मक भाषा में प्रकार के अनुमान की लागत बहुत अधिक हो सकती है। दावा यह है कि अभिव्यक्ति का एक क्रम ऐसा है कि प्रत्येक अभिव्यक्ति के लिए अभिव्यक्ति की लंबाई पर संबंधित प्रकार की लंबाई घातीय है।

मैंने नीचे दिए अनुक्रम को तैयार किया। मेरा सवाल यह है: क्या आप एक अधिक संक्षिप्त अभिव्यक्तियों के साथ एक अनुक्रम जानते हैं जो समान प्रकारों को प्राप्त करता है?

# fun a -> a;;
- : 'a -> 'a = <fun>
# fun b a -> b a;;
- : ('a -> 'b) -> 'a -> 'b = <fun>
# fun c b a -> c b (b a);;
- : (('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'a -> 'c = <fun>
# fun d c b a -> d c b (c b (b a));;
- : ((('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'c -> 'd) ->
   (('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'a -> 'd
= <fun>
# fun e d c b a -> e d c b (d c b (c b (b a)));;
- : (((('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'c -> 'd) ->
    (('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'd -> 'e) ->
   ((('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'c -> 'd) ->
   (('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'a -> 'e
= <fun>
# fun f e d c b a -> f e d c b (e d c b (d c b (c b (b a))));;
- : ((((('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'c -> 'd) ->
     (('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'd -> 'e) ->
    ((('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'c -> 'd) ->
    (('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'e -> 'f) ->
   (((('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'c -> 'd) ->
    (('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'd -> 'e) ->
   ((('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'c -> 'd) ->
   (('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'a -> 'f
= <fun>

जवाबों:


14

इस उत्तर में, मैं लैम्बडा-कैलकुलस और पॉलीमॉर्फिक के letबाद हिंडले-मिलनर के साथ, भाषा के एक मुख्य एमएल टुकड़े से चिपक जाऊंगा । पूर्ण ओकेएमएल भाषा में अतिरिक्त विशेषताएं हैं जैसे कि पंक्ति बहुरूपता (जो अगर मैं सही ढंग से याद करता हूं तो सैद्धांतिक जटिलता नहीं बदलती है, लेकिन जिसके साथ वास्तविक कार्यक्रम बड़े प्रकार के होते हैं) और एक मॉड्यूल प्रणाली (जो कि यदि आप पर्याप्त रूप से प्रहार करते हैं तो आप गैर कर सकते हैं) -संबंधित रोग मामलों में अमूर्त हस्ताक्षर शामिल हैं)।

यह निर्धारित करने के लिए सबसे खराब समय की जटिलता है कि क्या कोर एमएल कार्यक्रम का एक प्रकार कार्यक्रम के आकार में एक सरल घातीय है। इस परिणाम के लिए शास्त्रीय संदर्भ [KTU90] और [M90] हैं। एक अधिक प्राथमिक लेकिन कम पूर्ण उपचार [S95] में दिया गया है।

कोर एमएल कार्यक्रम के प्रकार का अधिकतम आकार वास्तव में कार्यक्रम के आकार में दोगुना घातांक है। यदि प्रकार चेकर को प्रोग्राम के प्रकार को प्रिंट करना होगा, तो समय दोगुना हो सकता है; इसे पेड़ के दोहराया भागों के लिए संक्षिप्त परिभाषित करके एक सरल घातीय पर वापस लाया जा सकता है। यह एक कार्यान्वयन में प्रकार के पेड़ के हिस्सों को साझा करने के अनुरूप हो सकता है।

आपका उदाहरण प्रकार की घातीय वृद्धि दर्शाता है। हालाँकि, ध्यान दें, कि प्रकार के दोहराए गए भागों के लिए संक्षिप्ताक्षर का उपयोग करके प्रकार का रैखिक आकार का प्रतिनिधित्व देना संभव है। यह एक कार्यान्वयन में प्रकार के पेड़ के हिस्सों को साझा करने के अनुरूप हो सकता है। उदाहरण के लिए:

# fun d c b a -> d c b (c b (b a));;
t2 -> t2
where t2 = (t1 -> 'b -> 'c) -> t1 -> 'a -> 'd
where t1 = 'a -> 'b

(x,x)xpairNΘ(2N)

# let pair x f = f x x;;
# let pairN x = pair (pair (pair … (pair x)…));;
'a -> tN
where tN = (tN-1 -> tN-1 -> 'bN) -> 'bN
…
where t2 = (t1 -> t1 -> 'b2) -> 'b2
where t1 = ('a -> 'a -> 'b1) -> 'b1

नेस्टेड पॉलीमॉर्फिक letपरिभाषाएं पेश करने से, प्रकार का आकार फिर से तेजी से बढ़ता है; इस बार, साझा करने की कोई भी राशि घातीय वृद्धि को नहीं हटा सकती है।

# let pair x f = f x x;;
# let f1 x = pair x in
  let f2 x = f1 (f1 x) in
  let f3 x = f2 (f2 x) in
  fun z -> f3 (fun x -> x) z;;

संदर्भ

[केटीयू 90] केफोरी, जे।; Tiuryn; उर्जिकज़िन, पी। (1990)। "एमएल टंकनीयता डेक्सपटाइम-पूर्ण है"। कंप्यूटर विज्ञान के व्याख्यान नोट्स। CAAP '90 431: 206-220। [ स्प्रिंगर ] [ Google ]

[एम 90] मैरसन, हैरी जी (1990)। "नियतकालिक घातांक समय के लिए एमएल टाइपिंग का निर्णय पूरा हो गया है"। प्रोग्रामिंग भाषाओं के सिद्धांतों पर 17 वीं एसीएम सिग्लन-सिगच संगोष्ठी की कार्यवाही। POPL '90 (ACM): 382–401। [ एसीएम ]

[पी ०४] बेंजामिन सी। पियर्स। प्रकार और प्रोग्रामिंग भाषाओं में उन्नत विषय। एमआईटी प्रेस, 2004. [ अमेज़न ]

[PR04] फ़्राँस्वा कुम्हार और डिडिएर रेमी। "द एस्सेन्स ऑफ़ एमएल टाइप इंफ़ेक्शन"। अध्याय 10 [P04] में। [ pdf ]

[S95] माइकल आई। श्वार्ट्ज़बाक। बहुरूपता प्रकार आविष्कार। ब्रिक्स एलएस -95-3, जून 1995. पीएस


मूल रूप से, प्रकार की अभिव्यक्ति के साथ युग्मित प्रकार के भावों की "रचना" प्रकृति समस्या की जड़ है?
दीदी

1
@didierc मुझे आपकी टिप्पणी समझ में नहीं आती है। बहुत सी चीजें कंपोजिटल हैं। एक तरह से, मूल कारण यह है कि किसी वस्तु (दो प्रकार के एक समान होने) और युग्मन ( ->ऑपरेटर) के दोहराव के मूल संचालन से , आप घातीय वृद्धि (एक फाइबोनैचि ट्री) बना सकते हैं।
गिलेस एसओ- बुराई को रोकना '

हाँ, मुझे लगता है कि मेरा क्या मतलब है: प्रकार बीजगणित परिभाषा रचनाकार द्वारा है (आपने अपने उत्तर में "जोड़ी समारोह की रचना करें" शब्दों का इस्तेमाल किया है, शायद यही वह जगह है जहां मैंने शब्द उठाया है), इस अर्थ में थफ टाइप के भाव से निर्मित होते हैं छोटे भाव और संचालक, और अभिव्यक्ति की प्रत्येक नई रचना अभिव्यक्ति का आकार कम से कम एक कारक 2 (अधिक जटिल बहुरूपी प्रकार - त्रैमासिक या अधिक के साथ, कारक बड़ा होता है) को मापता है।
दीदी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.