向阿格达证明我们在谈论同一件事

AJRouvoet

我试图证明一个矛盾,但是遇到一个问题,试图向Agda证明所返回的sigma域类型<>-wt-inv与该证明前面所见的sigma是相同的。我希望uniq型证明可以帮助我,但我无法将它们放在一起。

我希望下面代码中的注释能提供足够的上下文。

-- given a type for (f ⟨⟩), we can derive that f is a function type
-- and we can prove that the context yields σ 
⟨⟩-wt-inv : ∀ {n m f τ} {K : Ktx n m} → K ⊢ (f ⟨⟩) ∶ τ → 
            ∃ λ σ → K Δ↝ σ × K ⊢ f ∶ (σ ⇒ τ)
⟨⟩-wt-inv (_⟨_⟩ {τ = σ} K⊢f∶σ⇒τ KΔ↝σ) = σ , (KΔ↝σ , K⊢f∶σ⇒τ)

uniq-type : ∀ {n m} {K : Ktx n m} {t τ τ'} → K ⊢ t ∶ τ → K ⊢ t ∶ τ' → τ ≡ τ'

-- excerpt from the typeof decision procedure
typeof : ∀ {n m} (K : Ktx n m) t → Dec (HasType K t)
typeof (Γ , Δ) (f ⟨⟩)   with typeof (Γ , Δ) f
typeof (Γ , Δ) (f ⟨⟩) | yes (σ ⇒ τ , _)     with (Δ-resolve (Γ , Δ) σ)
typeof (Γ , Δ) (f ⟨⟩) | yes (σ ⇒ τ , f∶φ) | no KΔ↝̸σ = 
  -- I'm trying to derive a contraction based on the fact that we've proven that
  -- K Δ↝̸ σ, but assuming a type for (f ⟨⟩) will yield an instance of K Δ↝ σ' (see ⟨⟩-wt-inv)
  -- the problem is that I don't know how to make agda see that σ' ≡ σ
  -- such that the following typechecks.
  -- (while agda will now complain that the σ in the wt-inv is not the
     same one as used in the KΔ↝̸σ instance, which is sensible)
  -- I think I have to use the uniq-type prove on f somewhere...
  no $ KΔ↝̸σ ∘ proj₁ ∘ proj₂ ⟨⟩-wt-inv ∘ proj₂

任何帮助表示赞赏

AJRouvoet

#agda频道上的Saizan足以将我指向正确的方向:使用该函数subst使用相等证明将σ替换为σ,以证明我必须从KΔ↝获得KΔ↝σ的实例σ':

typeof (Γ , Δ) (f ⟨⟩) | yes (σ ⇒ τ , f∶φ) | no KΔ↝̸σ = 
  no $ KΔ↝̸σ ∘ helper
    where
      helper : (HasType (Γ , Δ) (f ⟨⟩)) → (Γ , Δ) Δ↝ σ
      helper p with (⟨⟩-wt-inv ∘ proj₂) p
      helper p | (σ' , KΔ↝σ' , f∶φ') = subst (λ s → (Γ , Δ) Δ↝ s) σ'≡σ KΔ↝σ' 
        where
          σ'≡σ : σ' ≡ σ
          σ'≡σ = ≡⇒dom $ uniq-type f∶φ' f∶φ 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

延续单子和命令式单子在谈论同一件事吗?

来自分类Dev

我可以在 TypeScript 函数签名中将两个“任何”标记为同一件事吗?

来自分类Dev

尝试在我的JavaScript代码中理解“ this”(一件事有效,另一件事无效)

来自分类Dev

快速排序算法-做同一件事的方法有很多?

来自分类Dev

const和constexpr最终会是同一件事吗?

来自分类Dev

“ var”和“ variant”是同一件事吗?

来自分类Dev

如何在同一件事上显示字符串和变量?

来自分类Dev

使用FROM子句而不是JOIN子句联接表是同一件事吗?

来自分类Dev

同一件事被打印两次-JS数组

来自分类Dev

0.0.0.0:0和*:*代表同一件事吗?

来自分类Dev

android中的任务堆栈和后堆栈是同一件事吗

来自分类Dev

战舰游戏AI猜同一件事

来自分类Dev

使用env和export是同一件事吗?

来自分类Dev

同一件事立即冻结或起作用

来自分类Dev

不同目录中的相同名称是同一件事吗?

来自分类Dev

bootloader和bootmanager是同一件事吗?

来自分类Dev

可以使用ADD和LDUR完成同一件事吗?

来自分类Dev

XFS配额和linux配额是同一件事吗?

来自分类Dev

Windows用户只是一件事

来自分类Dev

制作只做一件事的函数

来自分类Dev

在iPad上显示一件事,在Apple TV上显示另一件事?

来自分类Dev

JLabel将文本从一件事更改为另一件事

来自分类Dev

如何选择一件事,如果条件为假,则选择另一件事

来自分类Dev

为什么javascript返回另一件事,而php又返回另一件事?

来自分类Dev

“哪个”报告一件事,实际命令是另一件事

来自分类Dev

球拍,踏步机,我不懂一件事

来自分类Dev

内容的水平和垂直居中(我不明白一件事)

来自分类Dev

我如何只能从文本文件中读取一件事?

来自分类Dev

当他们似乎做同一件事时,为什么还要在Jest中使用Enzyme?

Related 相关文章

  1. 1

    延续单子和命令式单子在谈论同一件事吗?

  2. 2

    我可以在 TypeScript 函数签名中将两个“任何”标记为同一件事吗?

  3. 3

    尝试在我的JavaScript代码中理解“ this”(一件事有效,另一件事无效)

  4. 4

    快速排序算法-做同一件事的方法有很多?

  5. 5

    const和constexpr最终会是同一件事吗?

  6. 6

    “ var”和“ variant”是同一件事吗?

  7. 7

    如何在同一件事上显示字符串和变量?

  8. 8

    使用FROM子句而不是JOIN子句联接表是同一件事吗?

  9. 9

    同一件事被打印两次-JS数组

  10. 10

    0.0.0.0:0和*:*代表同一件事吗?

  11. 11

    android中的任务堆栈和后堆栈是同一件事吗

  12. 12

    战舰游戏AI猜同一件事

  13. 13

    使用env和export是同一件事吗?

  14. 14

    同一件事立即冻结或起作用

  15. 15

    不同目录中的相同名称是同一件事吗?

  16. 16

    bootloader和bootmanager是同一件事吗?

  17. 17

    可以使用ADD和LDUR完成同一件事吗?

  18. 18

    XFS配额和linux配额是同一件事吗?

  19. 19

    Windows用户只是一件事

  20. 20

    制作只做一件事的函数

  21. 21

    在iPad上显示一件事,在Apple TV上显示另一件事?

  22. 22

    JLabel将文本从一件事更改为另一件事

  23. 23

    如何选择一件事,如果条件为假,则选择另一件事

  24. 24

    为什么javascript返回另一件事,而php又返回另一件事?

  25. 25

    “哪个”报告一件事,实际命令是另一件事

  26. 26

    球拍,踏步机,我不懂一件事

  27. 27

    内容的水平和垂直居中(我不明白一件事)

  28. 28

    我如何只能从文本文件中读取一件事?

  29. 29

    当他们似乎做同一件事时,为什么还要在Jest中使用Enzyme?

热门标签

归档