Pertama, untuk menghilangkan kemungkinan disonansi kognitif: menimbang tentang struktur tak terbatas bukanlah masalah, kami melakukannya sepanjang waktu. Selama strukturnya dapat dideskripsikan secara halus, itu bukan masalah. Berikut adalah beberapa jenis umum struktur tak terbatas:
- bahasa (set string lebih dari beberapa alfabet, yang mungkin terbatas);
- bahasa pohon (set pohon lebih dari beberapa alfabet);
- jejak eksekusi dari sistem non-deterministik;
- bilangan real;
- set bilangan bulat;
- set fungsi dari integer ke integer; ...
Koinduktivitas sebagai fixpoint terbesar
Di mana definisi induktif membangun struktur dari blok bangunan elementer, definisi koinduktif membentuk struktur dari bagaimana mereka dapat didekonstruksi. Sebagai contoh, tipe daftar yang elemen-elemennya ada dalam suatu himpunan A
didefinisikan sebagai berikut dalam Coq:
Inductive list (A:Set) : Set :=
| nil : list A
| cons : A -> list A -> list A.
Secara informal, list
tipe ini adalah tipe terkecil yang berisi semua nilai yang dibangun dari nil
dan cons
konstruktor, dengan aksioma yang . Sebaliknya, kita dapat mendefinisikan tipe terbesar yang berisi semua nilai yang dibangun dari konstruktor ini, menjaga aksioma diskriminasi:∀xy,nil≠consxy
CoInductive colist (A:Set) : Set :=
| conil : colist A
| cocons : A -> colist A -> colist A.
list
isomorfik ke subset dari colist
. Selain itu, colist
berisi daftar tak terbatas: daftar dengan cocons
saat cocons
.
CoFixpoint flipflop : colist ℕ := cocons 1 (cocons 2 flipflop).
CoFixpoint from (n:ℕ) : colist ℕ := cocons n (from (1 + n)).
flipflop
adalah infinite (daftar bundar) ; adalah daftar tak terbatas dari bilangan asli .1::2::1::2::…from 0
0::1::2::…
Definisi rekursif terbentuk dengan baik jika hasilnya dibangun dari blok yang lebih kecil: panggilan rekursif harus bekerja pada input yang lebih kecil. Definisi korecurif terbentuk dengan baik jika hasilnya membangun objek yang lebih besar. Induksi melihat konstruktor, koinduksi melihat destruktor. Perhatikan bagaimana dualitas tidak hanya mengubah lebih kecil menjadi lebih besar tetapi juga input ke output. Misalnya, alasan flipflop
dan from
definisi di atas terbentuk dengan baik adalah bahwa panggilan korektif dijaga oleh panggilan ke cocons
konstruktor dalam kedua kasus.
Jika pernyataan tentang objek induktif memiliki bukti induktif, pernyataan tentang objek koinduktif memiliki bukti koinduktif. Sebagai contoh, mari kita mendefinisikan predikat tak terbatas pada kolis; secara intuitif, koloni tak terbatas adalah yang tidak berakhir dengan conil
.
CoInductive Infinite A : colist A -> Prop :=
| Inf : forall x l, Infinite l -> Infinite (cocons x l).
Untuk membuktikan bahwa kolis dalam bentuk itu from n
tidak terbatas, kita dapat bernalar dengan coinduction. from n
sama dengan cocons n (from (1 + n))
. Ini menunjukkan bahwa from n
lebih besar daripada from (1 + n)
, yang tak terbatas oleh hipotesis coinduction, karenanya from n
tak terbatas.
Bisimilaritas, properti koinduktif
Coinduction sebagai teknik pembuktian juga berlaku untuk benda-benda yang memiliki keterbatasan. Secara intuitif, bukti induktif tentang suatu objek didasarkan pada bagaimana objek itu dibangun. Bukti koinduktif didasarkan pada bagaimana objek dapat diuraikan.
Saat mempelajari sistem deterministik, adalah umum untuk mendefinisikan kesetaraan melalui aturan induktif: dua sistem setara jika Anda dapat berpindah dari satu ke yang lain dengan serangkaian transformasi. Definisi seperti itu cenderung gagal menangkap banyak cara yang berbeda dari sistem non-deterministik yang pada akhirnya memiliki perilaku yang sama (dapat diamati) walaupun memiliki struktur internal yang berbeda. (Coinduction juga berguna untuk menggambarkan sistem non-terminating, bahkan ketika mereka deterministik, tetapi ini bukan apa yang akan saya fokuskan di sini.)
Sistem nondeterministik seperti sistem konkuren sering dimodelkan dengan sistem transisi berlabel . LTS adalah grafik terarah di mana tepinya diberi label. Setiap tepi mewakili kemungkinan transisi sistem. Jejak LTS adalah urutan label tepi di atas jalur dalam grafik.
Dua LTS dapat berperilaku identik, karena mereka memiliki jejak yang sama mungkin, bahkan jika struktur internal mereka berbeda. Grafik isomorfisme terlalu kuat untuk mendefinisikan kesetaraannya. Sebaliknya, LTS dikatakan mensimulasikan LTS jika setiap transisi LTS kedua menerima transisi yang sesuai di yang pertama. Secara formal, misalkan adalah penyatuan yang terpisah dari status kedua LTS, set label (umum) dan hubungan transisi. Relasi adalah simulasi jika
ABSL→R⊆S×S
∀(p,q)∈R, if p→αp′ then ∃q′,q→αq′ and (p′,q′)∈R
A mensimulasikan jika ada simulasi di mana semua keadaan terkait dengan keadaan di . Jika adalah simulasi di kedua arah, itu disebut bisimulasi . Simulasi adalah sifat coinductive: setiap pengamatan di satu sisi harus memiliki kecocokan di sisi lain.BBAR
Ada banyak potensi bisimulasi dalam LTS. Bisimulasi yang berbeda mungkin mengidentifikasi keadaan yang berbeda. Diberikan dua dan , hubungan yang diberikan dengan mengambil gabungan grafik relasi sendiri merupakan bisimulasi, karena negara-negara terkait memunculkan negara-negara terkait untuk kedua hubungan. (Ini berlaku untuk serikat tak terbatas juga. Relasi kosong adalah bisimulasi yang tidak menyimpang, seperti juga relasi identitas.) Secara khusus, penyatuan semua bisimulasi itu sendiri adalah bisimulasi, yang disebut bisimilaritas. Bisimilaritas adalah cara paling kasar untuk mengamati suatu sistem yang tidak membedakan antara keadaan yang berbeda.R1R2R1∪R2
Bisimilaritas adalah properti koinduktif. Ini dapat didefinisikan sebagai titik fixpoint terbesar dari operator: itu adalah hubungan terbesar yang, ketika diperluas untuk mengidentifikasi keadaan yang setara, tetap sama.
Referensi