簡體   English   中英

在Coq或Agda中鍵入層次結構定義

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM