All proofs
Project-declaredLean 4.32.1 · null

Fupd mask frame acc

Iris.fupd_mask_frame_acc

Plain-language statement

A variant of [fupd_mask_frame] that works well for accessors: Tailored to eliminate updates of the form [|={E1,E1∖E2}=> Q] and provides a way to transform the closing view shift instead of letting you prove the same side-conditions twice.

Exact Lean statement

@[rocq_alias fupd_mask_frame_acc]
theorem fupd_mask_frame_acc {E E' E1 E2 : CoPset} {P Q : PROP}:
    E1 ⊆ E → (|={E1,E1 \ E2}=> Q) ⊢
    (Q -∗ |={E \ E2,E'}=> (∀ R, (|={E1 \ E2,E1}=> R) -∗ |={E \ E2,E}=> R) -∗  P) -∗
    (|={E,E'}=> P)

Formal artifact

Lean source

Canonical source
Full Lean sourceLean 4
@[rocq_alias fupd_mask_frame_acc]theorem fupd_mask_frame_acc {E E' E1 E2 : CoPset} {P Q : PROP}:    E1  E  (|={E1,E1 \ E2}=> Q)     (Q -∗ |={E \ E2,E'}=> ( R, (|={E1 \ E2,E1}=> R) -∗ |={E \ E2,E}=> R) -∗  P) -    (|={E,E'}=> P) := λ hE => by  have hmask : E \ E2  (E1 \ E2) ∪ (E \ E1) := by    intro x hx; rw [mem_diff] at hx    by_cases hx1 : x  E1    · exact mem_union.2 <| .inl <| mem_diff.2 hx1, hx.2    · exact mem_union.2 <| .inr <| mem_diff.2 hx.1, hx1  have hdisj : (E1 \ E2) ## (E \ E1) := disjoint_subset_left diff_subset_left disjoint_diff_right  refine wand_intro <| frame_right.trans <| (BIFUpdate.mono wand_elim_right).trans ?_  refine (BIFUpdate.mono ?_).trans <| fupd_mask_frame hE  refine sep_emp.2.trans <| (sep_mono_right <| fupd_mask_intro_subseteq hmask).trans ?_  refine fupd_frame_left.trans <| (BIFUpdate.mono frame_right).trans <| fupd_elim ?_  refine BIFUpdate.mono <| sep_symm.trans ?_  refine (sep_mono ?_ .rfl).trans wand_elim_right  refine forall_intro λ R => wand_intro <| frame_right.trans <| fupd_elim ?_  exact emp_sep.1.trans <| (fupd_mask_frame_right hdisj).trans <| by simp [subset_union_diff hE]
Project
Iris-Lean
License
Apache-2.0
Commit
37f53e0ac065
Source
Iris/Iris/BI/Updates.lean:431-449

Reuse this declaration

Bring the exact result into your workflow

The import identifies the source module. Your project still needs the pinned package dependency shown on this page.

What this badge means

This completion status comes from the project or community source. It has not yet been represented here as an independent rebuild and axiom audit.

Continue in this project

Related declarations

Project-declaredLean 4.32.1

Co Pset Raw eq

CoPset.coPsetRaw_eq

Plain-language statement

Two CoPsetRaw trees are equal if they have the same membership function and both are well-formed.

separation logicprogram logicsemantics

Source project: Iris-Lean

Person-level attribution pending.

View proof record
Project-declaredLean 4.32.1

Inj on of nodup map

FromMathlib.inj_on_of_nodup_map

Plain-language statement

NB. Copied from Mathlib

separation logicprogram logicsemantics

Source project: Iris-Lean

Person-level attribution pending.

View proof record
Project-declaredLean 4.32.1

Big Op L hom weak

Iris.Algebra.BigOpL.bigOpL_hom_weak

Plain-language statement

Weak monoid homomorphisms distribute over non-empty big ops.

separation logicprogram logicsemantics

Source project: Iris-Lean

Person-level attribution pending.

View proof record