Commit 963fa943 authored by Robbert Krebbers's avatar Robbert Krebbers

Better error messages for iPvs.

parent 05817be7
...@@ -45,23 +45,24 @@ Proof. done. Qed. ...@@ -45,23 +45,24 @@ Proof. done. Qed.
Lemma tac_pvs_intro Δ E Q : Δ Q Δ |={E}=> Q. Lemma tac_pvs_intro Δ E Q : Δ Q Δ |={E}=> Q.
Proof. intros ->. apply pvs_intro. Qed. Proof. intros ->. apply pvs_intro. Qed.
Lemma tac_pvs_elim Δ Δ' E1 E2 E3 i p P Q : Lemma tac_pvs_elim Δ Δ' E1 E2 E3 i p P' P Q :
envs_lookup i Δ = Some (p, |={E1,E2}=> P)%I envs_lookup i Δ = Some (p, P') P' = (|={E1,E2}=> P)%I
envs_replace i p false (Esnoc Enil i P) Δ = Some Δ' envs_replace i p false (Esnoc Enil i P) Δ = Some Δ'
E2 E1 E3 E2 E1 E3
Δ' (|={E2,E3}=> Q) Δ |={E1,E3}=> Q. Δ' (|={E2,E3}=> Q) Δ |={E1,E3}=> Q.
Proof. Proof.
intros ??? HQ. rewrite envs_replace_sound //; simpl. destruct p. intros ? -> ?? HQ. rewrite envs_replace_sound //; simpl. destruct p.
- by rewrite always_elim right_id pvs_frame_r wand_elim_r HQ pvs_trans. - by rewrite always_elim right_id pvs_frame_r wand_elim_r HQ pvs_trans.
- by rewrite right_id pvs_frame_r wand_elim_r HQ pvs_trans. - by rewrite right_id pvs_frame_r wand_elim_r HQ pvs_trans.
Qed. Qed.
Lemma tac_pvs_elim_fsa {A} (fsa : FSA Λ Σ A) fsaV Δ Δ' E i p P Q Φ : Lemma tac_pvs_elim_fsa {A} (fsa : FSA Λ Σ A) fsaV Δ Δ' E i p P' P Q Φ :
envs_lookup i Δ = Some (p, |={E}=> P)%I FSASplit Q E fsa fsaV Φ envs_lookup i Δ = Some (p, P') P' = (|={E}=> P)%I
FSASplit Q E fsa fsaV Φ
envs_replace i p false (Esnoc Enil i P) Δ = Some Δ' envs_replace i p false (Esnoc Enil i P) Δ = Some Δ'
Δ' fsa E Φ Δ Q. Δ' fsa E Φ Δ Q.
Proof. Proof.
intros ???. rewrite -(fsa_split Q) -fsa_pvs_fsa. intros ? -> ??. rewrite -(fsa_split Q) -fsa_pvs_fsa.
eapply tac_pvs_elim; set_solver. eapply tac_pvs_elim; set_solver.
Qed. Qed.
...@@ -105,13 +106,17 @@ Tactic Notation "iPvsIntro" := apply tac_pvs_intro. ...@@ -105,13 +106,17 @@ Tactic Notation "iPvsIntro" := apply tac_pvs_intro.
Tactic Notation "iPvsCore" constr(H) := Tactic Notation "iPvsCore" constr(H) :=
match goal with match goal with
| |- _ |={_,_}=> _ => | |- _ |={_,_}=> _ =>
eapply tac_pvs_elim with _ _ H _ _; eapply tac_pvs_elim with _ _ H _ _ _;
[env_cbv; reflexivity || fail "iPvs:" H "not found" [env_cbv; reflexivity || fail "iPvs:" H "not found"
|let P := match goal with |- ?P = _ => P end in
reflexivity || fail "iPvs:" H ":" P "not a pvs with the right mask"
|env_cbv; reflexivity |env_cbv; reflexivity
|try (rewrite (idemp_L ()); reflexivity)|] |try (rewrite (idemp_L ()); reflexivity)|]
| |- _ => | |- _ =>
eapply tac_pvs_elim_fsa with _ _ _ _ H _ _ _; eapply tac_pvs_elim_fsa with _ _ _ _ H _ _ _ _;
[env_cbv; reflexivity || fail "iPvs:" H "not found" [env_cbv; reflexivity || fail "iPvs:" H "not found"
|let P := match goal with |- ?P = _ => P end in
reflexivity || fail "iPvs:" H ":" P "not a pvs with the right mask"
|let P := match goal with |- FSASplit ?P _ _ _ _ => P end in |let P := match goal with |- FSASplit ?P _ _ _ _ => P end in
apply _ || fail "iPvs:" P "not a pvs" apply _ || fail "iPvs:" P "not a pvs"
|env_cbv; reflexivity|simpl] |env_cbv; reflexivity|simpl]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment