Coq 重写不匹配的单个分支';t依赖于匹配值

Coq 重写不匹配的单个分支';t依赖于匹配值,coq,Coq,我想展示以下几点: match H in (_ = y) return y with | eq_refl => exist (fun n' : nat => n' < n) x0 l end = exist (fun n' : nat => n' < n) x0 l 在(=y)中匹配H,返回y |eq_refl=>exist(乐趣n):nat=>n'n'

我想展示以下几点:

match H in (_ = y) return y with
  | eq_refl => exist (fun n' : nat => n' < n) x0 l
  end = exist (fun n' : nat => n' < n) x0 l
在(=y)中匹配H,返回y
|eq_refl=>exist(乐趣n):nat=>n'n'
在我的背景下:

H : ltn n = ltn n
n : nat
x0 : nat
l : x0 < n
H:ltn n=ltn
n:纳特
x0:nat
l:x0
在哪里

Definition ltn (n : nat) : Type := {n' | n' < n}.
定义ltn(n:nat):类型:={n'|n' 我无法在
H
上进行析构函数,因为结果项的类型可能不正确,但很明显等式成立,因为match中唯一可能的分支不依赖于匹配的内容。

问题(如您所说)是,一旦H是一个没有“匹配”和等式定义的变量,Coq就无法析构函数(您正在使用的)基于规范化和字符串验证,您将无法执行此操作。无论如何,如果没有公理,您无法破坏相等实例,因为您暗示所有相等都是相等的(定义相等)。将所有相等都视为“相等”的含义假设您的核心是。为了与其他类型理论(如同伦类型理论)兼容,Coq不允许您在没有as axiom的情况下提及UIP。UIP axiom和K axiom非常相关。您可以从导出公理

定理精确公式:forall(n'nx0:nat)(l:x0exist(乐趣n):nat=>n'n'
不幸的是,我认为你可能需要身份证明的唯一性(UIP)来实现这一点。或者你可以利用这一事实,即利害关系中的命题是可判定的,从而享受证明无关性。参见例如,或者。@ErikMD它真的是可判定的吗?它是比较两种类型,而不是两种
nat
s。当我尝试它时(参见此)我最终的目标是所有y:Type,ltn=y\/ltn-y
Theorem exact_eq : forall (n' n x0 : nat) (l : x0 < n) (H : {n' | n' < n} = {n' | n' < n}),
 match H in (_ = y) return y with
  | eq_refl => exist (fun n' : nat => n' < n) x0 l
  end = exist (fun n' : nat => n' < n) x0 l.

intros.
(*UIP_refl : forall (H : x = x), H = erefl x*) 
by set(@UIP_refl _ _ H); subst.
Qed.