Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Glen Mével
iris-time-proofs
Commits
50ee5313
Commit
50ee5313
authored
Jan 17, 2022
by
Glen Mével
Browse files
Gen_id.v
parent
d1947cf0
Changes
1
Hide whitespace changes
Inline
Side-by-side
theories/Gen_id.v
0 → 100644
View file @
50ee5313
From
iris_time
.
heap_lang
Require
Import
proofmode
notation
.
From
iris_time
Require
Import
TimeReceipts
.
Ltac
wp_tick_faa
:
=
wp_tick
;
wp_faa
.
Definition
make_gen
:
val
:
=
λ
:
<>,
let
:
"count"
:
=
ref
#
0
in
(
λ
:
<>,
FAA
"count"
#
1
).
Section
Proof
.
Context
`
{!
timeReceiptHeapG
Σ
}
(
tr_max
:
nat
).
Definition
P_def
(
count
:
loc
)
(
S
:
gset
Z
)
:
iProp
Σ
:
=
(
∃
(
n
:
nat
),
count
↦
#
n
∗
TR
n
∗
⌜
∀
x
,
x
∈
S
→
x
<
n
⌝
)%
I
.
Print
Exclusive
.
Search
_
Exclusive
.
Search
_
(
_
↦
_
)%
I
.
Search
_
(
_
↦
_
)%
I
False
%
I
.
Lemma
P_excl
count
S1
S2
:
P_def
count
S1
∗
P_def
count
S2
-
∗
False
.
Proof
.
iIntros
"[H1 H2]"
.
iDestruct
"H1"
as
(
n1
)
"(H1 & _)"
.
iDestruct
"H2"
as
(
n2
)
"(H2 & _)"
.
Admitted
.
Proposition
make_gen_spec
:
TR_invariant
tr_max
-
∗
{{{
True
}}}
«
make_gen
#()
»
{{{
(
gen_id
:
val
),
RET
gen_id
;
∃
(
P
:
gset
Z
→
iProp
Σ
),
P
∅
∗
∀
(
S
:
gset
Z
),
{{{
P
S
}}}
gen_id
#()
{{{
(
id
:
Z
),
RET
#
id
;
⌜
id
∉
S
⌝
∗
P
(
S
∪
{[
id
]}
)
}}}
}}}.
Proof
.
iIntros
"#TRInv !>"
(
Φ
)
"_ Post"
.
wp_tick_rec
.
wp_tick_alloc
ℓ
.
wp_tick_let
.
wp_pures
.
wp_tick
.
iMod
zero_TR
as
"TR0"
=>//.
wp_value_head
.
iApply
"Post"
.
iExists
(
P_def
ℓ
).
iSplitL
.
{
iExists
0
%
nat
.
iFrame
.
iIntros
(?)
;
by
rewrite
elem_of_empty
.
}
{
iIntros
(
S
Ψ
)
"!# Pre Post"
.
iDestruct
"Pre"
as
(
n
)
"(Hℓ & HTR & HS)"
;
iDestruct
"HS"
as
%
HS
.
wp_rec
.
wp_tick_faa
.
iApply
"Post"
.
iSplitR
;
first
iPureIntro
.
{
naive_solver
lia
.
}
{
iExists
(
n
+
1
)%
nat
.
rewrite
(
_
:
n
+
1
=
(
n
+
1
)%
nat
)
;
last
lia
.
rewrite
(
_
:
Datatypes
.
S
n
=
(
n
+
1
)%
nat
)
;
last
lia
.
iIntros
"{$Hℓ $HTR} % !% %"
.
set_unfold
.
naive_solver
lia
.
}
}
Qed
.
End
Proof
.
Section
SimplerProof
.
Context
`
{!
timeReceiptHeapG
Σ
}
(
tr_max
:
nat
).
Definition
P_def'
(
count
:
loc
)
(
n
:
nat
)
:
iProp
Σ
:
=
(
count
↦
#
n
∗
TR
n
)%
I
.
Print
Exclusive
.
Search
_
Exclusive
.
Search
_
(
_
↦
_
)%
I
.
Search
_
(
_
↦
_
)%
I
False
%
I
.
Lemma
P_excl'
count
n1
n2
:
P_def'
count
n1
∗
P_def'
count
n2
-
∗
False
.
Proof
.
iIntros
"[H1 H2]"
.
iDestruct
"H1"
as
"(H1 & _)"
.
iDestruct
"H2"
as
"(H2 & _)"
.
Admitted
.
Proposition
make_gen_spec'
:
TR_invariant
tr_max
-
∗
{{{
True
}}}
«
make_gen
#()
»
{{{
(
gen_id
:
val
),
RET
gen_id
;
∃
(
P
:
nat
→
iProp
Σ
),
P
0
%
nat
∗
∀
(
next_id
:
nat
),
{{{
P
next_id
}}}
gen_id
#()
{{{
RET
#
next_id
;
P
(
next_id
+
1
)%
nat
}}}
}}}.
Proof
.
iIntros
"#TRInv !>"
(
Φ
)
"_ Post"
.
wp_tick_rec
.
wp_tick_alloc
ℓ
.
wp_tick_let
.
wp_pures
.
wp_tick
.
iMod
zero_TR
as
"TR0"
=>//.
wp_value_head
.
iApply
"Post"
.
iExists
(
P_def'
ℓ
).
iFrame
.
iIntros
(
n
Ψ
)
"!# Pre Post"
.
iDestruct
"Pre"
as
"(Hℓ & HTR)"
.
wp_rec
.
wp_tick_faa
.
iApply
"Post"
.
rewrite
(
_
:
(
n
+
1
)%
Z
=
(
n
+
1
)%
nat
)
;
last
lia
.
rewrite
(
_
:
S
n
=
(
n
+
1
)%
nat
)
;
last
lia
.
iIntros
"{$Hℓ $HTR} % !% %"
.
Qed
.
End
SimplerProof
.
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment