Skip to content

Commit 825536d

Browse files
oliversoesermarkusdemedeiros
authored andcommitted
fix: naming and sections
1 parent 2fc5c28 commit 825536d

1 file changed

Lines changed: 92 additions & 110 deletions

File tree

src/Iris/Algebra/Updates.lean

Lines changed: 92 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ def Update [CMRA α] (x y : α) := ∀ n mz,
1616
infixr:50 " ~~> " => Update
1717

1818
section updates
19-
variable [CMRA α]
19+
20+
variable [CMRA α] [CMRA β] (f : α → β) (g : β → α)
2021

2122
-- (* Global Instance cmra_updateP_proper :
2223
-- Proper ((≡) ==> pointwise_relation _ iff ==> iff) (@cmra_updateP SI A).
@@ -26,23 +27,23 @@ variable [CMRA α]
2627
-- Proper ((≡) ==> (≡) ==> iff) (@cmra_update SI A).
2728
-- Proof. Admitted. *)
2829

29-
theorem UpdateP.left_eqv {P : α → Prop} {x y: α} (e: x ≡ y) (u: x ~~>: P): y ~~>: P :=
30+
theorem UpdateP.equiv_left {P : α → Prop} {x y: α} (e: x ≡ y) (u: x ~~>: P): y ~~>: P :=
3031
fun n mz v => u n mz (CMRA.validN_ne (CMRA.opM_left_dist mz e.symm.dist) v)
3132

32-
theorem Update.left_eqv {x y z: α} (e: x ≡ y) (u: x ~~> z): y ~~> z :=
33+
theorem Update.equiv_left {x y z: α} (e: x ≡ y) (u: x ~~> z): y ~~> z :=
3334
fun n mz v => u n mz (CMRA.validN_ne (CMRA.opM_left_dist mz e.symm.dist) v)
3435

35-
theorem Update.right_eqv {x y z: α} (e: y ≡ z) (u: x ~~> y): x ~~> z :=
36+
theorem Update.equiv_right {x y z: α} (e: y ≡ z) (u: x ~~> y): x ~~> z :=
3637
fun n mz v => CMRA.validN_ne (CMRA.opM_left_dist mz e.dist) (u n mz v)
3738

3839
instance [CMRA α] : Trans OFE.Equiv UpdateP UpdateP (α := α) where
39-
trans e u := UpdateP.left_eqv e.symm u
40+
trans e u := UpdateP.equiv_left e.symm u
4041

4142
instance [CMRA α] : Trans OFE.Equiv Update Update (α := α) where
42-
trans e u := Update.left_eqv (id (OFE.Equiv.symm e)) u
43+
trans e u := Update.equiv_left (id (OFE.Equiv.symm e)) u
4344

4445
instance [CMRA α] : Trans Update OFE.Equiv Update (α := α) where
45-
trans u e := Update.right_eqv e u
46+
trans u e := Update.equiv_right e u
4647

4748

4849
theorem Update.of_updateP {x y: α} (h: x ~~>: (y = ·)): x ~~> y :=
@@ -145,14 +146,14 @@ theorem Update.op_l (x y : α) : x • y ~~> x := fun _ _ => CMRA.validN_op_opM_
145146
theorem Update.op_r (x y : α) : x • y ~~> y := fun _ _ => CMRA.validN_op_opM_right
146147

147148
theorem Update.included (x y : α) : x ≼ y → y ~~> x :=
148-
fun ⟨z, ez⟩ => Update.left_eqv ez.symm (Update.op_l x z)
149+
fun ⟨z, ez⟩ => Update.equiv_left ez.symm (Update.op_l x z)
149150

150151
theorem Update.valid0 (x y : α) : (✓{0} x → x ~~> y) → x ~~> y :=
151152
fun h n mz v => h (CMRA.valid0_of_validN (CMRA.validN_opM v)) n mz v
152153

153154
-- Frame preserving updates for total and discete CMRAs
154155

