@@ -658,11 +658,11 @@ elab "wp_store" : tactic =>
658658 let ⟨_, name, vid, _, hyps'', pfSplit⟩ ←
659659 lookupPointsTo `wp_store mvar hgs hyps' l q(DFrac.own 1 ) q(false )
660660
661- let hyps''' := hyps''.add bi name vid q(false ) q(pointsTo $l (DFrac.own 1 ) (some $v'))
661+ let ⟨_, hyps''', pf'''⟩ := hyps''.add bi name vid q(false ) q(pointsTo $l (DFrac.own 1 ) (some $v'))
662662
663663 let pfCont ← finishHeapOp hyps''' hgs s E K q(hl_val(#())) Φ
664664
665- mvar.assign q(tac_wp_store (ι := $hgs) (Δ' := $eΔ') $pfLater $pfSplit $pfCont)
665+ mvar.assign q(tac_wp_store (ι := $hgs) (Δ' := $eΔ') $pfLater $pfSplit <| $(pf''').mp.trans $pfCont)
666666
667667elab "wp_xchg" : tactic =>
668668 runTacticHeapWp `wp_xchg fun mvar {bi, s, E, e, Φ, hgs, eΔ', hyps', pfLater, ..} => do
@@ -676,11 +676,11 @@ elab "wp_xchg" : tactic =>
676676 let ⟨v, name, vid, _, hyps'', pfSplit⟩ ←
677677 lookupPointsTo `wp_xchg mvar hgs hyps' l q(DFrac.own 1 ) q(false )
678678
679- let hyps''' := hyps''.add bi name vid q(false ) q(pointsTo $l (DFrac.own 1 ) (some $v'))
679+ let ⟨_, hyps''', pf'''⟩ := hyps''.add bi name vid q(false ) q(pointsTo $l (DFrac.own 1 ) (some $v'))
680680
681681 let pfCont ← finishHeapOp hyps''' hgs s E K v Φ
682682
683- mvar.assign q(tac_wp_xchg (ι := $hgs) (Δ' := $eΔ') $pfLater $pfSplit $pfCont)
683+ mvar.assign q(tac_wp_xchg (ι := $hgs) (Δ' := $eΔ') $pfLater $pfSplit <| $(pf''').mp.trans $pfCont)
684684
685685elab "wp_faa" : tactic =>
686686 runTacticHeapWp `wp_faa fun mvar {bi, s, E, e, Φ, hgs, eΔ', hyps', pfLater, ..} => do
@@ -703,12 +703,12 @@ elab "wp_faa" : tactic =>
703703 have pfSplit : Q($eΔ' ⊣⊢ $eΔ'' ∗
704704 pointsTo $l (DFrac.own 1 ) (some (Val.lit (BaseLit.int $z1)))) := pfSplit
705705
706- let hyps''' := hyps''.add bi name vid q(false )
706+ let ⟨_, hyps''', pf'''⟩ := hyps''.add bi name vid q(false )
707707 q(pointsTo $l (DFrac.own 1 ) (some (Val.lit (BaseLit.int ($z1 + $z2)))))
708708
709709 let pfCont ← finishHeapOp hyps''' hgs s E K q(Val.lit (BaseLit.int $z1)) Φ
710710
711- mvar.assign q(tac_wp_faa (ι := $hgs) (Δ' := $eΔ') $pfLater $pfSplit $pfCont)
711+ mvar.assign q(tac_wp_faa (ι := $hgs) (Δ' := $eΔ') $pfLater $pfSplit <| $(pf''').mp.trans $pfCont)
712712
713713elab "wp_cmpxchg_suc" : tactic =>
714714 runTacticHeapWp `wp_cmpxchg_suc fun mvar {bi, s, E, e, Φ, hgs, eΔ', hyps', pfLater, ..} => do
@@ -729,14 +729,14 @@ elab "wp_cmpxchg_suc" : tactic =>
729729 -- check equality, don't throw hard error to match Rocq behavior
730730 let pfEq ← iSolveSidecondition q($v = $v1) (failOnUnsolved := false )
731731
732- let hyps''' := hyps''.add bi name vid q(false )
732+ let ⟨_, hyps''', pf'''⟩ := hyps''.add bi name vid q(false )
733733 q(pointsTo $l (DFrac.own 1 ) (some $v2))
734734
735735 let pfCont ← finishHeapOp hyps''' hgs s E K
736736 q(Val.pair $v (Val.lit (BaseLit.bool true ))) Φ
737737
738738 mvar.assign
739- q(tac_wp_cmpXchg_suc (ι := $hgs) (Δ' := $eΔ') $pfLater $pfSplit $pfEq $pfSafe $pfCont)
739+ q(tac_wp_cmpXchg_suc (ι := $hgs) (Δ' := $eΔ') $pfLater $pfSplit $pfEq $pfSafe <| $(pf''').mp.trans $pfCont)
740740
741741elab "wp_cmpxchg_fail" : tactic =>
742742 runTacticHeapWp `wp_cmpxchg_fail fun mvar {s, E, e, Φ, hgs, eΔ', hyps', pfLater, ..} => do
@@ -779,7 +779,7 @@ elab "wp_cmpxchg" " with" colGt ppSpace h1:binderIdent colGt ppSpace h2:binderId
779779 let ⟨v, name, vid, eΔ'', hyps'', pfSplit⟩ ←
780780 lookupPointsTo `wp_cmpxchg mvar hgs hyps' l q(DFrac.own 1 ) q(false )
781781
782- let hypsSuc := hyps''.add bi name vid q(false )
782+ let ⟨_, hypsSuc, pfEq⟩ := hyps''.add bi name vid q(false )
783783 q(pointsTo $l (DFrac.own 1 ) (some $v2))
784784
785785 -- check safety, don't throw hard error to match Rocq behavior
@@ -793,7 +793,7 @@ elab "wp_cmpxchg" " with" colGt ppSpace h1:binderIdent colGt ppSpace h2:binderId
793793 Qq.withLocalDeclDQ sucName q($v = $v1) fun _h => do
794794 let pf ← finishHeapOp hypsSuc hgs s E K
795795 q(Val.pair $v (Val.lit (BaseLit.bool true ))) Φ
796- mkLambdaFVars #[_h] pf
796+ mkLambdaFVars #[_h] q($(pfEq).mp.trans $pf)
797797
798798 let (failName, _) ← getFreshName h2
799799 let pfFail : Q($v ≠ $v1 → $eΔ' ⊢
@@ -843,11 +843,11 @@ elab "wp_alloc" colGt ppSpace loc:binderIdent " with" colGt ppSpace hyp:binderId
843843 Wp.wp (self := wp.def (ι := @HeapLang $hlc $GF $hgs)) $s $E
844844 (ProgramLogic.fill $K (Exp.ofVal (Expr := Exp) (Val.lit (BaseLit.loc l)))) $Φ) ←
845845 Qq.withLocalDeclDQ locName q(Loc) fun l => do
846- let ⟨_, hyps''⟩ ← hyps'.addWithInfo bi hyp q(false )
846+ let ⟨_, _, hyps'', pfEq ⟩ ← hyps'.addWithInfo bi hyp q(false )
847847 q(pointsTo $l (DFrac.own 1 ) (some $v))
848848
849849 let pf ← finishHeapOp hyps'' hgs s E K q(Val.lit (BaseLit.loc $l)) Φ
850- mkLambdaFVars #[l] pf
850+ mkLambdaFVars #[l] q($(pfEq).mp.trans $pf)
851851
852852 mvar.assign q(tac_wp_alloc (ι := $hgs) (Δ' := $eΔ') $pfLater $pfCont)
853853
0 commit comments