'da özel proverizat taktikleri Doğru bir şekilde anlıyorsam (esas olarak applyTactic
işlevinin varlığından), Idris'da teorem geliştirici için özel taktikler yazmak mümkündür. Nasıl yapılacağını öğrenmek için kullanabileceğim bazı örnekler nelerdir?Idris
Idris
cevap
Idris'da özel taktikler yazmak için iki mekanizma vardır: üst düzey ve düşük seviyeli yansıma.
Üst düzey yansıma kullanarak, değerlendirilen veriler yerine sözdizimi üzerinde çalışan bir işlev yazarsınız - bu, bağımsız değişkenini azaltmaz. Bu işlevler, Idris'daki mevcut taktikleri kullanarak tanımlanan yeni bir taktik döndürüyor. Bir prova şartını doğrudan iade etmek isterseniz, her zaman Exact
'u kullanabilirsiniz. Bu tür yansımaların bir örneği the effects library'da bulunabilir. Yüksek düzey yansıma taktikleri, ispat modunda byReflection
kullanılarak çağrılır.
Düşük seviyeli yansımada, doğrudan İdris'in çekirdek tipi kuramından alıntılanan şartlarla çalışırsınız. Bir taktik daha sonra TT -> List (TTName, TT) -> Tactic
ilk argümanın hedef türü, ikincisi yerel ispat içeriği ve geri dönüş sonucu yüksek düzey yansıma ile aynıdır. Bu, laughadelic'in above'a bağlandığı durumdur. Bunlar, ispat modunda applyTactic
kullanılarak çağrılmaktadır.
- 1. İdris
- 2. Idris
- 3. İddialar İdris
- 4. mu İdris Agda en ↔
- 5. İdris gerçekten "kesinlikle değerlendirildi mi?"
- 6. Agda ve Idris arasındaki farklar
- 7. Harita bul id = id idris?
- 8. İdris, Agda'nın `` `ifadelerine eşdeğer midir?
- 9. İdris: o "ile" "harf" kullanmak yerine, söz konusu "ile" kullanarak tüm fonksiyonlarını yeniden yazmak mümkün mü? Yoksa, karşı bir örnek verebilir misiniz? Idris yılında
- 10. Neden bu Idris snippet typecheck açık bir tür olmadan neden yok?
- 11. Eşitlik Türleri Nasıl Karşılaştırılır?
- 12. İdris'in iki değerin eşit olmadığını otomatik olarak nasıl kanıtlayabilirim?
- 13. İdris'te `-` `işlevini doğrudan kullanmanın iyi bir yolu var mı?
- 14. Muhtemel durum geçişleri nasıl yazılır?
- 15. HVect'in tüm alt boyutları nasıl belirlenir?
- 16. Agda'da Kağıt Üzerine İdeada Toplam Parsers Uygulamak
Nasıl yazılacağını ve nasıl kullanılacağını bilmiyorum ama yakın zamanda gördüm [özel taktik örneği] (https://github.com/idris-lang/Idris-dev/blob/master /libs/base/Data/Vect.idr#L18-L22) ve [kullanımının bir örneği] (https://github.com/idris-lang/Idris-dev/blob/master/libs/base/Data/ HVect.idr # L57). Umarım bu yardımcı olur. – laughedelic
Öyle, teşekkürler. –
Yukarıdaki linkler artık geçerli değil çünkü repo'nun HEAD'sine atıfta bulunuyorlar. Lütfen bunun yerine buraya bakın: [ilk] (https://github.com/idris-lang/Idris-dev/blob/10ef56b8c1629347ab213e97bfff551ee27e11d0/libs/base/Data/Vect.idr#L18-L22), [saniye] (https: //github.com/idris-lang/Idris-dev/blob/fb6a0ed1ad5e3acc3795d7ab674977bdb419129a/libs/base/Data/HVect.idr#L57) –