Secara kasar, dengan penyematan logika yang mendalam, Anda (1) mendefinisikan tipe data yang mewakili sintaks untuk logika Anda, dan (2) memberikan model sintaksis , dan (3) membuktikan bahwa aksioma tentang sintaks Anda adalah suara dengan hormat ke model. Dengan penyematan dangkal, Anda melewati langkah (1) dan (2), dan mulai saja dengan model, dan buktikan keterkaitan di antara rumus. Ini berarti embeddings yang dangkal biasanya lebih sulit untuk diselesaikan, karena mereka merepresentasikan pekerjaan yang biasanya Anda lakukan dengan embedding yang dalam.
Namun, jika memiliki embedding yang dalam, biasanya lebih mudah untuk menulis prosedur keputusan reflektif, karena Anda bekerja dengan formula yang sebenarnya memiliki sintaks yang dapat Anda ulangi. Juga, jika model Anda aneh atau rumit, maka Anda biasanya tidak ingin bekerja secara langsung dengan semantik. (Misalnya, jika Anda menggunakan biorthogonality untuk memaksakan penutupan yang diizinkan, atau menggunakan model gaya Kripke untuk memaksa properti bingkai dalam logika pemisahan, atau game serupa.) Namun, embedding yang dalam hampir pasti akan memaksa Anda untuk berpikir banyak tentang pengikatan dan penggantian variabel , yang akan mengisi hatimu dengan amarah, karena ini (a) sepele, dan (b) sumber kekesalan yang tidak pernah berakhir.
Urutan yang benar yang harus Anda ambil adalah: (1) mencoba bertahan dengan penanaman dangkal. (2) Ketika itu kehabisan tenaga, coba gunakan taktik dan kutipan untuk menjalankan prosedur keputusan yang ingin Anda jalankan. (3) Jika itu juga kehabisan tenaga, menyerah dan gunakan sintaks yang diketik secara dependen untuk penanaman dalam Anda.
- Rencanakan untuk mengambil beberapa bulan pada (3) jika ini adalah pertama kalinya Anda keluar. Anda akan perlu untuk mendapatkan akrab dengan mewah fitur asisten bukti untuk tinggal waras. (Tapi ini adalah investasi yang akan terbayar secara umum.)
- Jika asisten bukti Anda tidak memiliki tipe dependen, tetap di level 2.
- Jika bahasa objek Anda diketik secara dependen, tetap di level 2.
Juga, jangan mencoba naik secara bertahap. Ketika Anda memutuskan untuk naik tangga kompleksitas, ambil langkah penuh pada satu waktu. Jika Anda melakukan hal-hal sedikit demi sedikit, maka Anda akan mendapatkan banyak teorema yang aneh dan tidak dapat digunakan (misalnya, Anda akan mendapatkan beberapa sintaks setengah-berpasangan, dan teorema yang mencampur sintaksis dan semantik dengan cara yang aneh), yang akan Anda dapatkan akhirnya harus membuang.
EDIT: Berikut ini komentar yang menjelaskan mengapa naik tangga secara bertahap begitu menggoda, dan mengapa itu mengarah (secara umum) ke penderitaan.
A ⋆ BsayaA ⋆ B⟺B ⋆ A( A ⋆ B ) ⋆ C⟺A ⋆ ( B ⋆ C)( Saya⋆ A ) ⋆ ( B ⋆ C)A ⋆ ( B ⋆ ( C⋆ saya) )
⋆
Ini benar, dan berhasil! Namun, perhatikan bahwa kata hubung juga ACUI, dan demikian juga disjungsi. Jadi Anda akan melalui proses yang sama dalam bukti lain, dengan tipe data daftar yang berbeda, dan kemudian Anda akan memiliki tiga sintaks untuk fragmen logika pemisahan yang berbeda, dan Anda akan memiliki metatheorem untuk masing-masingnya, yang pasti akan berbeda, dan Anda akan mendapati diri Anda menginginkan metatheorem yang Anda buktikan karena memisahkan konjungsi untuk disjungsi, dan kemudian Anda akan ingin mencampur sintaksis, dan kemudian Anda akan menjadi gila.
Lebih baik menargetkan fragmen terbesar yang bisa Anda tangani dengan upaya yang masuk akal, dan lakukan saja.
Penting untuk dipahami bahwa ada spektrum dari dalam hingga dangkal. Anda memodelkan bagian-bagian bahasa Anda secara mendalam yang entah bagaimana harus berpartisipasi dalam beberapa argumen induktif tentang pembuatannya, sisanya lebih baik dibiarkan dalam pandangan dangkal semantik langsung dari substrat logika.
Misalnya, ketika Anda ingin memberi alasan tentang Hoare Logic, Anda bisa memodelkan bahasa ekspresi dengan cara yang dangkal, tetapi garis besar bahasa assign-if-While harus berupa tipe data konkret. Anda tidak perlu memasukkan struktur x + y atau a <b, tetapi Anda harus bekerja dengan
while
dll.Di jawaban lain ada sindiran untuk tipe dependen. Ini mengingatkan pada masalah kuno untuk merepresentasikan bahasa dengan binder dengan cara yang waras, sedemikian rupa sehingga mereka sedangkal mungkin, tetapi masih mengakui beberapa argumen induktif. Kesan saya adalah bahwa juri masih keluar menilai semua pendekatan dan makalah yang berbeda yang telah muncul dalam 10-20 tahun terakhir tentang masalah itu. "Tantangan POPLmark" untuk komunitas asisten pembuktian yang berbeda juga sampai batas tertentu.
Anehnya, dalam HOL klasik tanpa tipe dependen, pendekatan HOL-Nominal oleh C. Urban bekerja dengan baik untuk penjilidan dangkal, meskipun tidak mengikuti perubahan budaya dalam komunitas formalisasi bahasa pemrograman ini.
sumber