Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
George Pirlea
Iris
Commits
af27e338
Commit
af27e338
authored
Sep 19, 2017
by
Robbert Krebbers
Browse files
Use a type class for monotone uPred predicates.
parent
e393429d
Changes
1
Hide whitespace changes
Inline
Side-by-side
theories/base_logic/fix.v
View file @
af27e338
...
...
@@ -5,9 +5,9 @@ Import uPred.
(** Least and greatest fixpoint of a monotone function, defined entirely inside
the logic. *)
Definition
uPred_mono_pred
{
M
A
}
(
F
:
(
A
→
uPred
M
)
→
(
A
→
uPred
M
))
:
=
∀
Φ
Ψ
,
((
□
∀
x
,
Φ
x
→
Ψ
x
)
→
∀
x
,
F
Φ
x
→
F
Ψ
x
)%
I
.
Class
BIMonoPred
{
M
A
}
(
F
:
(
A
→
uPred
M
)
→
(
A
→
uPred
M
))
:
=
bi_mono_pred
Φ
Ψ
:
((
□
∀
x
,
Φ
x
-
∗
Ψ
x
)
→
∀
x
,
F
Φ
x
-
∗
F
Ψ
x
)%
I
.
Arguments
bi_mono_pred
{
_
_
_
_
}
_
_
.
Definition
uPred_least_fixpoint
{
M
A
}
(
F
:
(
A
→
uPred
M
)
→
(
A
→
uPred
M
))
(
x
:
A
)
:
uPred
M
:
=
...
...
@@ -18,13 +18,12 @@ Definition uPred_greatest_fixpoint {M A} (F : (A → uPred M) → (A → uPred M
(
∃
Φ
,
□
(
∀
x
,
Φ
x
→
F
Φ
x
)
∧
Φ
x
)%
I
.
Section
least
.
Context
{
M
:
ucmraT
}.
Context
{
A
}
(
F
:
(
A
→
uPred
M
)
→
(
A
→
uPred
M
))
(
Hmono
:
uPred_mono_pred
F
).
Context
{
M
A
}
(
F
:
(
A
→
uPred
M
)
→
(
A
→
uPred
M
))
`
{!
BIMonoPred
F
}.
Lemma
least_fixpoint_unfold_2
x
:
F
(
uPred_least_fixpoint
F
)
x
⊢
uPred_least_fixpoint
F
x
.
Proof
.
iIntros
"HF"
(
Φ
)
"#Hincl"
.
iApply
"Hincl"
.
iApply
(
H
mono
_
Φ
)
;
last
done
.
iApply
"Hincl"
.
iApply
(
bi_
mono
_pred
_
Φ
)
;
last
done
.
iIntros
"!#"
(
y
)
"Hy"
.
iApply
"Hy"
.
done
.
Qed
.
...
...
@@ -32,7 +31,7 @@ Section least.
uPred_least_fixpoint
F
x
⊢
F
(
uPred_least_fixpoint
F
)
x
.
Proof
.
iIntros
"HF"
.
iApply
"HF"
.
iIntros
"!#"
(
y
)
"Hy"
.
iApply
H
mono
;
last
done
.
iIntros
"!#"
(
z
)
"?"
.
iApply
bi_
mono
_pred
;
last
done
.
iIntros
"!#"
(
z
)
"?"
.
by
iApply
least_fixpoint_unfold_2
.
Qed
.
...
...
@@ -48,13 +47,13 @@ Section least.
End
least
.
Section
greatest
.
Context
{
M
:
ucmraT
}
{
A
}
(
F
:
(
A
→
uPred
M
)
→
(
A
→
uPred
M
))
(
Hmono
:
uPred_mono_p
red
F
)
.
Context
{
M
A
}
(
F
:
(
A
→
uPred
M
)
→
(
A
→
uPred
M
))
`
{!
BIMonoP
red
F
}
.
Lemma
greatest_fixpoint_unfold_1
x
:
uPred_greatest_fixpoint
F
x
⊢
F
(
uPred_greatest_fixpoint
F
)
x
.
Proof
.
iDestruct
1
as
(
Φ
)
"[#Hincl HΦ]"
.
iApply
(
H
mono
Φ
(
uPred_greatest_fixpoint
F
)).
iApply
(
bi_
mono
_pred
Φ
(
uPred_greatest_fixpoint
F
)).
-
iIntros
"!#"
(
y
)
"Hy"
.
iExists
Φ
.
auto
.
-
by
iApply
"Hincl"
.
Qed
.
...
...
@@ -63,7 +62,7 @@ Section greatest.
F
(
uPred_greatest_fixpoint
F
)
x
⊢
uPred_greatest_fixpoint
F
x
.
Proof
.
iIntros
"HF"
.
iExists
(
F
(
uPred_greatest_fixpoint
F
)).
iIntros
"{$HF} !#"
(
y
)
"Hy"
.
iApply
(
H
mono
with
"[] Hy"
).
iIntros
"{$HF} !#"
(
y
)
"Hy"
.
iApply
(
bi_
mono
_pred
with
"[] Hy"
).
iIntros
"!#"
(
z
)
"?"
.
by
iApply
greatest_fixpoint_unfold_1
.
Qed
.
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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