Skip to content

Commit 74ce211

Browse files
feat: SBI (#181)
1 parent 33c74d0 commit 74ce211

File tree

17 files changed

+1301
-298
lines changed

17 files changed

+1301
-298
lines changed

PORTING.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -454,11 +454,11 @@ Some porting tasks will require other tasks as dependencies, the GitHub issues p
454454
## Examples
455455

456456
- SI Logic
457-
- [ ] `si_logic/siprop.v`
458-
- [ ] `si_logic/bi.v`
459-
- [ ] BI instance
460-
- [ ] BI Persistently instance
461-
- [ ] BI Later instance
457+
- [x] `si_logic/siprop.v`
458+
- [x] `si_logic/bi.v`
459+
- [x] BI instance
460+
- [x] BI Persistently instance
461+
- [x] BI Later instance
462462

463463
- Program Logic
464464
- Final decisions about what to port from this folder have not been made yet.

src/Iris/BI.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ public import Iris.BI.Instances
88
public import Iris.BI.BI
99
public import Iris.BI.Notation
1010
public import Iris.BI.Updates
11+
public import Iris.BI.Cmra

src/Iris/BI/BIBase.lean

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,3 +309,28 @@ macro_rules
309309

310310
delab_rule except0
311311
| `($_ $P) => do ``(iprop(◇ $(← unpackIprop P)))
312+
313+
314+
/-- Plainly modality -/
315+
class Plainly (PROP : Type _) where
316+
plainly : PROP → PROP
317+
export Plainly (plainly)
318+
319+
syntax "■ " term:40 : term
320+
321+
macro_rules
322+
| `(iprop(■ $P)) => ``(Plainly.plainly iprop($P))
323+
324+
delab_rule Plainly.plainly
325+
| `($_ $P) => do ``(iprop(■ $(← Iris.BI.unpackIprop P)))
326+
327+
def Plainly.plainlyIf [BIBase PROP] [Plainly PROP] (p : Bool) (P : PROP) : PROP :=
328+
iprop(if p then ■ P else P)
329+
330+
syntax:max "■?" term:max ppHardSpace term:40 : term
331+
332+
macro_rules
333+
| `(iprop(■? $p $P)) => ``(Plainly.plainlyIf $p iprop($P))
334+
335+
delab_rule Plainly.plainlyIf
336+
| `($_ $p $P) => do ``(iprop(■? $p $(← Iris.BI.unpackIprop P)))

src/Iris/BI/Cmra.lean

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
/-
2+
Copyright (c) 2026 Michael Sammler. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Markus de Medeiros
5+
-/
6+
module
7+
8+
public import Iris.BI.Sbi
9+
public import Iris.BI.Plainly
10+
public import Iris.Std.RocqAlias
11+
12+
@[expose] public section
13+
14+
/-!
15+
# Generic CMRA validity in a BI logic
16+
17+
This file defines the generic internal CMRA validity for any `Sbi PROP`,
18+
as `<si_pure> cmraValid a`.
19+
-/
20+
21+
namespace Iris
22+
open BI OFE SiProp CMRA Sbi
23+
24+
section CmraValid
25+
26+
variable [Sbi PROP] [CMRA A]
27+
28+
@[rocq_alias internal_cmra_valid]
29+
def internalCmraValid (a : A) : PROP := siPure (cmraValid a)
30+
31+
@[rocq_alias internal_cmra_valid_ne]
32+
instance internalCmraValid_ne : NonExpansive (internalCmraValid (PROP := PROP) (A := A)) where
33+
ne _ _ _ h := siPure_ne.ne (instNonExpansiveCmraValid.ne h)
34+
35+
@[rocq_alias internal_cmra_valid_intro]
36+
theorem internalCmraValid_intro {P : PROP} {a : A} (h : Valid a) :
37+
P ⊢ internalCmraValid a :=
38+
calc (P : PROP)
39+
_ ⊢ True := true_intro
40+
_ ⊢ <si_pure> True := siPure_pure.mpr
41+
_ ⊢ internalCmraValid a := siPure_mono (cmraValid_intro h)
42+
43+
@[rocq_alias internal_cmra_valid_elim]
44+
theorem internalCmraValid_elim (a : A) : internalCmraValid a ⊢@{PROP} ⌜✓{0} a⌝ :=
45+
calc internalCmraValid a
46+
_ ⊢ <si_pure> ⌜✓{0} a⌝ := siPure_mono cmraValid_elim
47+
_ ⊢ ⌜✓{0} a⌝ := siPure_pure.mp
48+
49+
@[rocq_alias internal_cmra_valid_weaken]
50+
theorem internalCmraValid_weaken {a b : A} :
51+
internalCmraValid (a • b) ⊢@{PROP} internalCmraValid a :=
52+
siPure_mono cmraValid_weaken
53+
54+
@[rocq_alias internal_cmra_valid_entails]
55+
theorem internalCmraValid_entails [CMRA B] {a : A} {b : B} :
56+
(internalCmraValid a ⊢@{PROP} internalCmraValid b) ↔ ∀ n, ✓{n} a → ✓{n} b :=
57+
siPure_entails.trans cmraValid_entails_iff
58+
59+
@[rocq_alias si_pure_internal_cmra_valid]
60+
theorem siPure_internalCmraValid {a : A} : <si_pure> cmraValid a ⊣⊢@{PROP} internalCmraValid a :=
61+
.rfl
62+
63+
@[rocq_alias persistently_internal_cmra_valid]
64+
theorem persistently_internalCmraValid {a : A} :
65+
<pers> internalCmraValid a ⊣⊢@{PROP} internalCmraValid a :=
66+
persistently_siPure
67+
68+
@[rocq_alias plainly_internal_cmra_valid]
69+
theorem plainly_internalCmraValid (a : A) :
70+
■ internalCmraValid a ⊣⊢@{PROP} internalCmraValid a :=
71+
plainly_siPure
72+
73+
@[rocq_alias intuitionistically_internal_cmra_valid]
74+
theorem intuitionistically_internalCmraValid [BIAffine PROP] {a : A} :
75+
□ internalCmraValid a ⊣⊢@{PROP} internalCmraValid a :=
76+
intuitionistically_iff_persistently.trans persistently_internalCmraValid
77+
78+
@[rocq_alias internal_cmra_valid_discrete]
79+
theorem internalCmraValid_discrete [CMRA.Discrete A] {a : A} :
80+
internalCmraValid a ⊣⊢@{PROP} ⌜✓ a⌝ :=
81+
⟨(internalCmraValid_elim a).trans <| pure_mono (discrete_valid ·),
82+
pure_elim' internalCmraValid_intro⟩
83+
84+
@[rocq_alias internal_cmra_valid_persistent]
85+
instance internalCmraValid_persistent (a : A) :
86+
Persistent (PROP := PROP) (internalCmraValid a) where
87+
persistent := persistently_internalCmraValid.mpr
88+
89+
@[rocq_alias internal_cmra_valid_absorbing]
90+
instance internalCmraValid_absorbing (a : A) :
91+
Absorbing (PROP := PROP) (internalCmraValid a) :=
92+
siPure_absorbing _
93+
94+
@[rocq_alias internal_cmra_valid_plain]
95+
instance internalCmraValid_plain (a : A) :
96+
Plain (PROP := PROP) (internalCmraValid a) where
97+
plain := plainly_internalCmraValid a |>.mpr
98+
99+
end CmraValid
100+
101+
end Iris

src/Iris/BI/Extensions.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ class BILoeb (PROP : Type _) [BI PROP] where
2727

2828
class BILaterContractive (PROP : Type _) [BI PROP] extends OFE.Contractive later (α := PROP)
2929

30+
class BIPureForall (PROP : Type _) [BI PROP] where
31+
pure_forall_2 : ∀ {α : Sort _} (φ : α → Prop), (∀ a, ⌜φ a⌝) ⊢@{PROP} ⌜∀ a, φ a⌝
32+
3033
class BIPersistentlyForall (PROP : Type _) [BI PROP] where
3134
persistently_sForall_2 (Ψ : PROP → Prop) : (∀ p, ⌜Ψ p⌝ → <pers> p) ⊢ <pers> (sForall Ψ)
3235

src/Iris/BI/Lib/BUpdPlain.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,21 @@ open Iris.Std BI
1616
/-! This file contains an alternative version of basic updates.
1717
1818
Namely, this definition is an expression in terms of the plain modality [],
19-
which can be used to instanstiate BUpd for any BIPlainly BI.
19+
which can be used to instantiate BUpd for any Sbi BI.
2020
2121
cf. https://gitlab.mpi-sws.org/iris/iris/merge_requests/211
2222
-/
2323

2424
namespace BUpdPlain
2525

26-
def BUpdPlain [BIBase PROP] [Plainly PROP] (P : PROP) : PROP :=
26+
def BUpdPlain [BIBase PROP] [BIBase.Plainly PROP] (P : PROP) : PROP :=
2727
iprop(∀ R, (P -∗ ■ R) -∗ ■ R)
2828

2929
section BupdPlainDef
3030

3131
open OFE
3232

33-
variable [BI PROP] [BIPlainly PROP]
33+
variable [Sbi PROP]
3434

3535
instance BUpdPlain_ne : NonExpansive (BUpdPlain (PROP := PROP)) where
3636
ne _ _ _ H := forall_ne fun _ => wand_ne.ne (wand_ne.ne H .rfl) .rfl

0 commit comments

Comments
 (0)