Library swap_tritra
Load seplog_header.
Require Import Omega.
Require Import frag_list_triple.
Require Import frag_list_entail.
Require Import expr_b_dp.
Require Import Max.
Definition i : var.v := 1.
Definition j : var.v := 2.
Definition x : var.v := 4.
Definition y : var.v := 3.
Definition vx : var.v := 5.
Definition vy : var.v := 6.
Definition swap (x y:var.v) : cmd :=
i <-* var_e x;
j <-* var_e y;
var_e x *<- var_e j;
var_e y *<- var_e i.
Definition swap_precond (x y:var.v) (vx vy : nat) : assrt :=
(true_b, star (singl (var_e x) (var_e vx)) (singl (var_e y) (var_e vy))).
Definition swap_postcond (x y:var.v) (vx vy : nat) : assrt :=
(true_b, star (singl (var_e x) (var_e vy)) (singl (var_e y) (var_e vx))).
Lemma swap_verif':
{{assrt_interp (swap_precond x y vx vy)}}
swap x y
{{Assrt_interp ((swap_postcond x y vx vy)::nil)}}.