LogRel.Checkers.CtxAccessCorrectness: correctness of the context accessing function.
From Coq Require Import Nat Lia Arith.
From Equations Require Import Equations.
From LogRel Require Import Utils Syntax.All.
From LogRel.Checkers Require Import Functions.
From PartialFun Require Import Monad PartialFun MonadExn.
Set Universe Polymorphism.
From Equations Require Import Equations.
From LogRel Require Import Utils Syntax.All.
From LogRel.Checkers Require Import Functions.
From PartialFun Require Import Monad PartialFun MonadExn.
Set Universe Polymorphism.
Section CtxAccessCorrect.
Lemma ctx_access_sound Γ n d :
ctx_access Γ n = success d ->
in_ctx Γ n d.
Proof.
funelim (ctx_access Γ n).
all: simp ctx_access ; cbn.
- inversion 1.
- inversion 1.
now constructor.
- destruct (ctx_access Γ n') ; cbn.
all: inversion 1 ; subst.
constructor.
now apply H.
Qed.
Lemma ctx_access_complete Γ n d :
in_ctx Γ n d ->
ctx_access Γ n = success d.
Proof.
induction 1.
all: simp ctx_access ; cbn.
- reflexivity.
- now rewrite IHin_ctx.
Qed.
Corollary ctx_access_correct Γ n d :
in_ctx Γ n d <~> (ctx_access Γ n = success d).
Proof.
split.
- eapply ctx_access_complete.
- eapply ctx_access_sound.
Qed.
End CtxAccessCorrect.