Skip to content
Snippets Groups Projects
Commit 963fa943 authored by Robbert Krebbers's avatar Robbert Krebbers
Browse files

Better error messages for iPvs.

parent 05817be7
No related branches found
No related tags found
No related merge requests found
...@@ -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]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment