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.