Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
RefinedC
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Iris
RefinedC
Commits
40e692af
Commit
40e692af
authored
4 years ago
by
Paul
Browse files
Options
Downloads
Patches
Plain Diff
fix naming
parent
da126e5e
No related branches found
No related tags found
1 merge request
!36
Ci/bits
Pipeline
#42123
passed
4 years ago
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
theories/typing/int.v
+21
-21
21 additions, 21 deletions
theories/typing/int.v
with
21 additions
and
21 deletions
theories/typing/int.v
+
21
−
21
View file @
40e692af
...
...
@@ -197,55 +197,55 @@ Section programs.
move
?
:
(
bits_per_int
it
-
1
)
=>
k
.
have
?
:
0
≤
k
.
{
suff
:
bits_per_int
it
>
0
by
lia
.
by
apply
:
bits_per_int_gt_0
.
}
have
H
:
∀
n
,
-2
^
k
≤
n
≤
2
^
k
-
1
↔
have
H
b
:
∀
n
,
-2
^
k
≤
n
≤
2
^
k
-
1
↔
∀
l
,
k
≤
l
→
Z
.
testbit
n
l
=
bool_decide
(
n
<
0
)
by
intros
;
rewrite
-
bounded_iff_bits
;
lia
.
move
=>
/
H
H1
/
H
H2
.
apply
H
=>
l
Hl
.
by
rewrite
Htestbit
Hsign
H1
?H2
.
move
=>
/
H
b
H
n
1
/
H
b
H
n
2
.
apply
H
b
=>
l
Hl
.
by
rewrite
Htestbit
Hsign
H
n
1
?H
n
2
.
-
rewrite
/
int_modulus
.
move
?
:
(
bits_per_int
it
)
=>
k
.
have
?
:
0
≤
k
.
{
suff
:
bits_per_int
it
>
0
by
lia
.
by
apply
:
bits_per_int_gt_0
.
}
have
H
:
∀
n
,
0
≤
n
→
n
≤
2
^
k
-
1
↔
have
H
b
:
∀
n
,
0
≤
n
→
n
≤
2
^
k
-
1
↔
∀
l
,
k
≤
l
→
Z
.
testbit
n
l
=
bool_decide
(
n
<
0
)
by
intros
;
rewrite
bool_decide_false
-
?pos_bounded_iff_bits
;
lia
.
move
=>
[
Hn1
/
H
H1
]
[
Hn2
/
H
H2
]
.
move
=>
[
Hn1
/
H
b
H
N
1
]
[
Hn2
/
H
b
H
N
2
]
.
have
Hn
:=
Hnonneg
Hn1
Hn2
.
split
;
first
done
.
apply
(
H
_
Hn
)
=>
l
Hl
.
by
rewrite
Htestbit
H1
?H2
.
apply
(
H
b
_
Hn
)
=>
l
Hl
.
by
rewrite
Htestbit
H
N
1
?H
N
2
.
Qed
.
Lemma
arith_op_result_in_range
(
it
:
int_type
)
(
n1
n2
n
:
Z
)
op
:
n1
∈
it
→
n2
∈
it
→
arith_op_result
it
n1
n2
op
=
Some
n
→
arith_op_sidecond
it
n1
n2
n
op
→
n
∈
it
.
Proof
.
move
=>
H1
H2
Hn
Hsc
.
move
=>
H
n
1
H
n
2
Hn
Hsc
.
destruct
op
=>
//=
;
simpl
in
Hsc
,
Hn
;
destruct_and
?
=>
//.
all
:
inversion
Hn
;
simplify_eq
.
-
apply
(
bitwise_op_result_in_range
Z
.
land
andb
)
=>
//.
+
rewrite
Z
.
land_nonneg
;
tauto
.
+
repeat
case_bool_decide
;
try
rewrite
->
Z
.
land_neg
in
*
;
tauto
.
+
rewrite
Z
.
land_nonneg
;
naive_solver
.
+
repeat
case_bool_decide
;
try
rewrite
->
Z
.
land_neg
in
*
;
naive_solver
.
+
by
apply
Z
.
land_spec
.
-
apply
(
bitwise_op_result_in_range
Z
.
lor
orb
)
=>
//.
+
by
rewrite
Z
.
lor_nonneg
.
+
repeat
case_bool_decide
;
try
rewrite
->
Z
.
lor_neg
in
*
;
tauto
.
+
repeat
case_bool_decide
;
try
rewrite
->
Z
.
lor_neg
in
*
;
naive_solver
.
+
by
apply
Z
.
lor_spec
.
-
apply
(
bitwise_op_result_in_range
Z
.
lxor
xorb
)
=>
//.
+
by
rewrite
Z
.
lxor_nonneg
.
+
have
H
:
∀
n
,
bool_decide
(
n
<
0
)
=
negb
(
bool_decide
(
0
≤
n
))
.
+
have
H
n
:
∀
n
,
bool_decide
(
n
<
0
)
=
negb
(
bool_decide
(
0
≤
n
))
.
{
intros
.
repeat
case_bool_decide
=>
//
;
lia
.
}
rewrite
!
H
.
repeat
case_bool_decide
;
try
rewrite
->
Z
.
lxor_nonneg
in
*
;
tauto
.
rewrite
!
H
n
.
repeat
case_bool_decide
;
try
rewrite
->
Z
.
lxor_nonneg
in
*
;
naive_solver
.
+
by
apply
Z
.
lxor_spec
.
-
split
.
+
trans
itivity
0
;
[
apply
min_int_le_0
|
by
apply
Z
.
shiftl_nonneg
]
.
+
trans
0
;
[
apply
min_int_le_0
|
by
apply
Z
.
shiftl_nonneg
]
.
+
done
.
-
split
.
+
trans
itivity
0
;
[
apply
min_int_le_0
|
by
apply
Z
.
shiftr_nonneg
]
.
+
destruct
H1
.
trans
itivity
n1
;
last
done
.
rewrite
Z
.
shiftr_div_pow2
;
last
by
lia
.
+
trans
0
;
[
apply
min_int_le_0
|
by
apply
Z
.
shiftr_nonneg
]
.
+
destruct
H
n
1
.
trans
n1
;
last
done
.
rewrite
Z
.
shiftr_div_pow2
;
last
by
lia
.
apply
Z
.
div_le_upper_bound
.
{
apply
Z
.
pow_pos_nonneg
=>
//.
}
rewrite
-
[
X
in
X
≤
_]
Z
.
mul_1_l
.
apply
Z
.
mul_le_mono_nonneg_r
=>
//.
rewrite
-
(
Z
.
pow_0_r
2
)
.
apply
Z
.
pow_le_mono_r
;
lia
.
...
...
@@ -268,11 +268,11 @@ Section programs.
-
iIntros
(
σ
v'
)
"_ !%"
.
split
.
+
destruct
op
=>
//.
all
:
inversion
1
;
simplify_eq
/=.
4
,
5
,
9
,
10
:
case_bool_decide
=>
//.
all
:
try
case_bool_decide
=>
//.
all
:
destruct
it
as
[?
[]];
simplify_eq
/=
=>
//.
all
:
try
by
rewrite
->
it_in_range_mod
in
*
=>
//
;
simplify_eq
.
+
move
=>
->
;
destruct
op
=>
//
;
econstructor
=>
//
=>
//.
4
,
6
,
11
,
13
:
inversion
Hsc
;
case_bool_decide
;
tauto
.
all
:
try
by
inversion
Hsc
;
case_bool_decide
;
naive_solver
.
all
:
destruct
it
as
[?
[]];
simplify_eq
/=
=>
//.
all
:
try
by
rewrite
it_in_range_mod
.
-
iIntros
"!>"
.
iApply
"HΦ"
;
last
done
.
by
iPureIntro
.
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
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!
Save comment
Cancel
Please
register
or
sign in
to comment