Я застрял на следующем. У меня есть вывод перехода исчисления пи, который имеет место в некотором контексте Γ, а также доказательство того, что Γ ≡ Γ′. Я хотел бы принудить вывод к переходу в Γ', используя subst
. Детали настройки в основном неважны, как обычно.
module Temp where
open import Data.Nat as Nat using (_+_) renaming (ℕ to Cxt)
open import Function
open import Relation.Binary.PropositionalEquality
data _⟿ (Γ : Cxt) : Set where
bound : Γ ⟿
nonBound : Γ ⟿
target : ∀ {Γ} → Γ ⟿ → Cxt
target {Γ} bound = Γ + 1
target {Γ} nonBound = Γ
data Proc (Γ : Cxt) : Set where
data _—[_]→_ {Γ} : Proc Γ → (a : Γ ⟿) → Proc (target a) → Set where
-- Use a proof that Γ ≡ Γ′ to coerce a transition in Γ to one in Γ'.
coerce : ∀ {Γ Γ′} {P : Proc Γ} {a R} → P —[ a ]→ R → (q : Γ ≡ Γ′) →
subst Proc q P —[ subst _⟿ q a ]→ subst (Proc ∘ target) {!!} R
coerce E refl = {!!}
Достаточно легко указать как источник P перехода, так и действие a, которое отображается как метка перехода. Проблема заключается в цели R перехода, тип которой зависит от a. В принудительном переходе я использую subst
, чтобы перевести a из Γ ⟿ в Γ' ⟿. Наивно, я хотел бы также использовать subst
, чтобы изменить тип R с Proc (target a)
на Proc (target (subst _⟿ q a)
, показав, что индексы Proc равны. Однако по своей природе subst _⟿ q a
имеет тип, отличный от a, поэтому я не знаю, как это сделать. Может быть, мне нужно снова использовать доказательство Γ ≡ Γ′ или каким-то образом «отменить» внутреннее subst
, чтобы унифицировать типы.
Разумно ли то, что я пытаюсь сделать? Если да, то как принудить R с учетом неоднородности?
subst'
не нужно принимать P в качестве параметра.) - person Roly   schedule 21.08.2014subst'
? Очевидно, вы можете параметризовать Proc. Или в стандартной библиотеке уже что-то есть? - person Roly   schedule 21.08.2014subst
есть проблема с изменением типаa
сΓ ⟿
наΓ′ ⟿
. В библиотеке может быть что-то, но мне ничего не известно. Я напишу ответ позже. - person Vitus   schedule 21.08.2014subst'
... - person Roly   schedule 21.08.2014