【问题标题】:Equality of records in AgdaAgda 中的记录平等
【发布时间】:2016-01-07 03:31:13
【问题描述】:

似乎为了证明一个记录类型的两个项目是等价的,我需要编写一个帮助程序来获取组件明智的证明并应用它们。 一个例子:

postulate P : ℕ → Set

record Silly : Set (ℓsuc ℓ₀) where
 constructor _#_#_
 field
  n : ℕ
  pn : P n
  f : Set → ℕ

open Silly

SillyEq : ∀ s t → n s ≡ n t → pn s ≅ pn t → f s ≡ f t → s ≡ t
SillyEq (n # pn # f) (.n # .pn # .f) ≡-refl ≅-refl ≡-refl = ≡-refl

我觉得SillyEq 应该以某种方式提供给我,我不需要自己编写它——或者我弄错了。

此外,如果不声明构造函数并对其进行模式匹配,我无法证明 SillyEq

感谢您的帮助!

【问题讨论】:

    标签: record equality agda


    【解决方案1】:

    拥有

    SillyEq' : ∀ {n₁ n₂ pn₁ pn₂ f₁ f₂}
             → n₁ ≡ n₂ → pn₁ ≅ pn₂ → f₁ ≡ f₂ → (n₁ # pn₁ # f₁) ≡ (n₂ # pn₂ # f₂)
    

    你可以证明SillyEq

    SillyEq : ∀ s t → n s ≡ n t → pn s ≅ pn t → f s ≡ f t → s ≡ t
    SillyEq _ _ = SillyEq'
    

    由于Silly 的 η 规则。因此,如果你有一个cong 的通用版本,那么你可以证明SillyEq 为(注意到处都是异构相等)

    SillyEq : ∀ s t → n s ≅ n t → pn s ≅ pn t → f s ≅ f t → s ≅ t
    SillyEq _ _ = gcong 3 _#_#_
    

    我不知道gcong 是否可以通过反射轻松表达,但我想它可以使用通常的arity-generic 编程东西(如here)来编写,但解决方案不会很短。

    这是一个临时证明:

    cong₃ : ∀ {α β γ δ} {A : Set α} {B : A -> Set β} {C : ∀ {x} -> B x -> Set γ}
              {D : ∀ {x} {y : B x} -> C y -> Set δ} {x y v w s t}
          -> (f : ∀ x -> (y : B x) -> (z : C y) -> D z)
          -> x ≅ y -> v ≅ w -> s ≅ t -> f x v s ≅ f y w t
    cong₃ f refl refl refl = refl
    
    SillyEq : ∀ s t → n s ≅ n t → pn s ≅ pn t → f s ≅ f t → s ≅ t
    SillyEq _ _ = cong₃ _#_#_
    

    但是,像您的情况一样,命题和异质等式的混合会使一切变得复杂。

    【讨论】:

    • 也许这两种相等形式的混合不是最好的,但是专门使用异构相等的主要缺点是什么?你是说,据你所知,证明记录类型相等性的唯一方法是使用 cong 的变体?
    • @Musa Al-hassy,只使用异构相等是可以的。当xx ≅ y 中的y 具有相同的类型时,_≅_ 的行为类似于_≡_ 并且没有问题,您只需要稍微更明确的类型。但是当x : A iy : A j 时,您将失去在x ≅ y 上使用标准congsubst 和类似内容的能力。我更喜欢定义一个包装器(类似于 this 文件中的 PathOver ,其中包含 indeq : i ≡ jvaleq : x ≅ y 并在其上定义新的 congsubst 东西。
    • @Musa Al-hassy,有些记录在定义上与 all-eq : {x y : ⊤} -> x ≡ yrecord R : Set where field .n : ℕ ; all-eq₂ : {r s : R} -> r ≡ s 相同,但其他记录需要证明。在不知道它们的投影相等的情况下,您怎么知道两个元组相等?或者你想持有什么?
    • "(类似于本文中的 PathOver)" — 忽略了括号。
    • @Musa Al-hassy,example 我正在谈论的内容。尝试在不证明自然数加法是结合的情况下对异质等式做同样的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多