Library Stdlib.micromega.SatDivMod
From
Stdlib
Require
Import
BinInt
.
From
Stdlib.micromega
Require
Import
ZifyClasses
ZifyInst
.
#[
local
]
Open
Scope
Z_scope
.
#[
local
]
Lemma
Z_div_nonneg_nonneg
a
b
: 0
<=
a
->
0
<=
b
->
0
<=
a
/
b
.
#[
local
]
Lemma
Z_mod_nonneg_nonneg
a
b
: 0
<=
a
->
0
<=
b
->
0
<=
a
mod
b
.
#[
global
]
Instance
SatDiv
:
Saturate
Z.div
:=
{|
PArg1
:=
fun
x
=> 0
<=
x
;
PArg2
:=
fun
y
=> 0
<=
y
;
PRes
:=
fun
_
_
r
=> 0
<=
r
;
SatOk
:=
Z_div_nonneg_nonneg
|}.
Add
Zify
Saturate
SatDiv
.
#[
global
]
Instance
SatMod
:
Saturate
Z.modulo
:=
{|
PArg1
:=
fun
x
=> 0
<=
x
;
PArg2
:=
fun
y
=> 0
<=
y
;
PRes
:=
fun
_
_
r
=> 0
<=
r
;
SatOk
:=
Z_mod_nonneg_nonneg
|}.
Add
Zify
Saturate
SatMod
.