Types 与提升和设置达成一致ω;,和表达式中的变量引用

Types 与提升和设置达成一致ω;,和表达式中的变量引用,types,polymorphism,expression,semantics,agda,Types,Polymorphism,Expression,Semantics,Agda,在a中,我有一个玩具语言的类型 data Type : Set where Nat : Type Prp : Type 我想用不相交的并集来解释它们 类型→ 设置⊎ 设置₁,但思想层面的提升将是最好的 并得到了帮助 ⟦_⟧ₜ : Type → Set₁ ⟦ Nat ⟧ₜ = Lift ℕ ⟦ Prp ⟧ₜ = Set 现在假设我的玩具语言有变量和表达式 data Variable : Type → Set where x y : ∀ {t} → Variable t data

在a中,我有一个玩具语言的类型

data Type : Set where
  Nat  : Type
  Prp : Type
我想用不相交的并集来解释它们
类型→ 设置⊎ 设置₁,但思想层面的提升将是最好的
并得到了帮助

⟦_⟧ₜ : Type → Set₁
⟦ Nat ⟧ₜ = Lift ℕ
⟦ Prp ⟧ₜ = Set
现在假设我的玩具语言有变量和表达式

data Variable : Type → Set where
  x y : ∀ {t} → Variable t

data Expr : Type → Set₁ where
  Var : ∀ {t} (v : Variable t) → Expr t      -- varaible symbols
  Recall that 
Set₁ ∋ Lift ℕ ∋ ⟦ e ⟧ₑ σ
and
Set α ∋ (Set α ∋ A ∋ x) ≡ (Set α ∋ A ∋ y)
, where
_∋_
is from the
Function
module:

infixl 0 _∋_
_∋_ : ∀ {a} (A : Set a) → A → A
A ∋ x = x
数据变量:类型→ 设定地点
x y:∀ {t}→ 变量t
数据表达式:类型→ 设置₁ 哪里
变量:∀ {t} (v:变量t)→ Expr t——可变符号

回想一下
Set₁ ∋ 举起ℕ ∋ ⟦ E⟧ₑ σ
设置α∋ (集α∋ A.∋ 十)≡ (集α∋ A.∋ y) 
,其中
_∋_来自
功能
模块:

⟦_⟧ₑ (e ≈ e₁) σ = lower (⟦ e ⟧ₑ σ) ≡ lower (⟦ e₁ ⟧ₑ σ)
因此表达式
⟦ E⟧ₑ σ ≡ ⟦ E₁ ⟧ₑ σ
位于
集合中₁(因为
⟦ E⟧ₑ σ
⟦ E₁ ⟧ₑ σ
位于
集合中₁),而您需要它位于
集合中。你可以写

data _≡′_ {a} {A : Set a} (x : A) : A → Set where
  refl′ : x ≡′ x
或重新定义
_≡_利用一项新功能,允许“强制执行”仅出现在数据类型的参数和索引类型中的级别:

⟦_⟧ₑ (e ≈ e₁) σ = ⟦ e ⟧ₑ σ ≡′ ⟦ e₁ ⟧ₑ σ
注意
Set
而不是
Set a
。那就是

我会选择第一个选项


您的
\u不在ₙ_e
可以是
Var v
e[v/Var v]≡ E
无论
v
是否出现在
E
中。为什么不将
\u not-occurrents-in
定义为数据类型?顺便说一句,我认为将替换发音为
E[v]更为标准≔ e]
[e/v]e

您可以从
\u not-in-in转到₀_
\u不发生在₁_如下所示:

+-inj:∀ {E₁ E₂ E₃ E₄} -> E₁ + E₂ ≡ E₃ + E₄ -> E₁ ≡ E₃ ×E₂ ≡ E₄ 
+-inj refl=refl,refl
≈-inj:∀ {E₁ E₂ E₃ E₄} -> E₁ ≈ E₂ ≡ E₃ ≈ E₄ -> E₁ ≡ E₃ ×E₂ ≡ E₄ 
≈-inj refl=refl,refl
coe:∀ {ts}{v:变量t}→ (E:Expr s)→ v不出现在₀ E→ v不出现在₁ E
coe{t}{v}(Var w)q{e}重写q{e}=refl
科(