All proofs
Project-declaredLean 4.32.1 · null

Erased Step pure Steps

Iris.ProgramLogic.Language.erasedStep_pureSteps

Plain-language statement

Let t₂ be a thread pool such that t₁ under state σ₁ makes a (single) step to threadpool t₂ and state σ₂. Let thread pools t₁ and t₃ be such that each thread in t₁ makes (zero or more) pure steps to the corresponding thread in t₃. In this situation, either the step from t₁ to t₂ corresponds to one of the pure steps between t₁ and `t...

Exact Lean statement

theorem erasedStep_pureSteps {t₁ t₂ t₃ : List Expr} {σ₁ σ₂ : State} (h1 : (t₁, σ₁) -·->ₜₚ (t₂, σ₂))
    (h2 : t₁ -ᵖ->ₜₚ* t₃) :
    (σ₁ = σ₂ ∧ t₂ -ᵖ->ₜₚ* t₃) ∨
    (∃ i e eₜ e' obs,  t₁[i]? = some e ∧ t₃[i]? = some e ∧ t₂ = t₁.set i e' ++ eₜ ∧
    (e, σ₁) -<obs>-> (e', σ₂, eₜ))

Formal artifact

Lean source

Canonical source
Full Lean sourceLean 4
theorem erasedStep_pureSteps {t₁ t₂ t₃ : List Expr} {σ₁ σ₂ : State} (h1 : (t₁, σ₁) -·->ₜₚ (t₂, σ₂))    (h2 : t₁ -->ₜₚ* t₃) :    (σ₁ = σ₂  t₂ -->ₜₚ* t₃)     ( i e eₜ e' obs,  t₁[i]? = some e  t₃[i]? = some e  t₂ = t₁.set i e' ++ eₜ     (e, σ₁) -<obs>-> (e', σ₂, eₜ)) := by  obtain obs, pstep, ps, ss⟩⟩ := h1  rename_i e e' eₜ  obtain ps₃, e₃, ss₃, rfl, ss_ss₃, ps_ps₃, length_ps, e_e₃ :=    show  ps₃ e₃ ss₃, t₃ = ps₃ ++ e₃ :: ss₃  ss -->ₜₚ* ss₃          ps -->ₜₚ* ps₃  ps.length = ps₃.length  e -->* e₃ by grind  rcases Relation.ReflTransGen.cases_head e_e₃ with (rfl | e', firstPureStep, lastSteps)  · right    exists (ps₃.length), e, eₜ, e', obs    simp [length_ps, pstep]  · left    obtain pRed, uniqStep := firstPureStep    obtain rlf, rfl, rfl, rfl := uniqStep pstep    have : e --> e' := by grind only [PurePrimStep]    simp only [PureSteps, List.append_nil, true_and]    exact Std.List.Forall₂.append ps_ps₃ <| .cons lastSteps ss_ss₃
Project
Iris-Lean
License
Apache-2.0
Commit
37f53e0ac065
Source
Iris/Iris/ProgramLogic/Language.lean:475-494

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