155-
theorem total_updateP [CMRA.IsTotal α] (x : α) (P : α → Prop)
156+
theorem UpdateP.total [CMRA.IsTotal α] (x : α) (P : α → Prop)
156157
: x ~~>: P ↔ ∀ (n : Nat) (z : α), ✓{n} (x • z) → ∃ y, P y ∧ ✓{n} (y • z) where
157158
mp uxp := fun n z v => uxp n (some z) v
158159
mpr h := fun n mz v =>
@@ -162,7 +163,7 @@ theorem total_updateP [CMRA.IsTotal α] (x : α) (P : α → Prop)
162163
⟨y, py, CMRA.validN_op_opM_left vy⟩
163164
| .some z => h n z v
164165

165-
theorem total_update [CMRA.IsTotal α] (x y : α)
166+
theorem Update.total [CMRA.IsTotal α] (x y : α)
166167
: x ~~> y ↔ ∀ (n : Nat) (z : α), ✓{n} (x • z) → ✓{n} (y • z) where
167168
mp uxy := fun n z v => uxy n (some z) v
168169
mpr h := fun n mz v =>
@@ -172,7 +173,7 @@ theorem total_update [CMRA.IsTotal α] (x y : α)
172173
| .some z => h n z v
173174

174175

175-
theorem discrete_updateP [CMRA.Discrete α] (x : α) (P : α → Prop)
176+
theorem UpdateP.discrete [CMRA.Discrete α] (x : α) (P : α → Prop)
176177
: x ~~>: P ↔ ∀ (mz : Option α), ✓ (x •? mz) → ∃ y, P y ∧ ✓ (y •? mz) where
177178
mp uxp := fun mz v =>
178179
let ⟨y, py, vy⟩ := uxp 0 mz (CMRA.Valid.validN v)
@@ -181,32 +182,30 @@ theorem discrete_updateP [CMRA.Discrete α] (x : α) (P : α → Prop)
181182
let ⟨y, py, vy⟩ := h mz ((CMRA.valid_iff_validN' n).mpr v)
182183
⟨y, py, CMRA.Valid.validN vy⟩
183184

184-
theorem discrete_update [CMRA.Discrete α] (x y : α)
185+
theorem Update.discrete [CMRA.Discrete α] (x y : α)
185186
: x ~~> y ↔ ∀ (mz : Option α), ✓ (x •? mz) → ✓ (y •? mz) where
186187
mp uxp := fun mz v => CMRA.discrete_valid $ uxp 0 mz (CMRA.Valid.validN v)
187188
mpr h := fun n mz v => CMRA.Valid.validN $ h mz ((CMRA.valid_iff_validN' n).mpr v)
188189

189-
theorem discrete_total_updateP [CMRA.Discrete α] [CMRA.IsTotal α] (x : α) (P : α → Prop)
190+
theorem UpdateP.discrete_total [CMRA.Discrete α] [CMRA.IsTotal α] (x : α) (P : α → Prop)
190191
: x ~~>: P ↔ ∀ (z : α), ✓ (x • z) → ∃ y, P y ∧ ✓ (y • z) where
191192
mp uxp := fun z vz =>
192-
let ⟨y, py, vy⟩ := (total_updateP x P).mp uxp 0 z (CMRA.Valid.validN vz)
193+
let ⟨y, py, vy⟩ := (UpdateP.total x P).mp uxp 0 z (CMRA.Valid.validN vz)
193194
⟨y, py, CMRA.discrete_valid vy⟩
194195
mpr h :=
195196
have this n z (v: ✓{n} x • z): ∃ y, P y ∧ ✓{n} (y • z) :=
196197
let ⟨y, py, vy⟩ := h z ((CMRA.valid_iff_validN' n).mpr v)
197198
⟨y, py, CMRA.Valid.validN vy⟩
198-
(total_updateP x P).mpr this
199+
(UpdateP.total x P).mpr this
199200

200-
theorem discrete_total_update [CMRA.Discrete α] [CMRA.IsTotal α] (x y : α)
201+
theorem Update.discrete_total [CMRA.Discrete α] [CMRA.IsTotal α] (x y : α)
201202
: x ~~> y ↔ ∀ (z : α), ✓ (x • z) → ✓ (y • z) where
202203
mp uxp := fun z vz =>
203-
CMRA.discrete_valid $ (total_update x y).mp uxp 0 z (CMRA.Valid.validN vz)
204+
CMRA.discrete_valid $ (Update.total x y).mp uxp 0 z (CMRA.Valid.validN vz)
204205
mpr h :=
205206
have this n z (v: ✓{n} x • z): ✓{n} (y • z) :=
206207
CMRA.Valid.validN $ h z ((CMRA.valid_iff_validN' n).mpr v)
207-
(total_update x y).mpr this
208-
209-
end updates
208+
(Update.total x y).mpr this
210209

211210
-- (** * Transport *)
212211
-- Section cmra_transport.
@@ -222,101 +221,84 @@ end updates
222221

223222
-- End cmra_transport.
224223

225-
-- Isomorphism
226-
section iso_cmra
227-
variable [CMRA α] [CMRA β] (f : α → β) (g : β → α)
228-
229-
theorem iso_updateP {P : β → Prop} {Q : α → Prop} {y : β}
230-
(gf : ∀ x, g (f x) ≡ x)
231-
(g_op : ∀ y1 y2, g (y1 • y2) ≡ g y1 • g y2)
232-
(g_validN : ∀ n y, ✓{n} (g y) ↔ ✓{n} y)
233-
(uyp: y ~~>: P)
234-
(pq: ∀ y', P y' → Q (g y'))
235-
: g y ~~>: Q :=
236-
fun n mz v =>
237-
have : ✓{n} y •? Option.map f mz :=
238-
match mz with
239-
| .none => (g_validN n _).mp v
240-
| .some z =>
241-
have : g y • z ≡ g (y • f z) :=
242-
(CMRA.op_right_eqv _ (gf z).symm).trans (g_op y (f z)).symm
243-
(g_validN n _).mp (CMRA.validN_ne this.dist v)
244-
have ⟨x, px, vx⟩ := uyp n (mz.map f) this
245-
have : g (x •? Option.map f mz) ≡ g x •? mz :=
246-
match mz with
247-
| .none => OFE.Equiv.rfl
248-
| .some z => (g_op x (f z)).trans (CMRA.op_right_eqv (g x) (gf z))
249-
⟨g x, pq x px, CMRA.validN_ne this.dist ((g_validN n _).mpr vx)⟩
250-
251-
theorem iso_updateP' (P : β → Prop) (y : β)
252-
(gf : ∀ x, g (f x) ≡ x)
253-
(g_op : ∀ y1 y2, g (y1 • y2) ≡ g y1 • g y2)
254-
(g_validN : ∀ n y, ✓{n} (g y) ↔ ✓{n} y)
255-
(uyp: y ~~>: P)
256-
: g y ~~>: λ x ↦ ∃ y, x = g y ∧ P y :=
257-
iso_updateP f g gf g_op g_validN uyp (fun z pz => ⟨z, rfl, pz⟩)
258-
259-
end iso_cmra
260-
261-
section update_lift_cmra
262-
variable [CMRA α] [CMRA β]
263-
264-
theorem Update.lift_updateP (f : β → α) (x : β) (y : β)
265-
(H : ∀ P, x ~~>: P → f x ~~>: λ a' ↦ ∃ b', a' = f b' ∧ P b')
224+
/-! ## Isomorphism -/
225+
theorem UpdateP.iso {P : β → Prop} {Q : α → Prop} {y : β}
226+
(gf : ∀ x, g (f x) ≡ x)
227+
(g_op : ∀ y1 y2, g (y1 • y2) ≡ g y1 • g y2)
228+
(g_validN : ∀ n y, ✓{n} (g y) ↔ ✓{n} y)
229+
(uyp: y ~~>: P)
230+
(pq: ∀ y', P y' → Q (g y'))
231+
: g y ~~>: Q :=
232+
fun n mz v =>
233+
have : ✓{n} y •? Option.map f mz :=
234+
match mz with
235+
| .none => (g_validN n _).mp v
236+
| .some z =>
237+
have : g y • z ≡ g (y • f z) :=
238+
(CMRA.op_right_eqv _ (gf z).symm).trans (g_op y (f z)).symm
239+
(g_validN n _).mp (CMRA.validN_ne this.dist v)
240+
have ⟨x, px, vx⟩ := uyp n (mz.map f) this
241+
have : g (x •? Option.map f mz) ≡ g x •? mz :=
242+
match mz with
243+
| .none => OFE.Equiv.rfl
244+
| .some z => (g_op x (f z)).trans (CMRA.op_right_eqv (g x) (gf z))
245+
⟨g x, pq x px, CMRA.validN_ne this.dist ((g_validN n _).mpr vx)⟩
246+
247+
theorem UpdateP.iso' (P : β → Prop) (y : β)
248+
(gf : ∀ x, g (f x) ≡ x)
249+
(g_op : ∀ y1 y2, g (y1 • y2) ≡ g y1 • g y2)
250+
(g_validN : ∀ n y, ✓{n} (g y) ↔ ✓{n} y)
251+
(uyp: y ~~>: P)
252+
: g y ~~>: λ x ↦ ∃ y, x = g y ∧ P y :=
253+
UpdateP.iso f g gf g_op g_validN uyp (fun z pz => ⟨z, rfl, pz⟩)
254+
255+
/-! ## Lift -/
256+
theorem Update.lift_updateP (x y : β)
257+
(H : ∀ P, x ~~>: P → g x ~~>: λ a' ↦ ∃ b', a' = g b' ∧ P b')
266258
(uxy: x ~~> y)
267-
: f x ~~> f y :=
259+
: g x ~~> g y :=
268260
Update.of_updateP fun n mz v =>
269261
have ⟨z, hz, vz⟩ := H _ (UpdateP.of_update uxy) n mz v
270-
have hz : z = f y := by simp at hz ⊢; exact hz
262+
have hz : z = g y := by simp at hz ⊢; exact hz
271263
⟨z, hz.symm, vz⟩
272264

273-
end update_lift_cmra
274-
275-
section prod
276-
variable [CMRA α] [CMRA β]
277-
278-
theorem prod_updateP {P : α → Prop} {Q : β → Prop} {R : α × β → Prop} {x : α × β}
279-
(uxp: x.fst ~~>: P) (uxq: x.snd ~~>: Q) (pq: ∀ a b, P a → Q b → R (a, b))
280-
: x ~~>: R :=
281-
fun n mz v =>
282-
match mz with
283-
| .none =>
284-
have ⟨y₁, py, vy₁⟩ := uxp n .none (Prod.validN_fst v)
285-
have ⟨y₂, qy, vy₂⟩ := uxq n .none (Prod.validN_snd v)
286-
⟨(y₁, y₂), pq y₁ y₂ py qy, ⟨vy₁, vy₂⟩⟩
287-
| .some z =>
288-
have ⟨y₁, py, vy₁⟩ := uxp n (.some z.fst) (Prod.validN_fst v)
289-
have ⟨y₂, qy, vy₂⟩ := uxq n (.some z.snd) (Prod.validN_snd v)
290-
⟨(y₁, y₂), pq y₁ y₂ py qy, ⟨vy₁, vy₂⟩⟩
291-
292-
theorem prod_updateP' (P : α → Prop) (Q : β → Prop) (x : α × β)
293-
(uxp: x.fst ~~>: P) (uxq: x.snd ~~>: Q) : x ~~>: λ y ↦ P (y.fst) ∧ Q (y.snd) :=
294-
prod_updateP uxp uxq (fun _ _ px qy => ⟨px, qy⟩)
295-
296-
theorem prod_update (x : α × β) (uxy₁: x.fst ~~> y.fst) (uxy₂: x.snd ~~> y.snd) : x ~~> y :=
297-
Update.of_updateP $
298-
prod_updateP (UpdateP.of_update uxy₁) (UpdateP.of_update uxy₂)
299-
(fun _ _ ya yb => Prod.ext ya yb)
300-
301-
end prod
302-
303-
section option
304-
variable [CMRA α]
305-
306-
theorem option_updateP {P : α → Prop} {Q : Option α → Prop} {x : α}
307-
(uxp: x ~~>: P) (pq: ∀ y, P y → Q (some y)) : some x ~~>: Q :=
308-
fun n mz v =>
309-
match mz with
310-
| .none => let ⟨w, pw, vw⟩ := uxp n .none v; ⟨w, pq w pw, vw⟩
311-
| .some .none => let ⟨w, pw, vw⟩ := uxp n .none v; ⟨w, pq w pw, vw⟩
312-
| .some (.some z) => let ⟨w, pw, vw⟩ := uxp n (.some z) v; ⟨w, pq w pw, vw⟩
265+
/-! ## Product -/
266+
theorem UpdateP.prod {P : α → Prop} {Q : β → Prop} {R : α × β → Prop} {x : α × β}
267+
(uxp: x.fst ~~>: P) (uxq: x.snd ~~>: Q) (pq: ∀ a b, P a → Q b → R (a, b))
268+
: x ~~>: R :=
269+
fun n mz v =>
270+
match mz with
271+
| .none =>
272+
have ⟨y₁, py, vy₁⟩ := uxp n .none (Prod.validN_fst v)
273+
have ⟨y₂, qy, vy₂⟩ := uxq n .none (Prod.validN_snd v)
274+
⟨(y₁, y₂), pq y₁ y₂ py qy, ⟨vy₁, vy₂⟩⟩
275+
| .some z =>
276+
have ⟨y₁, py, vy₁⟩ := uxp n (.some z.fst) (Prod.validN_fst v)
277+
have ⟨y₂, qy, vy₂⟩ := uxq n (.some z.snd) (Prod.validN_snd v)
278+
⟨(y₁, y₂), pq y₁ y₂ py qy, ⟨vy₁, vy₂⟩⟩
279+
280+
theorem UpdateP.prod' (P : α → Prop) (Q : β → Prop) (x : α × β)
281+
(uxp: x.fst ~~>: P) (uxq: x.snd ~~>: Q) : x ~~>: λ y ↦ P (y.fst) ∧ Q (y.snd) :=
282+
UpdateP.prod uxp uxq (fun _ _ px qy => ⟨px, qy⟩)
283+
284+
theorem Update.prod (x : α × β) (uxy₁: x.fst ~~> y.fst) (uxy₂: x.snd ~~> y.snd) : x ~~> y :=
285+
Update.of_updateP $
286+
UpdateP.prod (UpdateP.of_update uxy₁) (UpdateP.of_update uxy₂)
287+
(fun _ _ ya yb => Prod.ext ya yb)
313288

314-
theorem option_updateP' (P : α → Prop) (x : α) (uxp: x ~~>: P)
315-
: some x ~~>: Option.rec False P :=
316-
option_updateP uxp (fun _ py => py)
289+
/-! ## Option -/
290+
theorem UpdateP.option {P : α → Prop} {Q : Option α → Prop} {x : α}
291+
(uxp: x ~~>: P) (pq: ∀ y, P y → Q (some y)) : some x ~~>: Q :=
292+
fun n mz v =>
293+
match mz with
294+
| .none => let ⟨w, pw, vw⟩ := uxp n .none v; ⟨w, pq w pw, vw⟩
295+
| .some .none => let ⟨w, pw, vw⟩ := uxp n .none v; ⟨w, pq w pw, vw⟩
296+
| .some (.some z) => let ⟨w, pw, vw⟩ := uxp n (.some z) v; ⟨w, pq w pw, vw⟩
317297

318-
theorem option_update (x y : α) (uxy: x ~~> y): some x ~~> some y :=
319-
Update.of_updateP $
320-
option_updateP (UpdateP.of_update uxy) (fun _ => congrArg some)
298+
theorem UpdateP.option' (P : αProp) (x : α) (uxp: x ~~>: P)
299+
: some x ~~>: Option.rec False P :=
300+
UpdateP.option uxp (fun _ py => py)
321301

322-
end option
302+
theorem Update.option (x y : α) (uxy: x ~~> y): some x ~~> some y :=
303+
Update.of_updateP $
304+
UpdateP.option (UpdateP.of_update uxy) (fun _ => congrArg some)

0 commit comments

Comments
 (0)