Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Simon Spies
Iris
Commits
c798ff4f
Commit
c798ff4f
authored
Mar 15, 2017
by
Ralf Jung
Browse files
make fractional lemmas use AsFractional
parent
010154e2
Changes
1
Hide whitespace changes
Inline
Sidebyside
theories/base_logic/lib/fractional.v
View file @
c798ff4f
...
...
@@ 22,21 +22,14 @@ Section fractional.
Implicit
Types
Φ
:
Qp
→
uPred
M
.
Implicit
Types
p
q
:
Qp
.
Lemma
fractional_split
`
{!
Fractional
Φ
}
p
q
:
Φ
(
p
+
q
)%
Qp
⊢
Φ
p
∗
Φ
q
.
Proof
.
by
rewrite
fractional
.
Qed
.
Lemma
fractional_combine
`
{!
Fractional
Φ
}
p
q
:
Φ
p
∗
Φ
q
⊢
Φ
(
p
+
q
)%
Qp
.
Proof
.
by
rewrite
fractional
.
Qed
.
Lemma
fractional_half_equiv
`
{!
Fractional
Φ
}
p
:
Φ
p
⊣
⊢
Φ
(
p
/
2
)%
Qp
∗
Φ
(
p
/
2
)%
Qp
.
Proof
.
by
rewrite
(
fractional
(
p
/
2
)
(
p
/
2
))
Qp_div_2
.
Qed
.
Lemma
fractional_half
`
{!
Fractional
Φ
}
p
:
Φ
p
⊢
Φ
(
p
/
2
)%
Qp
∗
Φ
(
p
/
2
)%
Qp
.
Proof
.
by
rewrite
fractional_half_equiv
.
Qed
.
Lemma
half_fractional
`
{!
Fractional
Φ
}
p
q
:
Φ
(
p
/
2
)%
Qp
∗
Φ
(
p
/
2
)%
Qp
⊢
Φ
p
.
Proof
.
by
rewrite

fractional_half_equiv
.
Qed
.
Lemma
fractional_split
P
P1
P2
Φ
q1
q2
:
AsFractional
P
Φ
(
q1
+
q2
)
→
AsFractional
P1
Φ
q1
→
AsFractional
P2
Φ
q2
→
P
⊣
⊢
P1
∗
P2
.
Proof
.
move
=>[>
>]
[>
_
]
[>
_
].
done
.
Qed
.
Lemma
fractional_half
P
P12
Φ
q
:
AsFractional
P
Φ
q
→
AsFractional
P12
Φ
(
q
/
2
)
→
P
⊣
⊢
P12
∗
P12
.
Proof
.
rewrite
{
1
}(
Qp_div_2
q
)=>[>>][>
_
].
done
.
Qed
.
(** Fractional and logical connectives *)
Global
Instance
persistent_fractional
P
:
...
...
@@ 132,25 +125,25 @@ Section fractional.
AsFractional
P
Φ
(
q1
+
q2
)
→
AsFractional
P1
Φ
q1
→
AsFractional
P2
Φ
q2
→
IntoAnd
b
P
P1
P2
.
Proof
.
(* TODO: We need a better way to handle this boolean here.
(* TODO: We need a better way to handle this boolean here; always
applying mk_into_and_sep (which only works after introducing all
assumptions) is rather annoying.
Ideally, it'd not even be possible to make the mistake that
was originally made here, which is to give this instance for
"false" only, thus breaking some intro patterns. *)
intros
H1
H2
H3
.
apply
mk_into_and_sep
.
revert
H1
H2
H3
.
by
rewrite
/
IntoAnd
=>[>
>]
[>
_
]
[>
_
].
intros
H1
H2
H3
.
apply
mk_into_and_sep
.
rewrite
[
P
]
fractional_split
//.
Qed
.
Global
Instance
into_and_fractional_half
b
P
Q
Φ
q
:
AsFractional
P
Φ
q
→
AsFractional
Q
Φ
(
q
/
2
)
→
IntoAnd
b
P
Q
Q

100
.
Proof
.
intros
H1
H2
.
apply
mk_into_and_sep
.
revert
H1
H2
.
by
rewrite
/
IntoAnd
{
1
}(
Qp_div_2
q
)=>[>>][>
_
].
intros
H1
H2
.
apply
mk_into_and_sep
.
rewrite
[
P
]
fractional_half
//.
Qed
.
(* The instance [frame_fractional] can be tried at all the nodes of
the proof search. The proof search then fails almost always on
[AsFractional R Φ r], but the slowdown is still noticeable. For
that reason, we factorize the three instances that could ave been
that reason, we factorize the three instances that could
h
ave been
defined for that purpose into one. *)
Inductive
FrameFractionalHyps
R
Φ
RES
:
Qp
→
Qp
→
Prop
:
=

frame_fractional_hyps_l
Q
p
p'
r
:
...
...
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