lean4-htt/tests/lean/run/divExact.lean
Rob23oba 9f06aff834
feat: optimized division without remainder for Int and Nat (#8089)
This PR adds optimized division functions for `Int` and `Nat` when the
arguments are known to be divisible (such as when normalizing
rationals). These are backed by the gmp functions `mpz_divexact` and
`mpz_divexact_ui`. See also leanprover-community/batteries#1202.
2025-04-29 07:23:35 +00:00

25 lines
1.2 KiB
Text

#guard Nat.divExact 4 2 (by decide) == 2
#guard Nat.divExact 0 0 (by decide) == 0
#guard Nat.divExact 0 2 (by decide) == 0
#guard Nat.divExact 0 (2 ^ 100) (by decide) == 0
#guard Nat.divExact (2 ^ 100) (2 ^ 100) (by decide) == 1
#guard Nat.divExact (2 ^ 100) 4 (by decide) == 2 ^ 98
#guard Nat.divExact (3 ^ 200) (3 ^ 100) (by decide) == 3 ^ 100
#guard Nat.divExact (2 ^ 100) (2 ^ 60) (by decide) == 2 ^ 40
#guard Int.divExact 4 2 (by decide) == 2
#guard Int.divExact 0 0 (by decide) == 0
#guard Int.divExact 0 2 (by decide) == 0
#guard Int.divExact 0 (2 ^ 100 : Nat) (by decide) == 0
#guard Int.divExact (2 ^ 100 : Nat) (2 ^ 100 : Nat) (by decide) == 1
#guard Int.divExact (2 ^ 100 : Nat) 4 (by decide) == 2 ^ 98
#guard Int.divExact (3 ^ 200 : Nat) (3 ^ 100 : Nat) (by decide) == 3 ^ 100
#guard Int.divExact 4 (-2) (by decide) == -2
#guard Int.divExact (-8) (-2) (by decide) == 4
#guard Int.divExact 0 (-2) (by decide) == 0
#guard Int.divExact 0 (-(2 ^ 100 : Nat)) (by decide) == 0
#guard Int.divExact (2 ^ 100 : Nat) (-(2 ^ 100 : Nat)) (by decide) == -1
#guard Int.divExact (-(3 ^ 200 : Nat)) (-(3 ^ 100 : Nat)) (by decide) == 3 ^ 100
#guard Int.divExact (-(3 ^ 100 : Nat)) 3 (by decide) == -3 ^ 99
#guard Int.divExact (-(2 ^ 31 : Nat)) (2 ^ 31 : Nat) (by decide) == -1