我有以下定义:
ren-refl′ : ∀ {Γ i t} (ts′ : List Ty) → (e : Tm {i} (Γ <>< ts′) t) → ren (keep* ts′ reflᵣ) e ≡ e
ren-refl′ {Γ} ts′ (var v) rewrite keep*-refl {Γ} ts′ | ren-var-refl v = refl
ren-refl′ {Γ} ts′ (con e) rewrite keep*-refl {Γ} ts′ | ren-con-refl e = refl
我想通过keep*-refl {Γ} ts′
来重写,因为我们可以在e
参数的模式匹配之前做到这一点(并统一地做)。
我最接近的是匹配lambda的模式:
ren-refl′ {Γ} ts′ rewrite keep*-refl {Γ} ts′ = λ
{ (var v) → cong var (ren-var-refl v)
; (con e) → cong con (ren-con-refl e)
}
但是,我不喜欢它,因为它要求我做一些cong
改组,我不需要用直线rewrite
;我无法在lambda中做rewrite
。
答案 0 :(得分:1)
来自case_of_
的{{1}}和case_return_of_
通常在lambdas内工作正常,e。 G:
Function
答案 1 :(得分:1)
您可以尝试我在agda-prelude
中创建的Tactic.Reflection.Reright
(原文如此)。我想你可以用cong *
替换reright
s。警告:我已经坚持了几个月,不再使用它了。