Saya ingin tahu apakah tipe dikuantifikasi secara universal : adalah sub-tipe, atau kasus khusus, dari tipe dikuantifikasi secara dengan tanda tangan yang sama:T a = ∀ X : { a ∈ X , f : X → { T , F } }
Saya akan mengatakan "ya": Jika ada sesuatu yang benar "untuk semua X" ( ), maka itu juga harus benar "untuk beberapa X" ( ). Artinya, pernyataan dengan ' ' hanyalah versi yang lebih terbatas dari pernyataan yang sama dengan ' ':∃ X ∀ ∃ ∀ X , P ( X ) ?
Apakah saya salah di suatu tempat?
Latar Belakang: Mengapa saya menanyakan hal ini?
Saya mempelajari tipe eksistensial untuk memahami mengapa dan bagaimana "Abstrak [Data] Jenis Memiliki Tipe Eksistensial" . Saya tidak bisa memahami konsep ini hanya dari teori; Saya perlu contoh nyata juga.
Sayangnya, contoh kode yang baik sulit ditemukan karena sebagian besar bahasa pemrograman hanya memiliki dukungan terbatas untuk jenis eksistensial. (Misalnya, Haskell
forall, atau wildcard Java?.) Di sisi lain, tipe yang dikuantifikasi secara universal didukung oleh banyak bahasa terkini melalui "generik".Yang lebih buruk, obat generik tampaknya mudah bercampur dengan tipe eksistensial , juga, membuatnya lebih sulit untuk membedakan eksistensial dari tipe universal. Saya ingin tahu mengapa percampuran ini terjadi begitu mudah. Sebuah jawaban untuk pertanyaan ini mungkin menjelaskannya: Jika tipe universal memang hanya merupakan kasus khusus dari tipe eksistensial, maka tidak mengherankan bahwa tipe generik, misalnya Java
List<T>, dapat ditafsirkan dengan cara baik.
forall x. P(x)begitu exists x. P(x). Apakah sistem tipe mempertimbangkan hal ini saat memeriksa tipe ... Saya tidak tahu. +1 untuk pertanyaan yang menarik.