Functional programming 具有不同类型索引的相互归纳描述?
我使用描述,就像它们被描述一样,作为一种编码归纳数据类型形状的方式。但是,我一直在研究如何表示归纳类型:Functional programming 具有不同类型索引的相互归纳描述?,functional-programming,agda,dependent-type,theorem-proving,type-theory,Functional Programming,Agda,Dependent Type,Theorem Proving,Type Theory,我使用描述,就像它们被描述一样,作为一种编码归纳数据类型形状的方式。但是,我一直在研究如何表示归纳类型: 相互感应 有不同的指数 例如,假设我们有这样的东西,我们订购不同的类型: data Foo : Set where N : ℕ -> Foo P : (Foo × Foo) -> Foo data <N : ℕ -> ℕ -> Set where <0 : (n : ℕ) -> <N zero n <suc : (m
data Foo : Set where
N : ℕ -> Foo
P : (Foo × Foo) -> Foo
data <N : ℕ -> ℕ -> Set where
<0 : (n : ℕ) -> <N zero n
<suc : (m n : ℕ) -> <N m n -> <N (suc m) (suc n)
data <P : (Foo × Foo) -> (Foo × Foo) -> Set
data <F : Foo -> Foo -> Set
data <P where
<Pair : (x1 x2 y1 y2 : Foo) -> <F x1 y1 -> <F x2 y2 -> <P (x1 , x2) (y1 , y2)
data <F where
<FN : ∀ (a b : ℕ) -> <N a b -> <F (N a) (N b)
<FP : ∀ (p1 p2 : (Foo × Foo) ) -> <P p1 p2 -> <F (P p1) (P p2)
data Foo:设置位置
N:ℕ -> 福
P:(Foo×Foo)->Foo
资料ℕ -> 设定地点
设置
数据取所有指数之和:
Ix = ((Foo × Foo) × (Foo × Foo)) ⊎ (Foo × Foo)
data <P : Ix -> Set
data <F : Ix -> Set
data <P where
<Pair : (x1 x2 y1 y2 : Foo) -> <F (inj₂(x1 , y1)) -> <F (inj₂(x2 , y2))
-> <P (inj₁((x1 , x2), (y1 , y2)))
data <F where
<FN : ∀ (a b : ℕ) -> <N a b -> <F (inj₂(N a , N b))
<FP : ∀ (p1 p2 : (Foo × Foo) ) -> <P (inj₁(p1 , p2)) -> <F (inj₂(P p1 , P p2))
Ix=((Foo×Foo)×(Foo×Foo))⊎ (Foo×Foo)
数据Set
数据集
您可能会发现有用的数据。您所有的@AndrásKovács Oops,都是一个错误。现在修复。为什么索引Ix
bySort
?
data Ix : Set where
<P : Foo × Foo → Foo × Foo → Ix
<F : Foo → Foo → Ix
data T : Ix → Set where
<Pair : ∀ x1 x2 y1 y2 → T (<F x1 y1) → T (<F x2 y2)
→ T (<P (x1 , x2) (y1 , y2))
<FN : ∀ (a b : ℕ) → <N a b → T (<F (N a) (N b))
<FP : ∀ p1 p2 → T (<P p1 p2) → T (<F (P p1) (P p2))
<F : Foo → Foo → Set
<F (N n) (N n') = <N n n'
<F (P (x , y)) (P (x' , y')) = <F x x' × <F y y'
<F (N _) (P _) = ⊥
<F (P _) (N _) = ⊥