abs package:sbv
Compute the floating point absolute value.
A number divides another exactly when it also divides its absolute
value. While this property seems obvious, I was unable to get z3 to
prove it. Even CVC5 needs a bit of help to guide it through the case
split on
b.
Proof
>>> runTP dvdAbs
Lemma: dvdAbs_l2r
Step: 1 (2 way case split)
Step: 1.1 Q.E.D.
Step: 1.2 Q.E.D.
Step: 1.Completeness Q.E.D.
Result: Q.E.D.
Lemma: dvdAbs_r2l
Step: 1 (2 way case split)
Step: 1.1 Q.E.D.
Step: 1.2 Q.E.D.
Step: 1.Completeness Q.E.D.
Result: Q.E.D.
Lemma: dvdAbs Q.E.D.
[Proven] dvdAbs :: Ɐa ∷ Integer → Ɐb ∷ Integer → Bool