[英]Type hierarchy definition in Coq or Agda
我想構建一種類型層次結構:
B is of type A ( B::A )
C and D are of type of B (C,D ::B)
E and F are of type of C (E,F ::C)
我在這里詢問是否可以直接在Isabelle中實現,但是你看到的答案是否可以直接在Agda或Coq中編碼?
PS:假設A..F都是抽象的,並且在每種類型上定義了一些函數)
謝謝
如果我正確理解你的問題,你想要的東西看起來像身份類型 。 當我們聲明類型構造函數_isOfType_
,我們提到兩個Set
(參數A
和索引B
),但是構造函數indeed
確保構造這種類型的元素的唯一方法是強制它們確實是相等的(和那a
是該類型的):
data _isOfType_ {ℓ} {A : Set ℓ} (a : A) : (B : Set ℓ) → Set where
indeed : a isOfType A
我們現在可以將函數作為參數證明事物是正確的類型。 在這里,我翻譯你的要求和假設我有一個函數f
能夠在兩個結合C
s轉換之一。 在適當的假設上進行模式匹配表明E和F確實在C
型上,因此可以將其輸入f
以實現目標:
example : ∀ (A : Set₃) (B : Set₂) (C D : Set₁) (E F : Set) →
B isOfType A
→ C isOfType B → D isOfType B
→ E isOfType C → F isOfType C
→ (f : C → C → C) → C
example A B .Set D E F _ _ _ indeed indeed f = f E F
對於這種模式,您是否考慮過特定的用例,或者您是否正在使用其他編程語言遇到的想法來訪問Agda? 可能有更慣用的方式來制定您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.