Commit b68e76c6 authored by Léon Gondelman's avatar Léon Gondelman
Browse files

fix naive_vcgen

parent c36dda2a
......@@ -13,7 +13,7 @@ Section vcg.
match a with
| Base Φ => Φ
| Inhale w Φ => (l:loc) v, w = #l l v wp_interp (Φ v)
| Exhale w v Φ => (l:loc), w = #l l v - wp_interp Φ
| Exhale w v Φ => (l:loc), w = #l (l v - wp_interp Φ)
| IsSome mx Φ => v, mx = Some v wp_interp (Φ v)
end%I.
......@@ -33,6 +33,8 @@ Section vcg.
end%I.
Eval simpl in vcg (#21 + #21) (λ v, Base ( v = #42)%I).
Lemma vcg_sound e Φ:
wp_interp (vcg e (λ v, Base (Φ v))) WP e {{v, Φ v}}.
Admitted.
......@@ -50,51 +52,63 @@ Section vcg.
end.
Ltac wp_vcg := eapply tac_vcg_sound; vcg_cbv.
Definition expr1 : expr := #21 + #21.
Definition expr2 (l: loc) : expr := !#l + #21.
Definition incr (l: loc) : expr := #l <- !#l + #1.
Lemma test_vcg_expr1:
(True WP expr1 {{ v, v = #42 }})%I.
Lemma test1: WP #21 + #21 {{ v, v = #42 }}%I.
Proof.
rewrite/ expr1. iIntros.
(* PROOF BY VCG *)
wp_vcg.
iExists #42. eauto.
(*PROOF BY WP *)
iIntros.
(* --- PROOF BY VCG ---*) wp_vcg.
eauto.
(* --- PROOF BY WP --- *)
(* wp_op. *)
Qed.
Lemma test_expr2 (l: loc) :
l #21 - WP (expr2 l) {{ v, l #21 v = #42}}.
Lemma test2 (l: loc) :
l #21 - WP (!#l + #21) {{ v, l #21 v = #42}}.
Proof.
rewrite/ expr2. iIntros "H".
(* PROOF BY VCG *)
wp_vcg.
iExists l, #21. iSplit; first done. iFrame.
iExists l. iIntros "[_ H]". eauto.
(*PROOF BY WP *)
iIntros "H".
(* --- PROOF BY VCG --- *) wp_vcg.
eauto 42 with iFrame.
(* --- PROOF BY WP --- *)
(* wp_load. wp_op. eauto. *)
Qed.
(* Variable (l': loc) (n': Z). *)
(* Eval simpl in
(vcg (#l' <- ! #l' + #1) (λ _ : val, Base (l' ↦ #(n' + 1))))%I. *)
Lemma test_incr (l: loc) (n: Z) :
l #n - WP (incr l) {{ _, l #(n + 1) }}.
Lemma test3 (l: loc) (n: Z) :
l #n - WP (#l <- !#l + #1) {{ _, l #(n + 1) }}.
Proof.
rewrite/ incr. iIntros "H".
(* PROOF BY VCG *)
wp_vcg.
iExists l, #n. rewrite/ bin_op_eval /=; iSplit; first done; iFrame.
iExists l; iIntros "[_ H]".
iExists #(n + 1); iSplit; first done; iFrame.
iExists l, #n; iSplit; first done; iFrame.
iExists l. by iIntros "[_ H]".
iIntros "H".
(* --- PROOF BY VCG --- *) wp_vcg.
eauto 17 with iFrame.
(*PROOF BY WP *)
(* wp_load. wp_op. wp_store. done. *)
Qed.
Lemma test4 (l: loc) (n: Z) :
l #n - WP (!#l + !#l) {{ v, v = #(n + n) l #n }}.
Proof.
iIntros "H".
(* --- PROOF BY VCG --- *) wp_vcg.
eauto 20 with iFrame.
(* --- PROOF BY WP --- *)
(* wp_load. wp_load. wp_op. eauto. *)
Qed.
(* Lemma test5 (l: loc) (n: Z) : *)
(* l ↦ #n -∗ WP (!#l + !#l + !#l + !#l + !#l + !#l) *)
(* {{ v, ⌜v = #(n + n + n + n + n + n)⌝ ∧ l ↦ #n }}. *)
(* Proof. *)
(* iIntros "H". *)
(* (* --- PROOF BY VCG --- *) wp_vcg. *)
(* eauto 54 with iFrame. *)
(* (* --- PROOF BY WP --- *) *)
(* (* wp_load. do 5 (wp_load; wp_op). eauto. *) *)
(* Qed. *)
(* Variable (l: loc) (n: Z) (Φ: val → iProp Σ).
Eval simpl in vcg (!#l + !#l) (λ v : val, Base (Φ v))%I.
Eval simpl in wp_interp (vcg (!#l + !#l) (λ v : val, Base (Φ v))%I).
Eval simpl in
(vcg (#l <- ! #l + #1) (λ _ : val, Base (l ↦ #(n + 1))))%I. *)
End vcg.
\ No newline at end of file
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