फंक्शन प्रकार: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(5 intermediate revisions by 3 users not shown)
Line 1: Line 1:
[[कंप्यूटर विज्ञान]] और [[गणितीय तर्क|गणितीय नियम]] में, '''फलन प्रकार''' (या तीर प्रकार या घातांक) [[चर (कंप्यूटर विज्ञान)|वेरिएबल (कंप्यूटर विज्ञान)]] या [[पैरामीटर (कंप्यूटर विज्ञान)]] का प्रकार होता है, जिसमें [[फ़ंक्शन (कंप्यूटर विज्ञान)|फलन (कंप्यूटर विज्ञान)]] को सौंपा जा सकता है, इस प्रकार से नियम या किसी भी फलन को या एक उच्च-क्रम फलन लेने या लौटने का [[गणितीय तर्क|नियम]] या परिणाम प्रकार होता है
[[कंप्यूटर विज्ञान]] और [[गणितीय तर्क|गणितीय नियम]] में, '''फंक्शन प्रकार''' (या तीर प्रकार या घातांक) [[चर (कंप्यूटर विज्ञान)|वेरिएबल (कंप्यूटर विज्ञान)]] या पैरामीटर (कंप्यूटर विज्ञान) का प्रकार होता है, जिसमें फंक्शन (कंप्यूटर विज्ञान) को सौंपा जा सकता है, इस प्रकार से नियम या किसी भी फंक्शन को या एक उच्च-क्रम फंक्शन लेने या लौटने का [[गणितीय तर्क|नियम]] या परिणाम प्रकार होता है


इस प्रकार से फलन प्रकार पैरामीटर के प्रकार और फलन के परिणाम प्रकार पर निर्भर करता है (यह, या अधिक स्पष्ट रूप से अप्रयुक्त प्रकार कंस्ट्रक्टर <code>{{nowrap|· → ·}}</code>, [[उच्च प्रकार का]] प्रकार है) । किन्तु सैद्धांतिक समुच्चय िंग्स और [[प्रोग्रामिंग भाषा]]ओं में जहां फलन को निश्चित रूप में परिभाषित किया जाता है, जैसे कि बस टाइप किया गया लैम्ब्डा कैलकुलस, एक फलन प्रकार बिल्कुल दो प्रकारों पर निर्भर करता है, डोमेन ''A'' और रेंज ''B''। यहां एक फलन प्रकार को सदैव गणितीय फलन   के बाद द्वारा ''A'' → ''B'', दर्शाया जाता है , या {{math|''B''<sup>''A''</sup>}} वहां उपस्तिथ ा बिल्कुल {{math|''B''<sup>''A''</sup>}} ([[घातीय वस्तु|घातीय रूप से]] कई) समुच्चय -सैद्धांतिक फलन के आधार पर [[सेट की श्रेणी|समुच्चय की श्रेणी]] में ''A'' से ''B'' तक मैपिंग करता है। ऐसे मानचित्रों या फलन के वर्ग को घातीय वस्तु कहा जाता है। [[करी|करीइंग]] का कार्य फलन प्रकार को उत्पाद प्रकार से जोड़ देता है; करीइंग पर लेख में इस पर विस्तार से चर्चा की गई है।
इस प्रकार से फंक्शन प्रकार पैरामीटर के प्रकार और फंक्शन के परिणाम प्रकार पर निर्भर करता है (यह, या अधिक स्पष्ट रूप से अप्रयुक्त प्रकार कंस्ट्रक्टर <code>{{nowrap|· → ·}}</code>, उच्च प्रकार का प्रकार है) । किन्तु सैद्धांतिक समुच्चय और [[प्रोग्रामिंग भाषा]]ओं में जहां फंक्शन को निश्चित रूप में परिभाषित किया जाता है, जैसे कि बस टाइप किया गया लैम्ब्डा कैलकुलस, एक फंक्शन प्रकार बिल्कुल दो प्रकारों पर निर्भर करता है, डोमेन ''A'' और रेंज ''B''। यहां एक फंक्शन प्रकार को सदैव गणितीय फंक्शन   के बाद द्वारा ''A'' → ''B'', दर्शाया जाता है , या {{math|''B''<sup>''A''</sup>}} वहां उपस्तिथ ा बिल्कुल {{math|''B''<sup>''A''</sup>}} ([[घातीय वस्तु|घातीय रूप से]] कई) समुच्चय -सैद्धांतिक फंक्शन के आधार पर [[सेट की श्रेणी|समुच्चय की श्रेणी]] में ''A'' से ''B'' तक मैपिंग करता है। ऐसे मानचित्रों या फंक्शन के वर्ग को घातीय वस्तु कहा जाता है। [[करी|करीइंग]] का कार्य फंक्शन प्रकार को उत्पाद प्रकार से जोड़ देता है; करीइंग पर लेख में इस पर विस्तार से चर्चा की गई है।


अतः फलन प्रकार को आश्रित प्रकार या औपचारिक परिभाषा का विशेष स्तिथियों में माना जा सकता है, जोकी अन्य गुणों के मध्य , [[बहुरूपता (कंप्यूटर विज्ञान)|बहुरूपी (कंप्यूटर विज्ञान)]] के विचार को सम्मिलित करता है।  
अतः फंक्शन प्रकार को आश्रित प्रकार या औपचारिक परिभाषा का विशेष स्तिथियों में माना जा सकता है, जोकी अन्य गुणों के मध्य , [[बहुरूपता (कंप्यूटर विज्ञान)|बहुरूपी (कंप्यूटर विज्ञान)]] के विचार को सम्मिलित करता है।  


== प्रोग्रामिंग भाषाएँ ==
== प्रोग्रामिंग भाषाएँ ==
इस प्रकार से कई प्रोग्रामिंग भाषाओं में फलन प्रकारों के लिए उपयोग किए जाने वाले सिंटैक्स को संक्षेप में प्रस्तुत किया जा सकता है, जिसमें उच्च-क्रम [[फ़ंक्शन संरचना (कंप्यूटर विज्ञान)|फलन संरचना (कंप्यूटर विज्ञान)]] फलन के लिए उदाहरण प्रकार हस्ताक्षर सम्मिलित किये जाते है:
इस प्रकार से कई प्रोग्रामिंग भाषाओं में फंक्शन प्रकारों के लिए उपयोग किए जाने वाले सिंटैक्स को संक्षेप में प्रस्तुत किया जा सकता है, जिसमें उच्च-क्रम फंक्शन संरचना (कंप्यूटर विज्ञान) फंक्शन के लिए उदाहरण प्रकार हस्ताक्षर सम्मिलित किये जाते है:
{| class=wikitable
{| class=wikitable
|-
|-
! colspan=2 | Language !! Notation !! Example [[type signature]]
! colspan=2 |लैंग्वेज
!नोटेशन
! उदाहरण प्रकार के हस्ताक्षर (Example type signature)
|-
|-
| rowspan=7 | With [[first-class function]]s,<br> [[parametric polymorphism]]
| rowspan=7 | प्रथम श्रेणी के कार्यों के साथ,
पैरामीट्रिक बहुरूपता
 
(With first-class functions,<br> parametric polymorphism)
| [[C Sharp (programming language)|C#]]
| [[C Sharp (programming language)|C#]]
| <code>Func<''α''<sub>1</sub>,''α''<sub>2</sub>,...,''α''<sub>''n''</sub>,''ρ''></code>
| <code>Func<''α''<sub>1</sub>,''α''<sub>2</sub>,...,''α''<sub>''n''</sub>,''ρ''></code>
Line 40: Line 45:
| {{code|2=rust|fn compose<A, B, C>(f: fn(A) -> B, g: fn(B) -> C) -> fn(A) -> C}}
| {{code|2=rust|fn compose<A, B, C>(f: fn(A) -> B, g: fn(B) -> C) -> fn(A) -> C}}
|-
|-
| rowspan=2 |  With [[first-class function]]s,<br> without [[parametric polymorphism]]
| rowspan=2 |  (प्रथम श्रेणी के कार्यों के साथ,
पैरामीट्रिक बहुरूपता के बिना)
 
With first-class functions,<br>without parametric polymorphism
| [[Go (programming language)|Go]]
| [[Go (programming language)|Go]]
| <code>func(''α''<sub>1</sub>,''α''<sub>2</sub>,...,''α''<sub>''n''</sub>) ''ρ''</code>
| <code>func(''α''<sub>1</sub>,''α''<sub>2</sub>,...,''α''<sub>''n''</sub>) ''ρ''</code>
Line 49: Line 57:
| {{code|2=objc|int (^compose(int (^f)(int), int (^g)(int)))(int);}}
| {{code|2=objc|int (^compose(int (^f)(int), int (^g)(int)))(int);}}
|-
|-
| rowspan=2 | Without [[first-class function]]s,<br> [[parametric polymorphism]]
| rowspan=2 | प्रथम श्रेणी के कार्यों के बिना,
पैरामीट्रिक बहुरूपता
 
(Without first-class functions,<br> parametric polymorphism)
| [[C (programming language)|C]]
| [[C (programming language)|C]]
| <code>''ρ'' (*)(''α''<sub>1</sub>,''α''<sub>2</sub>,...,''α''<sub>''n''</sub>)</code>
| <code>''ρ'' (*)(''α''<sub>1</sub>,''α''<sub>2</sub>,...,''α''<sub>''n''</sub>)</code>
Line 60: Line 71:


|}
|}
इस प्रकार से उदाहरण के लिए C# के उदाहरण प्रकार के हस्ताक्षर को देखते समय, फलन का प्रकार {{code|कंपोज़}} वास्तव में <code>Func<Func<A,B>,Func<B,C>,Func<A,C>>है</code>.
इस प्रकार से उदाहरण के लिए C# के उदाहरण प्रकार के हस्ताक्षर को देखते समय, फंक्शन का प्रकार {{code|कंपोज़}} वास्तव में <code>Func<Func<A,B>,Func<B,C>,Func<A,C>>है</code>.


[[टेम्पलेट (सी++)|सी++]]11 के std::फलन में टाइप इरेज़र के कारण, उच्च ऑर्डर फ़ंक्शन पैरामीटर के लिए [[टेम्पलेट (सी++)|टेम्पलेट]] और क्लोजर के लिए टाइप अनुमान (ऑटो) का उपयोग करना अधिक समान होता है।
सी++11 के std::फंक्शन में टाइप इरेज़र के कारण, उच्च ऑर्डर फ़ंक्शन पैरामीटर के लिए टेम्पलेट और क्लोजर के लिए टाइप अनुमान (ऑटो) का उपयोग करना अधिक समान होता है।


== सांकेतिक शब्दार्थ ==
== सांकेतिक शब्दार्थ ==
प्रोग्रामिंग भाषाओं में फलन प्रकार सभी समुच्चय -सैद्धांतिक फलन के स्थान के अनुरूप नहीं है। डोमेन के रूप में अनगिनत प्रकार की [[प्राकृतिक संख्या]]ओं और रेंज के रूप में बूलियन को देखते हुए, अनगिनत अनंत संख्या (2<sup>ℵ<sub>0</sub></sup> = c) होती है उनके मध्य समुच्चय -सैद्धांतिक कार्यों की [[सातत्य की प्रमुखता]])। स्पष्ट रूप से फलन का यह स्थान किसी भी प्रोग्रामिंग भाषा में परिभाषित किए जा सकने वाले फलन की संख्या से उच्च है, क्योंकि केवल गिनती के कई प्रोग्राम उपस्तिथ हैं ( प्रोग्राम सीमित संख्या में प्रतीकों का सीमित अनुक्रम है) और समुच्चय -सैद्धांतिक फलन में से [[रुकने की समस्या|हाल्टिंग समस्या  ]] को प्रभावी ढंग से हल करता है।
प्रोग्रामिंग भाषाओं में फंक्शन प्रकार सभी समुच्चय -सैद्धांतिक फंक्शन के स्थान के अनुरूप नहीं है। डोमेन के रूप में अनगिनत प्रकार की [[प्राकृतिक संख्या]]ओं और रेंज के रूप में बूलियन को देखते हुए, अनगिनत अनंत संख्या (2<sup>ℵ<sub>0</sub></sup> = c) होती है उनके मध्य समुच्चय -सैद्धांतिक कार्यों की [[सातत्य की प्रमुखता]])। स्पष्ट रूप से फंक्शन का यह स्थान किसी भी प्रोग्रामिंग भाषा में परिभाषित किए जा सकने वाले फंक्शन की संख्या से उच्च है, क्योंकि केवल गिनती के कई प्रोग्राम उपस्तिथ हैं ( प्रोग्राम सीमित संख्या में प्रतीकों का सीमित अनुक्रम है) और समुच्चय -सैद्धांतिक फंक्शन में से [[रुकने की समस्या|हाल्टिंग समस्या  ]] को प्रभावी ढंग से हल करता है।


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


== यह भी देखें ==
== यह भी देखें ==
Line 73: Line 84:
*करी  
*करी  
* घातांकीय वस्तु, श्रेणी-सैद्धांतिक समतुल्य
* घातांकीय वस्तु, श्रेणी-सैद्धांतिक समतुल्य
* [[प्रथम श्रेणी का कार्य|प्रथम श्रेणी का फलन]]
* प्रथम श्रेणी का फंक्शन
* फलन स्पेस, समुच्चय -सैद्धांतिक समकक्ष
* फंक्शन स्पेस, समुच्चय -सैद्धांतिक समकक्ष


== संदर्भ ==
== संदर्भ ==
Line 82: Line 93:
* [http://homotopytypetheory.org/2013/06/20/the-hott-book/ ''Homotopy Type Theory: Univalent Foundations of Mathematics'', The Univalent Foundations Program, Institute for Advanced Study]. ''See section 1.2''.
* [http://homotopytypetheory.org/2013/06/20/the-hott-book/ ''Homotopy Type Theory: Univalent Foundations of Mathematics'', The Univalent Foundations Program, Institute for Advanced Study]. ''See section 1.2''.


{{Data types}}
[[Category: डेटा के प्रकार]] [[Category: सबरूटीन्स]] [[Category: प्रकार सिद्धांत]]
[[Category: Machine Translated Page]]
[[Category:Created On 02/07/2023]]
[[Category:Created On 02/07/2023]]
[[Category:Machine Translated Page]]
[[Category:Templates Vigyan Ready]]
[[Category:डेटा के प्रकार]]
[[Category:प्रकार सिद्धांत]]
[[Category:सबरूटीन्स]]

Latest revision as of 17:21, 13 July 2023

कंप्यूटर विज्ञान और गणितीय नियम में, फंक्शन प्रकार (या तीर प्रकार या घातांक) वेरिएबल (कंप्यूटर विज्ञान) या पैरामीटर (कंप्यूटर विज्ञान) का प्रकार होता है, जिसमें फंक्शन (कंप्यूटर विज्ञान) को सौंपा जा सकता है, इस प्रकार से नियम या किसी भी फंक्शन को या एक उच्च-क्रम फंक्शन लेने या लौटने का नियम या परिणाम प्रकार होता है

इस प्रकार से फंक्शन प्रकार पैरामीटर के प्रकार और फंक्शन के परिणाम प्रकार पर निर्भर करता है (यह, या अधिक स्पष्ट रूप से अप्रयुक्त प्रकार कंस्ट्रक्टर · → ·, उच्च प्रकार का प्रकार है) । किन्तु सैद्धांतिक समुच्चय और प्रोग्रामिंग भाषाओं में जहां फंक्शन को निश्चित रूप में परिभाषित किया जाता है, जैसे कि बस टाइप किया गया लैम्ब्डा कैलकुलस, एक फंक्शन प्रकार बिल्कुल दो प्रकारों पर निर्भर करता है, डोमेन A और रेंज B। यहां एक फंक्शन प्रकार को सदैव गणितीय फंक्शन   के बाद द्वारा AB, दर्शाया जाता है , या BA वहां उपस्तिथ ा बिल्कुल BA (घातीय रूप से कई) समुच्चय -सैद्धांतिक फंक्शन के आधार पर समुच्चय की श्रेणी में A से B तक मैपिंग करता है। ऐसे मानचित्रों या फंक्शन के वर्ग को घातीय वस्तु कहा जाता है। करीइंग का कार्य फंक्शन प्रकार को उत्पाद प्रकार से जोड़ देता है; करीइंग पर लेख में इस पर विस्तार से चर्चा की गई है।

अतः फंक्शन प्रकार को आश्रित प्रकार या औपचारिक परिभाषा का विशेष स्तिथियों में माना जा सकता है, जोकी अन्य गुणों के मध्य , बहुरूपी (कंप्यूटर विज्ञान) के विचार को सम्मिलित करता है।

प्रोग्रामिंग भाषाएँ

इस प्रकार से कई प्रोग्रामिंग भाषाओं में फंक्शन प्रकारों के लिए उपयोग किए जाने वाले सिंटैक्स को संक्षेप में प्रस्तुत किया जा सकता है, जिसमें उच्च-क्रम फंक्शन संरचना (कंप्यूटर विज्ञान) फंक्शन के लिए उदाहरण प्रकार हस्ताक्षर सम्मिलित किये जाते है:

लैंग्वेज नोटेशन उदाहरण प्रकार के हस्ताक्षर (Example type signature)
प्रथम श्रेणी के कार्यों के साथ,

पैरामीट्रिक बहुरूपता

(With first-class functions,
parametric polymorphism)

C# Func<α1,α2,...,αn,ρ> Func<A,C> compose(Func<B,C> f, Func<A,B> g);
Haskell α -> ρ compose :: (b -> c) -> (a -> b) -> a -> c
OCaml α -> ρ compose : ('b -> 'c) -> ('a -> 'b) -> 'a -> 'c
Scala (α1,α2,...,αn) => ρ def compose[A, B, C](f: B => C, g: A => B): A => C
Standard ML α -> ρ compose : ('b -> 'c) -> ('a -> 'b) -> 'a -> 'c
Swift α -> ρ func compose<A,B,C>(f: (B) -> C, g: (A) -> B) -> (A) -> C
Rust fn(α1,α2,...,αn) -> ρ fn compose<A, B, C>(f: fn(A) -> B, g: fn(B) -> C) -> fn(A) -> C
(प्रथम श्रेणी के कार्यों के साथ,

पैरामीट्रिक बहुरूपता के बिना)

With first-class functions,
without parametric polymorphism

Go func(α1,α2,...,αn) ρ var compose func(func(int)int, func(int)int) func(int)int
C++, Objective-C, with blocks ρ (^)(α1,α2,...,αn) int (^compose(int (^f)(int), int (^g)(int)))(int);
प्रथम श्रेणी के कार्यों के बिना,

पैरामीट्रिक बहुरूपता

(Without first-class functions,
parametric polymorphism)

C ρ (*)(α1,α2,...,αn) int (*compose(int (*f)(int), int (*g)(int)))(int);
C++11 Not unique.

std::function<ρ (α1,α2,...,αn)> is the more general type (see below).

function<function<int(int)>(function<int(int)>, function<int(int)>)> compose;

इस प्रकार से उदाहरण के लिए C# के उदाहरण प्रकार के हस्ताक्षर को देखते समय, फंक्शन का प्रकार कंपोज़ वास्तव में Func<Func<A,B>,Func<B,C>,Func<A,C>>है.

सी++11 के std::फंक्शन में टाइप इरेज़र के कारण, उच्च ऑर्डर फ़ंक्शन पैरामीटर के लिए टेम्पलेट और क्लोजर के लिए टाइप अनुमान (ऑटो) का उपयोग करना अधिक समान होता है।

सांकेतिक शब्दार्थ

प्रोग्रामिंग भाषाओं में फंक्शन प्रकार सभी समुच्चय -सैद्धांतिक फंक्शन के स्थान के अनुरूप नहीं है। डोमेन के रूप में अनगिनत प्रकार की प्राकृतिक संख्याओं और रेंज के रूप में बूलियन को देखते हुए, अनगिनत अनंत संख्या (20 = c) होती है उनके मध्य समुच्चय -सैद्धांतिक कार्यों की सातत्य की प्रमुखता)। स्पष्ट रूप से फंक्शन का यह स्थान किसी भी प्रोग्रामिंग भाषा में परिभाषित किए जा सकने वाले फंक्शन की संख्या से उच्च है, क्योंकि केवल गिनती के कई प्रोग्राम उपस्तिथ हैं ( प्रोग्राम सीमित संख्या में प्रतीकों का सीमित अनुक्रम है) और समुच्चय -सैद्धांतिक फंक्शन में से हाल्टिंग समस्या   को प्रभावी ढंग से हल करता है।

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

यह भी देखें

  • कार्टेशियन बंद श्रेणी
  • करी
  • घातांकीय वस्तु, श्रेणी-सैद्धांतिक समतुल्य
  • प्रथम श्रेणी का फंक्शन
  • फंक्शन स्पेस, समुच्चय -सैद्धांतिक समकक्ष

संदर्भ

  • Pierce, Benjamin C. (2002). Types and Programming Languages. The MIT Press. pp. 99–100. ISBN 9780262162098.
  • Mitchell, John C. Foundations for Programming Languages. The MIT Press.
  • function type at the nLab
  • Homotopy Type Theory: Univalent Foundations of Mathematics, The Univalent Foundations Program, Institute for Advanced Study. See section 1.2.