lean4-htt/tests/lean/run/simprocUInt.lean
Paul Reichert 1efefc25a5
fix: expose Int* definitions for simprocs and decide (fixes #10546) (#10631)
This PR exposes the definitions about `Int*`. The main reason is that
the `SInt` simprocs require many of them to be exposed. Furthermore,
`decide` now works with `Int*` operations. This fixes #10631.
2025-10-01 15:53:02 +00:00

132 lines
3.9 KiB
Text

module
section
variable (x : Nat)
#check_simp x = (8 : UInt8).toNat ~> x = 8
#check_simp x = (257 : UInt8).toNat ~> x = 1
#check_simp x = (8 : UInt16).toNat ~> x = 8
#check_simp x = (65537 : UInt16).toNat ~> x = 1
#check_simp x = (8 : UInt32).toNat ~> x = 8
#check_simp x = (4294967297 : UInt32).toNat ~> x = 1
#check_simp x = (8 : UInt64).toNat ~> x = 8
#check_simp x = (18446744073709551617 : UInt64).toNat ~> x = 1
end
section
variable (x : UInt8)
example : (5 : UInt8) = 5 := by decide
example : (5 : UInt8) ≤ 5 := by decide
example : (5 : UInt8) < 6 := by decide
#check_simp x = 2 + 3 ~> x = 5
#check_simp x = 2 * 3 ~> x = 6
#check_simp x = 2 - 3 ~> x = 255
#check_simp x = 4 / 3 ~> x = 1
#check_simp x = 5 % 3 ~> x = 2
#check_simp True = ((3 : UInt8) < 3) ~> False
#check_simp True = ((3 : UInt8) ≤ 2) ~> False
#check_simp True = ((3 : UInt8) > 3) ~> False
#check_simp True = ((3 : UInt8) ≥ 4) ~> False
#check_simp True = ((3 : UInt8) = 4) ~> False
#check_simp True = ((3 : UInt8) ≠ 3) ~> False
#check_simp True = ((3 : UInt8) == 4) ~> False
#check_simp True = ((3 : UInt8) != 3) ~> False
#check_simp x = UInt8.ofNatLT 5 (by decide) ~> x = 5
#check_simp x = UInt8.ofNat 5 ~> x = 5
#check_simp x = UInt8.ofNat 257 ~> x = 1
end
section
variable (x : UInt16)
example : (5 : UInt16) = 5 := by decide
example : (5 : UInt16) ≤ 5 := by decide
example : (5 : UInt16) < 6 := by decide
#check_simp x = 2 + 3 ~> x = 5
#check_simp x = 2 * 3 ~> x = 6
#check_simp x = 2 - 3 ~> x = 65535
#check_simp x = 4 / 3 ~> x = 1
#check_simp x = 5 % 3 ~> x = 2
#check_simp True = ((3 : UInt16) < 3) ~> False
#check_simp True = ((3 : UInt16) ≤ 2) ~> False
#check_simp True = ((3 : UInt16) > 3) ~> False
#check_simp True = ((3 : UInt16) ≥ 4) ~> False
#check_simp True = ((3 : UInt16) = 4) ~> False
#check_simp True = ((3 : UInt16) ≠ 3) ~> False
#check_simp True = ((3 : UInt16) == 4) ~> False
#check_simp True = ((3 : UInt16) != 3) ~> False
#check_simp x = UInt16.ofNatLT 5 (by decide) ~> x = 5
#check_simp x = UInt16.ofNat 5 ~> x = 5
#check_simp x = UInt16.ofNat 65537 ~> x = 1
end
section
variable (x : UInt32)
example : (5 : UInt32) = 5 := by decide
example : (5 : UInt32) ≤ 5 := by decide
example : (5 : UInt32) < 6 := by decide
#check_simp x = 2 + 3 ~> x = 5
#check_simp x = 2 * 3 ~> x = 6
#check_simp x = 2 - 3 ~> x = 4294967295
#check_simp x = 4 / 3 ~> x = 1
#check_simp x = 5 % 3 ~> x = 2
#check_simp True = ((3 : UInt32) < 3) ~> False
#check_simp True = ((3 : UInt32) ≤ 2) ~> False
#check_simp True = ((3 : UInt32) > 3) ~> False
#check_simp True = ((3 : UInt32) ≥ 4) ~> False
#check_simp True = ((3 : UInt32) = 4) ~> False
#check_simp True = ((3 : UInt32) ≠ 3) ~> False
#check_simp True = ((3 : UInt32) == 4) ~> False
#check_simp True = ((3 : UInt32) != 3) ~> False
#check_simp x = UInt32.ofNatLT 5 (by decide) ~> x = 5
#check_simp x = UInt32.ofNat 5 ~> x = 5
#check_simp x = UInt32.ofNat 4294967297 ~> x = 1
end
section
variable (x : UInt64)
example : (5 : UInt64) = 5 := by decide
example : (5 : UInt64) ≤ 5 := by decide
example : (5 : UInt64) < 6 := by decide
#check_simp x = 2 + 3 ~> x = 5
#check_simp x = 2 * 3 ~> x = 6
#check_simp x = 2 - 3 ~> x = 18446744073709551615
#check_simp x = 4 / 3 ~> x = 1
#check_simp x = 5 % 3 ~> x = 2
#check_simp True = ((3 : UInt64) < 3) ~> False
#check_simp True = ((3 : UInt64) ≤ 2) ~> False
#check_simp True = ((3 : UInt64) > 3) ~> False
#check_simp True = ((3 : UInt64) ≥ 4) ~> False
#check_simp True = ((3 : UInt64) = 4) ~> False
#check_simp True = ((3 : UInt64) ≠ 3) ~> False
#check_simp True = ((3 : UInt64) == 4) ~> False
#check_simp True = ((3 : UInt64) != 3) ~> False
#check_simp x = UInt64.ofNatLT 5 (by decide) ~> x = 5
#check_simp x = UInt64.ofNat 5 ~> x = 5
#check_simp x = UInt64.ofNat 18446744073709551617 ~> x = 1
end
section
variable (x : USize)
/- USize.toNat -/
#check_simp USize.toNat 4294967296 !~>
#check_simp USize.toNat 4294967295 ~> 4294967295
#check_simp USize.toNat (x &&& 1) ~> x.toNat % 2
end