如何在 Agda 中定义观察平等

How to define observational equality in Agda

假设我有一个渲染函数:

rasterize : ℕ → ℕ → Tile → List (List Color

我需要证明这个说法:

如果rasterize w h t1 = rasterize w h t2那么t1 ≡ t2

换句话说,如果给定相同的宽度和高度,t1 和 t2 呈现相同的值,则它们相等。

我不知道在 agda 中怎么说,我想到了以下内容:

obs-eq : ∀ (t₁ t₂ : Tile) (w h : ℕ) →
  rasterize w h t₁ ≡ rasterize w h t₂ → t₁ ≡ t₂

但我怀疑这不是我的意思,通过谷歌搜索我认为我需要定义一个运算符来比较渲染值?还涉及某种西格玛类型?

你的括号是错误的:当你写

obs-eq : 
  ∀ (t₁ t₂ : Tile) (w h : ℕ) →
  rasterize w h t₁ ≡ rasterize w h t₂ → 
  t₁ ≡ t₂

这意味着如果我给你任意两个图块和任意两个维度,使得这些图块光栅化为同一图片在这些维度,那么你可以证明它们是等于。

考虑一下如果我为你选择 w = 0h = 0 会发生什么...

但你想说的是,如果我给你任何两个图块,并证明对于任何两个维度,它们光栅化为同一张图片,然后你可以证明瓷砖是平等的:

obs-eq : 
  ∀ (t₁ t₂ : Tile) →
  (∀ w h → rasterize w h t₁ ≡ rasterize w h t₂) → 
  t₁ ≡ t₂