Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 如何在Agda中定义归纳定义类型的子公式?_Types_Agda_Type Theory_Decidable - Fatal编程技术网

Types 如何在Agda中定义归纳定义类型的子公式?

Types 如何在Agda中定义归纳定义类型的子公式?,types,agda,type-theory,decidable,Types,Agda,Type Theory,Decidable,我试图定义一个简单的谓词,以确定公式是否是一个给定形式的子公式,而不是一个简单的归纳定义语法。我遇到了一些可能很简单的问题 (i) 我更愿意使用具有给定类型a的参数化模块。在a具有可判定等式的意义上,如何导入a是集合的信息?如果无法做到这一点,有哪些变通办法?这就是为什么我选择了Nat (ii)是否为t1≡ (t2//t3)(和类似定义的)谓词isSubFormula处理相等子公式的正确方法?如果没有,还有什么方法可以轻松做到这一点?我还考虑过为equalFmla编写一个谓词,然后使用isSub

我试图定义一个简单的谓词,以确定公式是否是一个给定形式的子公式,而不是一个简单的归纳定义语法。我遇到了一些可能很简单的问题

(i) 我更愿意使用具有给定类型a的参数化模块。在a具有可判定等式的意义上,如何导入a是集合的信息?如果无法做到这一点,有哪些变通办法?这就是为什么我选择了Nat

(ii)是否为
t1≡ (t2//t3)
(和类似定义的)谓词
isSubFormula
处理相等子公式的正确方法?如果没有,还有什么方法可以轻松做到这一点?我还考虑过为
equalFmla
编写一个谓词,然后使用
isSubFormula生成一个全局子公式谓词⊎ equalFmla
但我不确定这是否干净

(iii)当I模式与第一行内部匹配时,为什么最后三行突出显示蓝色?我怎样才能解决这个问题

(iv)为什么
{!Data.Nat_≟_ n1 n2!}
优化以下内容

module categorial1 (A : Set) where

open import Data.Nat using (ℕ)
open import Data.Empty
open import Data.Sum
open import Relation.Binary.PropositionalEquality

-- type symbols
data tSymb : Set where
  -- base : A → tSymb
  base : ℕ → tSymb
  ~ : tSymb → tSymb
  _\\_ : tSymb → tSymb → tSymb
  _//_ : tSymb → tSymb → tSymb

-- A needs a decideable notion of equality
isSubFormula : tSymb → tSymb → Set
-- isSubFormula y (base x) = {!!}
isSubFormula (base n1) (base n2) = {!Data.Nat._≟_ n1 n2 !}
isSubFormula (~ t1) (base x) = ⊥
isSubFormula (t1 \\ t2) (base x) = ⊥
isSubFormula (t1 // t2) (base x) = ⊥
isSubFormula t1 (~ t2) = t1 ≡ (~ t2) ⊎ isSubFormula t1 t2
isSubFormula t1 (t2 \\ t3) = t1 ≡ (t2 \\ t3) ⊎ isSubFormula t1 t2 ⊎ isSubFormula t1 t3
isSubFormula t1 (t2 // t3) = t1 ≡ (t2 // t3) ⊎ isSubFormula t1 t2 ⊎ isSubFormula t1 t3


这是很多不同的问题;如果您单独发布每个问题,堆栈溢出效果会更好

然而,以下是一些答案:

(i) 我宁愿使用具有给定类型a的参数化模块 一个导入的信息是A是一个集合,从某种意义上说,A是一个集合 可判定的平等

您可以通过决策程序对模块进行参数化,例如:

open import Relation.Binary
open import Relation.Binary.PropositionalEquality

module categorical1 {A : Set} (_≟_ : Decidable (_≡_ {A = A})) where
请注意,我们导入了
Relation.Binary
(对于
可判定的
)和
R.B.propositionalquality
(对于
_≡_),因为我们模块的参数类型依赖于这些定义

(iii)当我匹配模式时,为什么最后三行突出显示蓝色 第一个的内部?我怎样才能解决这个问题

这是Agda警告您,这些子句在定义上不成立,因为它们依赖于前面的子句,这些子句与
t1
不匹配

(iv)为什么{!Data.Nat。≟ n1 n2!}下面是什么

module categorial1 (A : Set) where

open import Data.Nat using (ℕ)
open import Data.Empty
open import Data.Sum
open import Relation.Binary.PropositionalEquality

-- type symbols
data tSymb : Set where
  -- base : A → tSymb
  base : ℕ → tSymb
  ~ : tSymb → tSymb
  _\\_ : tSymb → tSymb → tSymb
  _//_ : tSymb → tSymb → tSymb

-- A needs a decideable notion of equality
isSubFormula : tSymb → tSymb → Set
-- isSubFormula y (base x) = {!!}
isSubFormula (base n1) (base n2) = {!Data.Nat._≟_ n1 n2 !}
isSubFormula (~ t1) (base x) = ⊥
isSubFormula (t1 \\ t2) (base x) = ⊥
isSubFormula (t1 // t2) (base x) = ⊥
isSubFormula t1 (~ t2) = t1 ≡ (~ t2) ⊎ isSubFormula t1 t2
isSubFormula t1 (t2 \\ t3) = t1 ≡ (t2 \\ t3) ⊎ isSubFormula t1 t2 ⊎ isSubFormula t1 t3
isSubFormula t1 (t2 // t3) = t1 ≡ (t2 // t3) ⊎ isSubFormula t1 t2 ⊎ isSubFormula t1 t3

因为
isSubFormula
返回一个
Set
,但是
n1≟ n2
返回一个
Dec_≡_

我认为在您的代码中,对于
isSubFormula
应该是一个命题还是一个决策过程存在混淆。如果它返回一个
集合
,则表示它是一个命题。您可以在没有可判定相等的情况下编写,因为没有什么可判定的--
isSubFormula
-两个
基值的一致性意味着它们相等:

isSubFormula : tSymb → tSymb → Set
isSubFormula (base n1) (base n2) = n1 ≡ n2
如果您想要一个决策过程,您可以通过编写
isSubFormula:tSymb来“盲目地”执行→ 齐姆→ Bool
,或将
发行公式
保留为命题,并编写
dec子公式:可判定发行公式

另外请注意,如果您试图确定
isSubFormula
,则只需要
A
上的可判定等式,这样您就可以

module categorical1 (A : Set) where

... 

isSubFormula : tSymb → tSymb → Set

decSubFormula : Decidable (_≡_ {A = A}) → Decidable isSubFormula
decSubFormula _≟A_ = ? -- You can use _≟A_ here to decide equality of A values