如何在 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 = 0
和 h = 0
会发生什么...
但你想说的是,如果我给你任何两个图块,并证明对于任何两个维度,它们光栅化为同一张图片,然后你可以证明瓷砖是平等的:
obs-eq :
∀ (t₁ t₂ : Tile) →
(∀ w h → rasterize w h t₁ ≡ rasterize w h t₂) →
t₁ ≡ t₂
假设我有一个渲染函数:
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 = 0
和 h = 0
会发生什么...
但你想说的是,如果我给你任何两个图块,并证明对于任何两个维度,它们光栅化为同一张图片,然后你可以证明瓷砖是平等的:
obs-eq :
∀ (t₁ t₂ : Tile) →
(∀ w h → rasterize w h t₁ ≡ rasterize w h t₂) →
t₁ ≡ t₂