From 5c4e093dfb51699f7c686e89e26f68cd4b4f689d Mon Sep 17 00:00:00 2001 From: "sm.wu" Date: Thu, 20 Feb 2025 14:18:22 +0800 Subject: [PATCH] upgrade to latest plonky3 --- Cargo.lock | 214 +++++++++++++----- Cargo.toml | 14 +- ceno_zkvm/Cargo.toml | 1 + ceno_zkvm/examples/riscv_opcodes.rs | 2 +- ceno_zkvm/src/bin/e2e.rs | 2 +- ceno_zkvm/src/chip_handler/global_state.rs | 10 +- ceno_zkvm/src/chip_handler/utils.rs | 2 +- ceno_zkvm/src/circuit_builder.rs | 4 +- ceno_zkvm/src/expression.rs | 8 +- ceno_zkvm/src/expression/monomial.rs | 4 +- ceno_zkvm/src/gadgets/is_lt.rs | 8 +- ceno_zkvm/src/gadgets/signed_ext.rs | 4 +- .../riscv/branch/branch_circuit.rs | 6 +- .../src/instructions/riscv/ecall/halt.rs | 4 +- .../src/instructions/riscv/ecall_insn.rs | 4 +- ceno_zkvm/src/instructions/riscv/insn_base.rs | 4 +- ceno_zkvm/src/instructions/riscv/jump/jalr.rs | 2 +- .../src/instructions/riscv/memory/gadget.rs | 25 +- .../src/instructions/riscv/memory/load.rs | 10 +- ceno_zkvm/src/instructions/riscv/mul.rs | 14 +- ceno_zkvm/src/scheme.rs | 18 +- ceno_zkvm/src/scheme/mock_prover.rs | 15 +- ceno_zkvm/src/scheme/prover.rs | 2 +- ceno_zkvm/src/scheme/tests.rs | 2 +- ceno_zkvm/src/scheme/utils.rs | 148 +++++------- ceno_zkvm/src/scheme/verifier.rs | 3 +- ceno_zkvm/src/state.rs | 10 +- ceno_zkvm/src/tables/program.rs | 8 +- ceno_zkvm/src/tables/ram/ram_impl.rs | 4 +- ceno_zkvm/src/tables/range/range_impl.rs | 4 +- ceno_zkvm/src/uint.rs | 12 +- ceno_zkvm/src/uint/arithmetic.rs | 22 +- ceno_zkvm/src/utils.rs | 10 +- ceno_zkvm/src/virtual_polys.rs | 6 +- ceno_zkvm/src/witness.rs | 10 +- ff_ext/src/lib.rs | 20 +- ff_ext/src/poseidon.rs | 6 +- mpcs/src/basefold.rs | 6 +- mpcs/src/basefold/encoding.rs | 4 +- mpcs/src/basefold/encoding/basecode.rs | 2 +- mpcs/src/basefold/encoding/rs.rs | 30 ++- mpcs/src/sum_check.rs | 5 +- mpcs/src/sum_check/classic.rs | 49 ++-- mpcs/src/sum_check/classic/coeff.rs | 2 +- mpcs/src/util.rs | 11 +- mpcs/src/util/arithmetic.rs | 4 +- multilinear_extensions/src/mle.rs | 2 +- multilinear_extensions/src/test.rs | 32 +-- poseidon/benches/hashing.rs | 2 +- poseidon/src/challenger.rs | 8 +- sumcheck/src/prover.rs | 14 +- sumcheck/src/test.rs | 8 +- sumcheck/src/util.rs | 8 +- sumcheck_macro/examples/expand.rs | 2 +- sumcheck_macro/src/lib.rs | 4 +- transcript/src/basic.rs | 4 +- transcript/src/lib.rs | 4 +- 57 files changed, 419 insertions(+), 424 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a3153a774..2329cd948 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -36,10 +36,10 @@ checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", "const-random", - "getrandom", + "getrandom 0.2.15", "once_cell", "version_check", - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -120,7 +120,7 @@ checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" dependencies = [ "colored", "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -315,7 +315,7 @@ dependencies = [ "ceno-examples", "ceno_emul", "itertools 0.13.0", - "rand", + "rand 0.8.5", "rkyv", "tiny-keccak", ] @@ -324,7 +324,7 @@ dependencies = [ name = "ceno_rt" version = "0.1.0" dependencies = [ - "getrandom", + "getrandom 0.2.15", "rkyv", ] @@ -355,8 +355,8 @@ dependencies = [ "pprof2", "prettytable-rs", "proptest", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "rayon", "serde", "serde_json", @@ -365,6 +365,7 @@ dependencies = [ "sumcheck", "tempfile", "thread_local", + "tiny-keccak", "tracing", "tracing-forest", "tracing-subscriber", @@ -485,7 +486,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ - "getrandom", + "getrandom 0.2.15", "once_cell", "tiny-keccak", ] @@ -739,7 +740,7 @@ dependencies = [ "p3-goldilocks", "p3-poseidon2", "p3-symmetric", - "rand_core", + "rand_core 0.6.4", "serde", ] @@ -771,16 +772,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] -name = "funty" -version = "2.0.0" +name = "forward_ref" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e" [[package]] -name = "gcd" -version = "2.3.0" +name = "funty" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "generic-array" @@ -811,10 +812,22 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets", +] + [[package]] name = "gimli" version = "0.31.1" @@ -967,6 +980,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.14" @@ -1091,8 +1113,8 @@ dependencies = [ "p3-symmetric", "plonky2", "poseidon", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "rayon", "serde", "transcript", @@ -1177,7 +1199,7 @@ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -1187,7 +1209,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -1281,7 +1303,7 @@ dependencies = [ "num-bigint", "num-integer", "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -1314,7 +1336,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/plonky3/plonky3?rev=b0591e9b#b0591e9b82d58d10f86359875b5d5fa96433b4cf" +source = "git+https://github.com/plonky3/plonky3?rev=949cce916f6cfdba9c5ed4b9e41de22cc684f7b5#949cce916f6cfdba9c5ed4b9e41de22cc684f7b5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1326,9 +1348,9 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/plonky3/plonky3?rev=b0591e9b#b0591e9b82d58d10f86359875b5d5fa96433b4cf" +source = "git+https://github.com/plonky3/plonky3?rev=949cce916f6cfdba9c5ed4b9e41de22cc684f7b5#949cce916f6cfdba9c5ed4b9e41de22cc684f7b5" dependencies = [ - "itertools 0.13.0", + "itertools 0.14.0", "p3-field", "p3-matrix", "p3-maybe-rayon", @@ -1339,16 +1361,18 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/plonky3/plonky3?rev=b0591e9b#b0591e9b82d58d10f86359875b5d5fa96433b4cf" +source = "git+https://github.com/plonky3/plonky3?rev=949cce916f6cfdba9c5ed4b9e41de22cc684f7b5#949cce916f6cfdba9c5ed4b9e41de22cc684f7b5" dependencies = [ - "itertools 0.13.0", + "forward_ref", + "itertools 0.14.0", "num-bigint", "num-integer", "num-traits", "nums", "p3-maybe-rayon", "p3-util", - "rand", + "paste", + "rand 0.9.0", "serde", "tracing", ] @@ -1356,7 +1380,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/plonky3/plonky3?rev=b0591e9b#b0591e9b82d58d10f86359875b5d5fa96433b4cf" +source = "git+https://github.com/plonky3/plonky3?rev=949cce916f6cfdba9c5ed4b9e41de22cc684f7b5#949cce916f6cfdba9c5ed4b9e41de22cc684f7b5" dependencies = [ "num-bigint", "p3-dft", @@ -1366,20 +1390,21 @@ dependencies = [ "p3-poseidon2", "p3-symmetric", "p3-util", - "rand", + "paste", + "rand 0.9.0", "serde", ] [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/plonky3/plonky3?rev=b0591e9b#b0591e9b82d58d10f86359875b5d5fa96433b4cf" +source = "git+https://github.com/plonky3/plonky3?rev=949cce916f6cfdba9c5ed4b9e41de22cc684f7b5#949cce916f6cfdba9c5ed4b9e41de22cc684f7b5" dependencies = [ - "itertools 0.13.0", + "itertools 0.14.0", "p3-field", "p3-maybe-rayon", "p3-util", - "rand", + "rand 0.9.0", "serde", "tracing", "transpose", @@ -1388,51 +1413,51 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/plonky3/plonky3?rev=b0591e9b#b0591e9b82d58d10f86359875b5d5fa96433b4cf" +source = "git+https://github.com/plonky3/plonky3?rev=949cce916f6cfdba9c5ed4b9e41de22cc684f7b5#949cce916f6cfdba9c5ed4b9e41de22cc684f7b5" [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/plonky3/plonky3?rev=b0591e9b#b0591e9b82d58d10f86359875b5d5fa96433b4cf" +source = "git+https://github.com/plonky3/plonky3?rev=949cce916f6cfdba9c5ed4b9e41de22cc684f7b5#949cce916f6cfdba9c5ed4b9e41de22cc684f7b5" dependencies = [ - "itertools 0.13.0", + "itertools 0.14.0", "p3-dft", "p3-field", "p3-matrix", "p3-symmetric", "p3-util", - "rand", + "rand 0.9.0", ] [[package]] name = "p3-poseidon" version = "0.1.0" -source = "git+https://github.com/plonky3/plonky3?rev=b0591e9b#b0591e9b82d58d10f86359875b5d5fa96433b4cf" +source = "git+https://github.com/plonky3/plonky3?rev=949cce916f6cfdba9c5ed4b9e41de22cc684f7b5#949cce916f6cfdba9c5ed4b9e41de22cc684f7b5" dependencies = [ "p3-field", "p3-mds", "p3-symmetric", - "rand", + "rand 0.9.0", ] [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/plonky3/plonky3?rev=b0591e9b#b0591e9b82d58d10f86359875b5d5fa96433b4cf" +source = "git+https://github.com/plonky3/plonky3?rev=949cce916f6cfdba9c5ed4b9e41de22cc684f7b5#949cce916f6cfdba9c5ed4b9e41de22cc684f7b5" dependencies = [ - "gcd", "p3-field", "p3-mds", "p3-symmetric", - "rand", + "p3-util", + "rand 0.9.0", ] [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/plonky3/plonky3?rev=b0591e9b#b0591e9b82d58d10f86359875b5d5fa96433b4cf" +source = "git+https://github.com/plonky3/plonky3?rev=949cce916f6cfdba9c5ed4b9e41de22cc684f7b5#949cce916f6cfdba9c5ed4b9e41de22cc684f7b5" dependencies = [ - "itertools 0.13.0", + "itertools 0.14.0", "p3-field", "serde", ] @@ -1440,7 +1465,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/plonky3/plonky3?rev=b0591e9b#b0591e9b82d58d10f86359875b5d5fa96433b4cf" +source = "git+https://github.com/plonky3/plonky3?rev=949cce916f6cfdba9c5ed4b9e41de22cc684f7b5#949cce916f6cfdba9c5ed4b9e41de22cc684f7b5" dependencies = [ "serde", ] @@ -1494,7 +1519,7 @@ checksum = "85f26b090b989aebdeaf6a4eed748c1fbcabf67e7273a22e4e0c877b63846d0f" dependencies = [ "ahash", "anyhow", - "getrandom", + "getrandom 0.2.15", "hashbrown 0.14.5", "itertools 0.11.0", "keccak-hash", @@ -1503,8 +1528,8 @@ dependencies = [ "plonky2_field", "plonky2_maybe_rayon", "plonky2_util", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "serde", "static_assertions", "unroll", @@ -1521,7 +1546,7 @@ dependencies = [ "itertools 0.11.0", "num", "plonky2_util", - "rand", + "rand 0.8.5", "serde", "static_assertions", "unroll", @@ -1584,7 +1609,7 @@ dependencies = [ "p3-poseidon2", "p3-symmetric", "plonky2", - "rand", + "rand 0.8.5", "serde", "unroll", ] @@ -1617,7 +1642,7 @@ version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -1674,8 +1699,8 @@ dependencies = [ "bitflags", "lazy_static", "num-traits", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "rand_xorshift", "regex-syntax 0.8.5", "rusty-fork", @@ -1749,8 +1774,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.1", + "zerocopy 0.8.20", ] [[package]] @@ -1760,17 +1796,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", "serde", ] +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.1", +] + [[package]] name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", +] + +[[package]] +name = "rand_core" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a88e0da7a2c97baa202165137c158d0a2e824ac465d13d81046727b34cb247d3" +dependencies = [ + "getrandom 0.3.1", + "zerocopy 0.8.20", ] [[package]] @@ -1779,7 +1835,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" dependencies = [ - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -1817,7 +1873,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom", + "getrandom 0.2.15", "libredox", "thiserror 1.0.69", ] @@ -2002,7 +2058,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" dependencies = [ "bitcoin_hashes", - "rand", + "rand 0.8.5", "secp256k1-sys", ] @@ -2533,6 +2589,15 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" version = "0.2.99" @@ -2729,6 +2794,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags", +] + [[package]] name = "wyz" version = "0.5.1" @@ -2745,7 +2819,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", - "zerocopy-derive", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde3bb8c68a8f3f1ed4ac9221aad6b10cece3e60a8e2ea54a6a2dec806d0084c" +dependencies = [ + "zerocopy-derive 0.8.20", ] [[package]] @@ -2758,3 +2841,14 @@ dependencies = [ "quote", "syn 2.0.90", ] + +[[package]] +name = "zerocopy-derive" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eea57037071898bf96a6da35fd626f4f27e9cee3ead2a6c703cf09d472b2e700" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] diff --git a/Cargo.toml b/Cargo.toml index 1b5c932b0..fdfae9561 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,13 +33,13 @@ crossbeam-channel = "0.5" itertools = "0.13" num-derive = "0.4" num-traits = "0.2" -p3-challenger = { git = "https://github.com/plonky3/plonky3", rev = "b0591e9b" } -p3-field = { git = "https://github.com/plonky3/plonky3", rev = "b0591e9b" } -p3-goldilocks = { git = "https://github.com/plonky3/plonky3", rev = "b0591e9b" } -p3-mds = { git = "https://github.com/Plonky3/Plonky3.git", rev = "b0591e9b" } -p3-poseidon = { git = "https://github.com/plonky3/plonky3", rev = "b0591e9b" } -p3-poseidon2 = { git = "https://github.com/plonky3/plonky3", rev = "b0591e9b" } -p3-symmetric = { git = "https://github.com/Plonky3/Plonky3.git", rev = "b0591e9b" } +p3-challenger = { git = "https://github.com/plonky3/plonky3", rev = "949cce916f6cfdba9c5ed4b9e41de22cc684f7b5" } +p3-field = { git = "https://github.com/plonky3/plonky3", rev = "949cce916f6cfdba9c5ed4b9e41de22cc684f7b5" } +p3-goldilocks = { git = "https://github.com/plonky3/plonky3", rev = "949cce916f6cfdba9c5ed4b9e41de22cc684f7b5" } +p3-mds = { git = "https://github.com/Plonky3/Plonky3.git", rev = "949cce916f6cfdba9c5ed4b9e41de22cc684f7b5" } +p3-poseidon = { git = "https://github.com/plonky3/plonky3", rev = "949cce916f6cfdba9c5ed4b9e41de22cc684f7b5" } +p3-poseidon2 = { git = "https://github.com/plonky3/plonky3", rev = "949cce916f6cfdba9c5ed4b9e41de22cc684f7b5" } +p3-symmetric = { git = "https://github.com/Plonky3/Plonky3.git", rev = "949cce916f6cfdba9c5ed4b9e41de22cc684f7b5" } paste = "1" plonky2 = "0.2" poseidon = { path = "./poseidon" } diff --git a/ceno_zkvm/Cargo.toml b/ceno_zkvm/Cargo.toml index 71e3d7a0a..f7fa0f099 100644 --- a/ceno_zkvm/Cargo.toml +++ b/ceno_zkvm/Cargo.toml @@ -52,6 +52,7 @@ cfg-if.workspace = true criterion.workspace = true pprof2.workspace = true proptest.workspace = true +tiny-keccak.workspace = true [build-dependencies] glob = "0.3" diff --git a/ceno_zkvm/examples/riscv_opcodes.rs b/ceno_zkvm/examples/riscv_opcodes.rs index 212d4af42..63fd089fe 100644 --- a/ceno_zkvm/examples/riscv_opcodes.rs +++ b/ceno_zkvm/examples/riscv_opcodes.rs @@ -9,7 +9,7 @@ use ceno_zkvm::{ with_panic_hook, }; use clap::Parser; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; use ceno_emul::{ CENO_PLATFORM, EmuContext, diff --git a/ceno_zkvm/src/bin/e2e.rs b/ceno_zkvm/src/bin/e2e.rs index c97d2b177..5b0bb18b8 100644 --- a/ceno_zkvm/src/bin/e2e.rs +++ b/ceno_zkvm/src/bin/e2e.rs @@ -7,7 +7,7 @@ use clap::Parser; use ff_ext::GoldilocksExt2; use itertools::Itertools; use mpcs::{Basefold, BasefoldRSParams}; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; use p3_goldilocks::Goldilocks; use std::{fs, panic}; use tracing::level_filters::LevelFilter; diff --git a/ceno_zkvm/src/chip_handler/global_state.rs b/ceno_zkvm/src/chip_handler/global_state.rs index 2a0b20b34..92af649b2 100644 --- a/ceno_zkvm/src/chip_handler/global_state.rs +++ b/ceno_zkvm/src/chip_handler/global_state.rs @@ -4,14 +4,12 @@ use super::GlobalStateRegisterMachineChipOperations; use crate::{ circuit_builder::CircuitBuilder, error::ZKVMError, expression::Expression, structs::RAMType, }; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; impl GlobalStateRegisterMachineChipOperations for CircuitBuilder<'_, E> { fn state_in(&mut self, pc: Expression, ts: Expression) -> Result<(), ZKVMError> { let record: Vec> = vec![ - Expression::Constant(E::BaseField::from_canonical_u64( - RAMType::GlobalState as u64, - )), + Expression::Constant(E::BaseField::from_u64(RAMType::GlobalState as u64)), pc, ts, ]; @@ -21,9 +19,7 @@ impl GlobalStateRegisterMachineChipOperations for CircuitB fn state_out(&mut self, pc: Expression, ts: Expression) -> Result<(), ZKVMError> { let record: Vec> = vec![ - Expression::Constant(E::BaseField::from_canonical_u64( - RAMType::GlobalState as u64, - )), + Expression::Constant(E::BaseField::from_u64(RAMType::GlobalState as u64)), pc, ts, ]; diff --git a/ceno_zkvm/src/chip_handler/utils.rs b/ceno_zkvm/src/chip_handler/utils.rs index e7460853d..b8f4e9276 100644 --- a/ceno_zkvm/src/chip_handler/utils.rs +++ b/ceno_zkvm/src/chip_handler/utils.rs @@ -3,7 +3,7 @@ use std::iter::successors; use crate::expression::Expression; use ff_ext::ExtensionField; use itertools::izip; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; pub fn rlc_chip_record( records: Vec>, diff --git a/ceno_zkvm/src/circuit_builder.rs b/ceno_zkvm/src/circuit_builder.rs index d88364246..b1fd2fb48 100644 --- a/ceno_zkvm/src/circuit_builder.rs +++ b/ceno_zkvm/src/circuit_builder.rs @@ -12,7 +12,7 @@ use crate::{ structs::{ProgramParams, ProvingKey, RAMType, VerifyingKey, WitnessId}, witness::RowMajorMatrix, }; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; /// namespace used for annotation, preserve meta info during circuit construction #[derive(Clone, Debug, Default, serde::Serialize)] @@ -269,7 +269,7 @@ impl ConstraintSystem { record: Vec>, ) -> Result<(), ZKVMError> { let rlc_record = self.rlc_chip_record( - std::iter::once(Expression::Constant(E::BaseField::from_canonical_u64( + std::iter::once(Expression::Constant(E::BaseField::from_u64( rom_type as u64, ))) .chain(record.clone()) diff --git a/ceno_zkvm/src/expression.rs b/ceno_zkvm/src/expression.rs index fc593929c..fdd13026a 100644 --- a/ceno_zkvm/src/expression.rs +++ b/ceno_zkvm/src/expression.rs @@ -9,7 +9,7 @@ use std::{ use ceno_emul::InsnKind; use ff_ext::{ExtensionField, SmallField}; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; use multilinear_extensions::virtual_poly::ArcMultilinearExtension; @@ -913,7 +913,7 @@ macro_rules! impl_from_unsigned { $( impl> From<$t> for Expression { fn from(value: $t) -> Self { - Expression::Constant(F::from_canonical_u64(value as u64)) + Expression::Constant(F::from_u64(value as u64)) } } )* @@ -928,7 +928,7 @@ macro_rules! impl_from_signed { impl> From<$t> for Expression { fn from(value: $t) -> Self { let reduced = (value as i128).rem_euclid(F::MODULUS_U64 as i128) as u64; - Expression::Constant(F::from_canonical_u64(reduced)) + Expression::Constant(F::from_u64(reduced)) } } )* @@ -1088,7 +1088,7 @@ mod tests { use super::{Expression, ToExpr, fmt}; use crate::circuit_builder::{CircuitBuilder, ConstraintSystem}; use ff_ext::{FieldInto, GoldilocksExt2}; - use p3_field::FieldAlgebra; + use p3_field::PrimeCharacteristicRing; #[test] fn test_expression_arithmetics() { diff --git a/ceno_zkvm/src/expression/monomial.rs b/ceno_zkvm/src/expression/monomial.rs index 06450c7f0..5c47fd056 100644 --- a/ceno_zkvm/src/expression/monomial.rs +++ b/ceno_zkvm/src/expression/monomial.rs @@ -82,7 +82,7 @@ mod tests { use super::*; use ff_ext::{FieldInto, FromUniformBytes, GoldilocksExt2 as E}; - use p3_field::FieldAlgebra; + use p3_field::PrimeCharacteristicRing; use p3_goldilocks::Goldilocks as F; use rand_chacha::{ChaChaRng, rand_core::SeedableRng}; @@ -99,7 +99,7 @@ mod tests { let y = || WitIn(1); let z = || WitIn(2); let n = || Constant(104u64.into_f()); - let m = || Constant(-F::from_canonical_u64(599)); + let m = || Constant(-F::from_u64(599)); let r = || Challenge(0, 1, E::ONE, E::ZERO); let test_exprs: &[Expression] = &[ diff --git a/ceno_zkvm/src/gadgets/is_lt.rs b/ceno_zkvm/src/gadgets/is_lt.rs index c323d7d3b..9fb9ae5e5 100644 --- a/ceno_zkvm/src/gadgets/is_lt.rs +++ b/ceno_zkvm/src/gadgets/is_lt.rs @@ -242,13 +242,7 @@ impl InnerLtConfig { lhs: u64, rhs: u64, ) -> Result<(), ZKVMError> { - self.assign_instance_field( - instance, - lkm, - F::from_canonical_u64(lhs), - F::from_canonical_u64(rhs), - lhs < rhs, - ) + self.assign_instance_field(instance, lkm, F::from_u64(lhs), F::from_u64(rhs), lhs < rhs) } /// Assign instance values to this configuration where the ordering is diff --git a/ceno_zkvm/src/gadgets/signed_ext.rs b/ceno_zkvm/src/gadgets/signed_ext.rs index 3f6be380c..a03b0edf1 100644 --- a/ceno_zkvm/src/gadgets/signed_ext.rs +++ b/ceno_zkvm/src/gadgets/signed_ext.rs @@ -7,7 +7,7 @@ use crate::{ witness::LkMultiplicity, }; use ff_ext::{ExtensionField, FieldInto}; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; use std::marker::PhantomData; /// Extract the most significant bit from an expression previously constrained @@ -103,7 +103,7 @@ impl SignedExtendConfig { }; assert_ux(lk_multiplicity, 2 * val - (msb << self.n_bits)); - set_val!(instance, self.msb, E::BaseField::from_canonical_u64(msb)); + set_val!(instance, self.msb, E::BaseField::from_u64(msb)); Ok(()) } diff --git a/ceno_zkvm/src/instructions/riscv/branch/branch_circuit.rs b/ceno_zkvm/src/instructions/riscv/branch/branch_circuit.rs index 6f0e3aef1..4447d1b0f 100644 --- a/ceno_zkvm/src/instructions/riscv/branch/branch_circuit.rs +++ b/ceno_zkvm/src/instructions/riscv/branch/branch_circuit.rs @@ -19,7 +19,7 @@ use crate::{ }, witness::LkMultiplicity, }; -pub use p3_field::FieldAlgebra; +pub use p3_field::PrimeCharacteristicRing; pub struct BranchCircuit(PhantomData<(E, I)>); @@ -151,8 +151,8 @@ impl Instruction for BranchCircuit Instruction for HaltInstruction { // read exit_code from arg0 (X10 register) let (_, lt_x10_cfg) = cb.register_read( || "read x10", - E::BaseField::from_canonical_u64(ceno_emul::Platform::reg_arg0() as u64), + E::BaseField::from_u64(ceno_emul::Platform::reg_arg0() as u64), prev_x10_ts.expr(), ecall_cfg.ts.expr() + Tracer::SUBCYCLE_RS2, exit_code, diff --git a/ceno_zkvm/src/instructions/riscv/ecall_insn.rs b/ceno_zkvm/src/instructions/riscv/ecall_insn.rs index 99bcb4ced..b0de2923c 100644 --- a/ceno_zkvm/src/instructions/riscv/ecall_insn.rs +++ b/ceno_zkvm/src/instructions/riscv/ecall_insn.rs @@ -12,7 +12,7 @@ use crate::{ }; use ceno_emul::{InsnKind::ECALL, PC_STEP_SIZE, Platform, StepRecord, Tracer}; use ff_ext::{ExtensionField, FieldInto}; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; pub struct EcallInstructionConfig { pub pc: WitIn, @@ -51,7 +51,7 @@ impl EcallInstructionConfig { // read syscall_id from x5 and write return value to x5 let (_, lt_x5_cfg) = cb.register_write( || "write x5", - E::BaseField::from_canonical_u64(Platform::reg_ecall() as u64), + E::BaseField::from_u64(Platform::reg_ecall() as u64), prev_x5_ts.expr(), ts.expr() + Tracer::SUBCYCLE_RS1, syscall_id.clone(), diff --git a/ceno_zkvm/src/instructions/riscv/insn_base.rs b/ceno_zkvm/src/instructions/riscv/insn_base.rs index a862d643a..ff78ea5d7 100644 --- a/ceno_zkvm/src/instructions/riscv/insn_base.rs +++ b/ceno_zkvm/src/instructions/riscv/insn_base.rs @@ -1,7 +1,7 @@ use ceno_emul::{Cycle, StepRecord, Word, WriteOp}; use ff_ext::{ExtensionField, FieldInto, SmallField}; use itertools::Itertools; -use p3_field::{Field, FieldAlgebra}; +use p3_field::{Field, PrimeCharacteristicRing}; use super::constants::{PC_STEP_SIZE, UINT_LIMBS, UInt}; use crate::{ @@ -436,7 +436,7 @@ impl MemAddr { .sum(); // Range check the middle bits, that is the low limb excluding the low bits. - let shift_right = E::BaseField::from_canonical_u64(1 << Self::N_LOW_BITS) + let shift_right = E::BaseField::from_u64(1 << Self::N_LOW_BITS) .inverse() .expr(); let mid_u14 = (&limbs[0] - low_sum) * shift_right; diff --git a/ceno_zkvm/src/instructions/riscv/jump/jalr.rs b/ceno_zkvm/src/instructions/riscv/jump/jalr.rs index b6bca9190..c911dd471 100644 --- a/ceno_zkvm/src/instructions/riscv/jump/jalr.rs +++ b/ceno_zkvm/src/instructions/riscv/jump/jalr.rs @@ -18,7 +18,7 @@ use crate::{ }; use ceno_emul::{InsnKind, PC_STEP_SIZE}; use ff_ext::FieldInto; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; pub struct JalrConfig { pub i_insn: IInstructionConfig, diff --git a/ceno_zkvm/src/instructions/riscv/memory/gadget.rs b/ceno_zkvm/src/instructions/riscv/memory/gadget.rs index f0e8e1040..ffa02378f 100644 --- a/ceno_zkvm/src/instructions/riscv/memory/gadget.rs +++ b/ceno_zkvm/src/instructions/riscv/memory/gadget.rs @@ -10,7 +10,7 @@ use crate::{ use ceno_emul::StepRecord; use ff_ext::{ExtensionField, FieldInto}; use itertools::izip; -use p3_field::{Field, FieldAlgebra}; +use p3_field::{Field, PrimeCharacteristicRing}; pub struct MemWordChange { prev_limb_bytes: Vec, @@ -76,7 +76,7 @@ impl MemWordChange { // extract the least significant byte from u16 limb let rs2_limb_bytes = alloc_bytes(cb, "rs2_limb[0]", 1)?; - let u8_base_inv = E::BaseField::from_canonical_u64(1 << 8).inverse(); + let u8_base_inv = E::BaseField::from_u64(1 << 8).inverse(); cb.assert_ux::<_, _, 8>( || "rs2_limb[0].le_bytes[1]", u8_base_inv.expr() * (&rs2_limbs[0] - rs2_limb_bytes[0].expr()), @@ -162,41 +162,40 @@ impl MemWordChange { match N_ZEROS { 0 => { for (&col, byte) in izip!(&self.prev_limb_bytes, prev_limb.to_le_bytes()) { - set_val!(instance, col, E::BaseField::from_canonical_u8(byte)); + set_val!(instance, col, E::BaseField::from_u8(byte)); lk_multiplicity.assert_ux::<8>(byte as u64); } set_val!( instance, self.rs2_limb_bytes[0], - E::BaseField::from_canonical_u8(rs2_limb.to_le_bytes()[0]) + E::BaseField::from_u8(rs2_limb.to_le_bytes()[0]) ); rs2_limb.to_le_bytes().into_iter().for_each(|byte| { lk_multiplicity.assert_ux::<8>(byte as u64); }); let change = if low_bits[0] == 0 { - E::BaseField::from_canonical_u8(rs2_limb.to_le_bytes()[0]) - - E::BaseField::from_canonical_u8(prev_limb.to_le_bytes()[0]) + E::BaseField::from_u8(rs2_limb.to_le_bytes()[0]) + - E::BaseField::from_u8(prev_limb.to_le_bytes()[0]) } else { - E::BaseField::from_canonical_u64((rs2_limb.to_le_bytes()[0] as u64) << 8) - - E::BaseField::from_canonical_u64((prev_limb.to_le_bytes()[1] as u64) << 8) + E::BaseField::from_u64((rs2_limb.to_le_bytes()[0] as u64) << 8) + - E::BaseField::from_u64((prev_limb.to_le_bytes()[1] as u64) << 8) }; let final_change = if low_bits[1] == 0 { change } else { - E::BaseField::from_canonical_u64(1u64 << 16) * change + E::BaseField::from_u64(1u64 << 16) * change }; set_val!(instance, self.expected_changes[0], change); set_val!(instance, self.expected_changes[1], final_change); } 1 => { let final_change = if low_bits[1] == 0 { - E::BaseField::from_canonical_u16(rs2_limb) - - E::BaseField::from_canonical_u16(prev_limb) + E::BaseField::from_u16(rs2_limb) - E::BaseField::from_u16(prev_limb) } else { - E::BaseField::from_canonical_u64((rs2_limb as u64) << 16) - - E::BaseField::from_canonical_u64((prev_limb as u64) << 16) + E::BaseField::from_u64((rs2_limb as u64) << 16) + - E::BaseField::from_u64((prev_limb as u64) << 16) }; set_val!(instance, self.expected_changes[0], final_change); } diff --git a/ceno_zkvm/src/instructions/riscv/memory/load.rs b/ceno_zkvm/src/instructions/riscv/memory/load.rs index 4cd1f1650..d484999b0 100644 --- a/ceno_zkvm/src/instructions/riscv/memory/load.rs +++ b/ceno_zkvm/src/instructions/riscv/memory/load.rs @@ -19,7 +19,7 @@ use crate::{ use ceno_emul::{ByteAddr, InsnKind, StepRecord}; use ff_ext::{ExtensionField, FieldInto}; use itertools::izip; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; use std::marker::PhantomData; pub struct LoadConfig { @@ -226,11 +226,7 @@ impl Instruction for LoadInstruction Instruction for LoadInstruction(byte as u64); - set_val!(instance, col, E::BaseField::from_canonical_u8(byte)); + set_val!(instance, col, E::BaseField::from_u8(byte)); } } let val = match I::INST_KIND { diff --git a/ceno_zkvm/src/instructions/riscv/mul.rs b/ceno_zkvm/src/instructions/riscv/mul.rs index e7b989326..87c6aaf99 100644 --- a/ceno_zkvm/src/instructions/riscv/mul.rs +++ b/ceno_zkvm/src/instructions/riscv/mul.rs @@ -82,7 +82,7 @@ use std::marker::PhantomData; use ceno_emul::{InsnKind, StepRecord}; use ff_ext::{ExtensionField, SmallField}; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; use p3_goldilocks::Goldilocks; use crate::{ @@ -354,8 +354,8 @@ impl Instruction for MulhInstructionBas } MulhSignDependencies::UU { constrain_rd } => { // assign nonzero value (u32::MAX - rd) - let rd_f = E::BaseField::from_canonical_u64(rd as u64); - let avoid_f = E::BaseField::from_canonical_u32(u32::MAX); + let rd_f = E::BaseField::from_u64(rd as u64); + let avoid_f = E::BaseField::from_u32(u32::MAX); constrain_rd.assign_instance(instance, rd_f, avoid_f)?; // only take the low part of the product @@ -367,12 +367,8 @@ impl Instruction for MulhInstructionBas assert_eq!(prod_lo, rd); let prod_hi = prod >> BIT_WIDTH; - let avoid_f = E::BaseField::from_canonical_u32(u32::MAX); - constrain_rd.assign_instance( - instance, - E::BaseField::from_canonical_u64(prod_hi), - avoid_f, - )?; + let avoid_f = E::BaseField::from_u32(u32::MAX); + constrain_rd.assign_instance(instance, E::BaseField::from_u64(prod_hi), avoid_f)?; prod_hi as u32 } MulhSignDependencies::SU { diff --git a/ceno_zkvm/src/scheme.rs b/ceno_zkvm/src/scheme.rs index e96a0a3f1..dded3ebd7 100644 --- a/ceno_zkvm/src/scheme.rs +++ b/ceno_zkvm/src/scheme.rs @@ -1,7 +1,7 @@ use ff_ext::ExtensionField; use itertools::Itertools; use mpcs::PolynomialCommitmentScheme; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; use serde::{Deserialize, Serialize, de::DeserializeOwned}; use std::{collections::BTreeMap, fmt::Debug}; use sumcheck::structs::IOPProverMessage; @@ -103,19 +103,17 @@ impl PublicValues { } pub fn to_vec(&self) -> Vec> { vec![ - vec![E::BaseField::from_canonical_u64( - (self.exit_code & 0xffff) as u64, - )], - vec![E::BaseField::from_canonical_u64( + vec![E::BaseField::from_u64((self.exit_code & 0xffff) as u64)], + vec![E::BaseField::from_u64( ((self.exit_code >> 16) & 0xffff) as u64, )], - vec![E::BaseField::from_canonical_u64(self.init_pc as u64)], - vec![E::BaseField::from_canonical_u64(self.init_cycle as u64)], - vec![E::BaseField::from_canonical_u64(self.end_pc as u64)], - vec![E::BaseField::from_canonical_u64(self.end_cycle as u64)], + vec![E::BaseField::from_u64(self.init_pc as u64)], + vec![E::BaseField::from_u64(self.init_cycle as u64)], + vec![E::BaseField::from_u64(self.end_pc as u64)], + vec![E::BaseField::from_u64(self.end_cycle as u64)], self.public_io .iter() - .map(|e| E::BaseField::from_canonical_u64(*e as u64)) + .map(|e| E::BaseField::from_u64(*e as u64)) .collect(), ] } diff --git a/ceno_zkvm/src/scheme/mock_prover.rs b/ceno_zkvm/src/scheme/mock_prover.rs index 2e605df50..7154d96d8 100644 --- a/ceno_zkvm/src/scheme/mock_prover.rs +++ b/ceno_zkvm/src/scheme/mock_prover.rs @@ -22,7 +22,7 @@ use ff_ext::{ExtensionField, GoldilocksExt2, SmallField}; use generic_static::StaticTypeMap; use itertools::{Itertools, chain, enumerate, izip}; use multilinear_extensions::{mle::IntoMLEs, virtual_poly::ArcMultilinearExtension}; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; use rand::thread_rng; use std::{ cmp::max, @@ -1328,12 +1328,9 @@ mod tests { let _ = RangeCheckCircuit::construct_circuit(&mut builder).unwrap(); let wits_in = vec![ - vec![ - Goldilocks::from_canonical_u64(3u64), - Goldilocks::from_canonical_u64(5u64), - ] - .into_mle() - .into(), + vec![Goldilocks::from_u64(3u64), Goldilocks::from_u64(5u64)] + .into_mle() + .into(), ]; let challenge = [1.into_f(), 1000.into_f()]; @@ -1365,9 +1362,7 @@ mod tests { GoldilocksExt2::ONE, GoldilocksExt2::ZERO, )), - Box::new(Expression::Constant(Goldilocks::from_canonical_u64( - U5 as u64 - ))), + Box::new(Expression::Constant(Goldilocks::from_u64(U5 as u64))), )), Box::new(Expression::Challenge( 0, diff --git a/ceno_zkvm/src/scheme/prover.rs b/ceno_zkvm/src/scheme/prover.rs index 08ef9c9bd..97ae87e6e 100644 --- a/ceno_zkvm/src/scheme/prover.rs +++ b/ceno_zkvm/src/scheme/prover.rs @@ -11,7 +11,7 @@ use multilinear_extensions::{ util::ceil_log2, virtual_poly::{ArcMultilinearExtension, build_eq_x_r_vec}, }; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; use rayon::iter::{IntoParallelRefIterator, ParallelIterator}; use sumcheck::{ macros::{entered_span, exit_span}, diff --git a/ceno_zkvm/src/scheme/tests.rs b/ceno_zkvm/src/scheme/tests.rs index 691fd6cd9..da458b27b 100644 --- a/ceno_zkvm/src/scheme/tests.rs +++ b/ceno_zkvm/src/scheme/tests.rs @@ -28,7 +28,7 @@ use mpcs::{Basefold, BasefoldDefault, BasefoldRSParams, PolynomialCommitmentSche use multilinear_extensions::{ mle::IntoMLE, util::ceil_log2, virtual_poly::ArcMultilinearExtension, }; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; use transcript::{BasicTranscript, BasicTranscriptWithStat, StatisticRecorder, Transcript}; use super::{ diff --git a/ceno_zkvm/src/scheme/utils.rs b/ceno_zkvm/src/scheme/utils.rs index 85eebce13..9c0478006 100644 --- a/ceno_zkvm/src/scheme/utils.rs +++ b/ceno_zkvm/src/scheme/utils.rs @@ -416,7 +416,7 @@ mod tests { util::ceil_log2, virtual_poly::ArcMultilinearExtension, }; - use p3_field::{FieldAlgebra, FieldExtensionAlgebra}; + use p3_field::PrimeCharacteristicRing; use crate::{ circuit_builder::{CircuitBuilder, ConstraintSystem}, @@ -433,10 +433,8 @@ mod tests { type E = GoldilocksExt2; let num_product_fanin = 2; let last_layer: Vec> = vec![ - vec![E::ONE, E::from_canonical_u64(2u64)].into_mle().into(), - vec![E::from_canonical_u64(3u64), E::from_canonical_u64(4u64)] - .into_mle() - .into(), + vec![E::ONE, E::from_u64(2u64)].into_mle().into(), + vec![E::from_u64(3u64), E::from_u64(4u64)].into_mle().into(), ]; let num_vars = ceil_log2(last_layer[0].evaluations().len()) + 1; let res = infer_tower_product_witness(num_vars, last_layer.clone(), 2); @@ -446,7 +444,7 @@ mod tests { assert!(left.len() == 1 && right.len() == 1); left[0] * right[0] }, - |out| E::from_base(out) + |out| out.into() ); let expected_final_product: E = last_layer .iter() @@ -469,30 +467,24 @@ mod tests { let num_product_fanin = 2; // [[1, 2], [3, 4], [5, 6], [7, 8]] let input_mles: Vec> = vec![ - vec![E::ONE, E::from_canonical_u64(2u64)].into_mle().into(), - vec![E::from_canonical_u64(3u64), E::from_canonical_u64(4u64)] - .into_mle() - .into(), - vec![E::from_canonical_u64(5u64), E::from_canonical_u64(6u64)] - .into_mle() - .into(), - vec![E::from_canonical_u64(7u64), E::from_canonical_u64(8u64)] - .into_mle() - .into(), + vec![E::ONE, E::from_u64(2u64)].into_mle().into(), + vec![E::from_u64(3u64), E::from_u64(4u64)].into_mle().into(), + vec![E::from_u64(5u64), E::from_u64(6u64)].into_mle().into(), + vec![E::from_u64(7u64), E::from_u64(8u64)].into_mle().into(), ]; let res = interleaving_mles_to_mles(&input_mles, 2, num_product_fanin, E::ONE); // [[1, 3, 5, 7], [2, 4, 6, 8]] assert_eq!(res[0].get_ext_field_vec(), vec![ E::ONE, - E::from_canonical_u64(3u64), - E::from_canonical_u64(5u64), - E::from_canonical_u64(7u64) + E::from_u64(3u64), + E::from_u64(5u64), + E::from_u64(7u64) ],); assert_eq!(res[1].get_ext_field_vec(), vec![ - E::from_canonical_u64(2u64), - E::from_canonical_u64(4u64), - E::from_canonical_u64(6u64), - E::from_canonical_u64(8u64) + E::from_u64(2u64), + E::from_u64(4u64), + E::from_u64(6u64), + E::from_u64(8u64) ],); } @@ -504,46 +496,38 @@ mod tests { // case 1: test limb level padding // [[1,2],[3,4],[5,6]]] let input_mles: Vec> = vec![ - vec![E::ONE, E::from_canonical_u64(2u64)].into_mle().into(), - vec![E::from_canonical_u64(3u64), E::from_canonical_u64(4u64)] - .into_mle() - .into(), - vec![E::from_canonical_u64(5u64), E::from_canonical_u64(6u64)] - .into_mle() - .into(), + vec![E::ONE, E::from_u64(2u64)].into_mle().into(), + vec![E::from_u64(3u64), E::from_u64(4u64)].into_mle().into(), + vec![E::from_u64(5u64), E::from_u64(6u64)].into_mle().into(), ]; let res = interleaving_mles_to_mles(&input_mles, 2, num_product_fanin, E::ZERO); // [[1, 3, 5, 0], [2, 4, 6, 0]] assert_eq!(res[0].get_ext_field_vec(), vec![ E::ONE, - E::from_canonical_u64(3u64), - E::from_canonical_u64(5u64), - E::from_canonical_u64(0u64) + E::from_u64(3u64), + E::from_u64(5u64), + E::from_u64(0u64) ],); assert_eq!(res[1].get_ext_field_vec(), vec![ - E::from_canonical_u64(2u64), - E::from_canonical_u64(4u64), - E::from_canonical_u64(6u64), - E::from_canonical_u64(0u64) + E::from_u64(2u64), + E::from_u64(4u64), + E::from_u64(6u64), + E::from_u64(0u64) ],); // case 2: test instance level padding // [[1,0],[3,0],[5,0]]] let input_mles: Vec> = vec![ - vec![E::ONE, E::from_canonical_u64(0u64)].into_mle().into(), - vec![E::from_canonical_u64(3u64), E::from_canonical_u64(0u64)] - .into_mle() - .into(), - vec![E::from_canonical_u64(5u64), E::from_canonical_u64(0u64)] - .into_mle() - .into(), + vec![E::ONE, E::from_u64(0u64)].into_mle().into(), + vec![E::from_u64(3u64), E::from_u64(0u64)].into_mle().into(), + vec![E::from_u64(5u64), E::from_u64(0u64)].into_mle().into(), ]; let res = interleaving_mles_to_mles(&input_mles, 1, num_product_fanin, E::ONE); // [[1, 3, 5, 1], [1, 1, 1, 1]] assert_eq!(res[0].get_ext_field_vec(), vec![ E::ONE, - E::from_canonical_u64(3u64), - E::from_canonical_u64(5u64), + E::from_u64(3u64), + E::from_u64(5u64), E::ONE ],); assert_eq!(res[1].get_ext_field_vec(), vec![E::ONE; 4],); @@ -555,14 +539,14 @@ mod tests { let num_product_fanin = 2; // one instance, 2 mles: [[2], [3]] let input_mles: Vec> = vec![ - vec![E::from_canonical_u64(2u64)].into_mle().into(), - vec![E::from_canonical_u64(3u64)].into_mle().into(), + vec![E::from_u64(2u64)].into_mle().into(), + vec![E::from_u64(3u64)].into_mle().into(), ]; let res = interleaving_mles_to_mles(&input_mles, 1, num_product_fanin, E::ONE); // [[2, 3], [1, 1]] assert_eq!(res[0].get_ext_field_vec(), vec![ - E::from_canonical_u64(2u64), - E::from_canonical_u64(3u64) + E::from_u64(2u64), + E::from_u64(3u64) ],); assert_eq!(res[1].get_ext_field_vec(), vec![E::ONE, E::ONE],); } @@ -574,13 +558,13 @@ mod tests { let q: Vec> = vec![ vec![1, 2, 3, 4] .into_iter() - .map(E::from_canonical_u64) + .map(E::from_u64) .collect_vec() .into_mle() .into(), vec![5, 6, 7, 8] .into_iter() - .map(E::from_canonical_u64) + .map(E::from_u64) .collect_vec() .into_mle() .into(), @@ -614,53 +598,32 @@ mod tests { assert_eq!( layer[0].evaluations().clone(), FieldType::::Ext(vec![ - vec![1 + 5] - .into_iter() - .map(E::from_canonical_u64) - .sum::(), - vec![2 + 6] - .into_iter() - .map(E::from_canonical_u64) - .sum::() + vec![1 + 5].into_iter().map(E::from_u64).sum::(), + vec![2 + 6].into_iter().map(E::from_u64).sum::() ]) ); // next layer p2 assert_eq!( layer[1].evaluations().clone(), FieldType::::Ext(vec![ - vec![3 + 7] - .into_iter() - .map(E::from_canonical_u64) - .sum::(), - vec![4 + 8] - .into_iter() - .map(E::from_canonical_u64) - .sum::() + vec![3 + 7].into_iter().map(E::from_u64).sum::(), + vec![4 + 8].into_iter().map(E::from_u64).sum::() ]) ); // next layer q1 assert_eq!( layer[2].evaluations().clone(), FieldType::::Ext(vec![ - vec![5].into_iter().map(E::from_canonical_u64).sum::(), - vec![2 * 6] - .into_iter() - .map(E::from_canonical_u64) - .sum::() + vec![5].into_iter().map(E::from_u64).sum::(), + vec![2 * 6].into_iter().map(E::from_u64).sum::() ]) ); // next layer q2 assert_eq!( layer[3].evaluations().clone(), FieldType::::Ext(vec![ - vec![3 * 7] - .into_iter() - .map(E::from_canonical_u64) - .sum::(), - vec![4 * 8] - .into_iter() - .map(E::from_canonical_u64) - .sum::() + vec![3 * 7].into_iter().map(E::from_u64).sum::(), + vec![4 * 8].into_iter().map(E::from_u64).sum::() ]) ); @@ -673,7 +636,7 @@ mod tests { FieldType::::Ext(vec![ vec![(1 + 5) * (3 * 7) + (3 + 7) * 5] .into_iter() - .map(E::from_canonical_u64) + .map(E::from_u64) .sum::(), ]) ); @@ -684,7 +647,7 @@ mod tests { FieldType::::Ext(vec![ vec![(2 + 6) * (4 * 8) + (4 + 8) * (2 * 6)] .into_iter() - .map(E::from_canonical_u64) + .map(E::from_u64) .sum::(), ]) ); @@ -693,10 +656,7 @@ mod tests { layer[2].evaluations().clone(), // q12 * q11 FieldType::::Ext(vec![ - vec![(3 * 7) * 5] - .into_iter() - .map(E::from_canonical_u64) - .sum::(), + vec![(3 * 7) * 5].into_iter().map(E::from_u64).sum::(), ]) ); // q2 @@ -706,7 +666,7 @@ mod tests { FieldType::::Ext(vec![ vec![(4 * 8) * (2 * 6)] .into_iter() - .map(E::from_canonical_u64) + .map(E::from_u64) .sum::(), ]) ); @@ -727,9 +687,9 @@ mod tests { let res = wit_infer_by_expr( &[], &[ - vec![B::from_canonical_u64(1)].into_mle().into(), - vec![B::from_canonical_u64(2)].into_mle().into(), - vec![B::from_canonical_u64(3)].into_mle().into(), + vec![B::from_u64(1)].into_mle().into(), + vec![B::from_u64(2)].into_mle().into(), + vec![B::from_u64(3)].into_mle().into(), ], &[], &[], @@ -758,9 +718,9 @@ mod tests { let res = wit_infer_by_expr( &[], &[ - vec![B::from_canonical_u64(1)].into_mle().into(), - vec![B::from_canonical_u64(2)].into_mle().into(), - vec![B::from_canonical_u64(3)].into_mle().into(), + vec![B::from_u64(1)].into_mle().into(), + vec![B::from_u64(2)].into_mle().into(), + vec![B::from_u64(3)].into_mle().into(), ], &[], &[], diff --git a/ceno_zkvm/src/scheme/verifier.rs b/ceno_zkvm/src/scheme/verifier.rs index 3e66cfadb..bc104156e 100644 --- a/ceno_zkvm/src/scheme/verifier.rs +++ b/ceno_zkvm/src/scheme/verifier.rs @@ -225,8 +225,7 @@ impl> ZKVMVerifier .copied() .product::(); } - logup_sum -= E::from_canonical_u64(dummy_table_item_multiplicity as u64) - * dummy_table_item.inverse(); + logup_sum -= E::from_u64(dummy_table_item_multiplicity as u64) * dummy_table_item.inverse(); // check logup relation across all proofs if logup_sum != E::ZERO { diff --git a/ceno_zkvm/src/state.rs b/ceno_zkvm/src/state.rs index 7761d9b60..913ff80c9 100644 --- a/ceno_zkvm/src/state.rs +++ b/ceno_zkvm/src/state.rs @@ -6,7 +6,7 @@ use crate::{ expression::{Expression, ToExpr}, structs::RAMType, }; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; pub trait StateCircuit { fn initial_global_state( @@ -24,9 +24,7 @@ impl StateCircuit for GlobalState { circuit_builder: &mut crate::circuit_builder::CircuitBuilder, ) -> Result, ZKVMError> { let states: Vec> = vec![ - Expression::Constant(E::BaseField::from_canonical_u64( - RAMType::GlobalState as u64, - )), + Expression::Constant(E::BaseField::from_u64(RAMType::GlobalState as u64)), circuit_builder.query_init_pc()?.expr(), circuit_builder.query_init_cycle()?.expr(), ]; @@ -38,9 +36,7 @@ impl StateCircuit for GlobalState { circuit_builder: &mut crate::circuit_builder::CircuitBuilder, ) -> Result, crate::error::ZKVMError> { let states: Vec> = vec![ - Expression::Constant(E::BaseField::from_canonical_u64( - RAMType::GlobalState as u64, - )), + Expression::Constant(E::BaseField::from_u64(RAMType::GlobalState as u64)), circuit_builder.query_end_pc()?.expr(), circuit_builder.query_end_cycle()?.expr(), ]; diff --git a/ceno_zkvm/src/tables/program.rs b/ceno_zkvm/src/tables/program.rs index be95950cc..7b3f792c0 100644 --- a/ceno_zkvm/src/tables/program.rs +++ b/ceno_zkvm/src/tables/program.rs @@ -17,7 +17,7 @@ use ceno_emul::{ }; use ff_ext::{ExtensionField, FieldInto, SmallField}; use itertools::Itertools; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; use rayon::iter::{IndexedParallelIterator, IntoParallelIterator, ParallelIterator}; /// This structure establishes the order of the fields in instruction records, common to the program table and circuit fetches. @@ -189,11 +189,7 @@ impl TableCircuit for ProgramTableCircuit { .with_min_len(MIN_PAR_SIZE) .zip(prog_mlt.into_par_iter()) .for_each(|(row, mlt)| { - set_val!( - row, - config.mlt, - E::BaseField::from_canonical_u64(mlt as u64) - ); + set_val!(row, config.mlt, E::BaseField::from_u64(mlt as u64)); }); Ok(witness) diff --git a/ceno_zkvm/src/tables/ram/ram_impl.rs b/ceno_zkvm/src/tables/ram/ram_impl.rs index bffb4e94b..ee75405a1 100644 --- a/ceno_zkvm/src/tables/ram/ram_impl.rs +++ b/ceno_zkvm/src/tables/ram/ram_impl.rs @@ -454,7 +454,7 @@ mod tests { use ceno_emul::WORD_SIZE; use ff_ext::GoldilocksExt2 as E; use itertools::Itertools; - use p3_field::FieldAlgebra; + use p3_field::PrimeCharacteristicRing; use p3_goldilocks::Goldilocks as F; #[test] @@ -494,7 +494,7 @@ mod tests { let addr_padded_view = wit.column_padded(addr_column + cb.cs.num_witin as usize); // Expect addresses to proceed consecutively inside the padding as well let expected = successors(Some(addr_padded_view[0]), |idx| { - Some(*idx + F::from_canonical_u64(WORD_SIZE as u64)) + Some(*idx + F::from_u64(WORD_SIZE as u64)) }) .take(next_pow2_instance_padding(wit.num_instances())) .collect::>(); diff --git a/ceno_zkvm/src/tables/range/range_impl.rs b/ceno_zkvm/src/tables/range/range_impl.rs index 8091c14fb..4671b123d 100644 --- a/ceno_zkvm/src/tables/range/range_impl.rs +++ b/ceno_zkvm/src/tables/range/range_impl.rs @@ -76,8 +76,8 @@ impl RangeTableConfig { .zip(mlts.into_par_iter()) .zip(content.into_par_iter()) .for_each(|((row, mlt), i)| { - set_val!(row, self.mlt, F::from_canonical_u64(mlt as u64)); - set_val!(row, offset_range, F::from_canonical_u64(i)); + set_val!(row, self.mlt, F::from_u64(mlt as u64)); + set_val!(row, offset_range, F::from_u64(i)); }); Ok(witness) diff --git a/ceno_zkvm/src/uint.rs b/ceno_zkvm/src/uint.rs index 2539a07c9..bb5102fa9 100644 --- a/ceno_zkvm/src/uint.rs +++ b/ceno_zkvm/src/uint.rs @@ -16,7 +16,7 @@ use crate::{ use ark_std::iterable::Iterable; use ff_ext::{ExtensionField, SmallField}; use itertools::{Itertools, enumerate}; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; use std::{ borrow::Cow, mem::{self}, @@ -157,7 +157,7 @@ impl UIntLimbs { limbs .into_iter() .take(Self::NUM_LIMBS) - .map(|limb| Expression::Constant(E::BaseField::from_canonical_u64(limb.into()))) + .map(|limb| Expression::Constant(E::BaseField::from_u64(limb.into()))) .collect::>>(), ), carries: None, @@ -234,7 +234,7 @@ impl UIntLimbs { for (wire, limb) in wires.iter().zip( limbs_values .iter() - .map(|v| E::BaseField::from_canonical_u64(*v as u64)) + .map(|v| E::BaseField::from_u64(*v as u64)) .chain(std::iter::repeat(E::BaseField::ZERO)), ) { instance[wire.id as usize] = limb; @@ -260,7 +260,7 @@ impl UIntLimbs { for (wire, carry) in carries.iter().zip( carry_values .iter() - .map(|v| E::BaseField::from_canonical_u64(Into::::into(*v))) + .map(|v| E::BaseField::from_u64(Into::::into(*v))) .chain(std::iter::repeat(E::BaseField::ZERO)), ) { instance[wire.id as usize] = carry; @@ -445,7 +445,7 @@ impl UIntLimbs { pub fn counter_vector(size: usize) -> Vec> { let num_vars = ceil_log2(size); let number_of_limbs = num_vars.div_ceil(C); - let cell_modulo = F::from_canonical_u64(1 << C); + let cell_modulo = F::from_u64(1 << C); let mut res = vec![vec![F::ZERO; number_of_limbs]]; @@ -712,7 +712,7 @@ impl<'a, T: Into + From + Copy + Default> Value<'a, T> { pub fn u16_fields(&self) -> Vec { self.limbs .iter() - .map(|v| F::from_canonical_u64(*v as u64)) + .map(|v| F::from_u64(*v as u64)) .collect_vec() } diff --git a/ceno_zkvm/src/uint/arithmetic.rs b/ceno_zkvm/src/uint/arithmetic.rs index 8dd24e47a..94424ddb6 100644 --- a/ceno_zkvm/src/uint/arithmetic.rs +++ b/ceno_zkvm/src/uint/arithmetic.rs @@ -9,7 +9,7 @@ use crate::{ gadgets::AssertLtConfig, instructions::riscv::config::IsEqualConfig, }; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; impl UIntLimbs { const POW_OF_C: usize = 2_usize.pow(C as u32); @@ -83,7 +83,7 @@ impl UIntLimbs { // convert Expression::Constant to limbs let b_limbs = (0..Self::NUM_LIMBS) .map(|i| { - Expression::Constant(E::BaseField::from_canonical_u64( + Expression::Constant(E::BaseField::from_u64( (b >> (C * i)) & Self::LIMB_BIT_MASK, )) }) @@ -486,13 +486,10 @@ mod tests { let wit: Vec = witness_values .iter() .cloned() - .map(E::from_canonical_u64) + .map(E::from_u64) .collect_vec(); uint_c.expr().iter().zip(result).for_each(|(c, ret)| { - assert_eq!( - eval_by_expr(&wit, &[], &challenges, c), - E::from_canonical_u64(ret) - ); + assert_eq!(eval_by_expr(&wit, &[], &challenges, c), E::from_u64(ret)); }); // overflow @@ -666,13 +663,10 @@ mod tests { let wit: Vec = witness_values .iter() .cloned() - .map(E::from_canonical_u64) + .map(E::from_u64) .collect_vec(); uint_c.expr().iter().zip(result).for_each(|(c, ret)| { - assert_eq!( - eval_by_expr(&wit, &[], &challenges, c), - E::from_canonical_u64(ret) - ); + assert_eq!(eval_by_expr(&wit, &[], &challenges, c), E::from_u64(ret)); }); // overflow @@ -700,7 +694,7 @@ mod tests { use multilinear_extensions::{ mle::DenseMultilinearExtension, virtual_poly::ArcMultilinearExtension, }; - use p3_field::FieldAlgebra; + use p3_field::PrimeCharacteristicRing; type E = GoldilocksExt2; // 18446744069414584321 @@ -715,7 +709,7 @@ mod tests { .map(|a| { let mle: ArcMultilinearExtension = DenseMultilinearExtension::from_evaluation_vec_smart(0, vec![ - E::BaseField::from_canonical_u64(*a), + E::BaseField::from_u64(*a), ]) .into(); mle diff --git a/ceno_zkvm/src/utils.rs b/ceno_zkvm/src/utils.rs index 8a6a399f2..720b0c5db 100644 --- a/ceno_zkvm/src/utils.rs +++ b/ceno_zkvm/src/utils.rs @@ -13,9 +13,9 @@ use transcript::Transcript; pub fn i64_to_base(x: i64) -> F { if x >= 0 { - F::from_canonical_u64(x as u64) + F::from_u64(x as u64) } else { - -F::from_canonical_u64((-x) as u64) + -F::from_u64((-x) as u64) } } @@ -124,7 +124,7 @@ pub(crate) fn eq_eval_less_or_equal_than(max_idx: usize, a: & let mut running_product = vec![E::ZERO; b.len() + 1]; running_product[b.len()] = E::ONE; for i in (0..b.len()).rev() { - let bit = E::from_canonical_u64(((max_idx >> i) & 1) as u64); + let bit = E::from_u64(((max_idx >> i) & 1) as u64); running_product[i] = running_product[i + 1] * (a[i] * b[i] * bit + (E::ONE - a[i]) * (E::ONE - b[i]) * (E::ONE - bit)); } @@ -155,13 +155,13 @@ pub(crate) fn eq_eval_less_or_equal_than(max_idx: usize, a: & /// a, b, is constant /// the result M(r0, r1,... rn) = r0 + r1 * 2 + r2 * 2^2 + .... rn * 2^n pub fn eval_wellform_address_vec(offset: u64, scaled: u64, r: &[E]) -> E { - let (offset, scaled) = (E::from_canonical_u64(offset), E::from_canonical_u64(scaled)); + let (offset, scaled) = (E::from_u64(offset), E::from_u64(scaled)); offset + scaled * r.iter() .scan(E::ONE, |state, x| { let result = *x * *state; - *state *= E::from_canonical_u64(2); // Update the state for the next power of 2 + *state *= E::from_u64(2); // Update the state for the next power of 2 Some(result) }) .sum::() diff --git a/ceno_zkvm/src/virtual_polys.rs b/ceno_zkvm/src/virtual_polys.rs index c8003395e..ddb73db32 100644 --- a/ceno_zkvm/src/virtual_polys.rs +++ b/ceno_zkvm/src/virtual_polys.rs @@ -176,7 +176,7 @@ mod tests { mle::IntoMLE, virtual_poly::{ArcMultilinearExtension, VPAuxInfo, VirtualPolynomial}, }; - use p3_field::FieldAlgebra; + use p3_field::PrimeCharacteristicRing; use p3_goldilocks::Goldilocks; use sumcheck::structs::{IOPProverState, IOPVerifierState}; use transcript::BasicTranscript as Transcript; @@ -196,7 +196,7 @@ mod tests { let y = cb.create_witin(|| "y"); let wits_in: Vec> = (0..cs.num_witin as usize) - .map(|_| vec![Goldilocks::from_canonical_u64(1)].into_mle().into()) + .map(|_| vec![Goldilocks::from_u64(1)].into_mle().into()) .collect(); let mut virtual_polys = VirtualPolynomials::new(1, 0); @@ -231,7 +231,7 @@ mod tests { fn test_sumcheck_different_degree() { let max_num_vars = 3; let fn_eval = |fs: &[ArcMultilinearExtension]| -> E { - let base_2 = Goldilocks::from_canonical_u64(2); + let base_2 = Goldilocks::from_u64(2); let evals = fs.iter().fold( vec![Goldilocks::ONE; 1 << fs[0].num_vars()], diff --git a/ceno_zkvm/src/witness.rs b/ceno_zkvm/src/witness.rs index 2745f9c02..d471ce958 100644 --- a/ceno_zkvm/src/witness.rs +++ b/ceno_zkvm/src/witness.rs @@ -1,6 +1,6 @@ use itertools::izip; use multilinear_extensions::mle::{DenseMultilinearExtension, IntoMLE}; -use p3_field::{Field, FieldAlgebra}; +use p3_field::{Field, PrimeCharacteristicRing}; use rayon::{ iter::{IntoParallelIterator, ParallelIterator}, slice::ParallelSliceMut, @@ -46,7 +46,7 @@ pub struct RowMajorMatrix { padding_strategy: InstancePaddingStrategy, } -impl RowMajorMatrix { +impl RowMajorMatrix { pub fn new(num_rows: usize, num_col: usize, padding_strategy: InstancePaddingStrategy) -> Self { RowMajorMatrix { values: (0..num_rows * num_col) @@ -89,9 +89,7 @@ impl RowMajorMat let padding_iter = (num_instances..num_instances + num_padding_instances).map(|i| { match &self.padding_strategy { - InstancePaddingStrategy::Custom(fun) => { - T::from_canonical_u64(fun(i as u64, column as u64)) - } + InstancePaddingStrategy::Custom(fun) => T::from_u64(fun(i as u64, column as u64)), InstancePaddingStrategy::RepeatLast if num_instances > 0 => { self[num_instances - 1][column] } @@ -109,7 +107,7 @@ impl RowMajorMat } } -impl RowMajorMatrix { +impl RowMajorMatrix { pub fn into_mles>( self, ) -> Vec> { diff --git a/ff_ext/src/lib.rs b/ff_ext/src/lib.rs index 445b3758e..61ea10bee 100644 --- a/ff_ext/src/lib.rs +++ b/ff_ext/src/lib.rs @@ -56,7 +56,7 @@ macro_rules! impl_from_uniform_bytes_for_binomial_extension { type Bytes = [u8; <$base as FromUniformBytes>::Bytes::WIDTH * $degree]; fn try_from_uniform_bytes(bytes: Self::Bytes) -> Option { - Some(p3_field::FieldExtensionAlgebra::from_base_slice( + Some(p3_field::BasedVectorSpace::from_basis_coefficients_slice( &array_try_from_uniform_bytes::< $base, { <$base as FromUniformBytes>::Bytes::WIDTH }, @@ -121,7 +121,7 @@ mod impl_goldilocks { ExtensionField, FieldFrom, FieldInto, FromUniformBytes, GoldilocksExt2, SmallField, poseidon::{PoseidonField, new_array}, }; - use p3_field::{FieldAlgebra, FieldExtensionAlgebra, PrimeField64}; + use p3_field::{BasedVectorSpace, PrimeCharacteristicRing, PrimeField64}; use p3_goldilocks::{ Goldilocks, HL_GOLDILOCKS_8_EXTERNAL_ROUND_CONSTANTS, HL_GOLDILOCKS_8_INTERNAL_ROUND_CONSTANTS, Poseidon2GoldilocksHL, @@ -130,13 +130,13 @@ mod impl_goldilocks { impl FieldFrom for Goldilocks { fn from_v(v: u64) -> Self { - Self::from_canonical_u64(v) + Self::from_u64(v) } } impl FieldFrom for GoldilocksExt2 { fn from_v(v: u64) -> Self { - Self::from_canonical_u64(v) + Self::from_u64(v) } } @@ -174,7 +174,7 @@ mod impl_goldilocks { fn try_from_uniform_bytes(bytes: [u8; 8]) -> Option { let value = u64::from_le_bytes(bytes); let is_canonical = value < Self::ORDER_U64; - is_canonical.then(|| Self::from_canonical_u64(value)) + is_canonical.then(|| Self::from_u64(value)) } } @@ -192,7 +192,7 @@ mod impl_goldilocks { array[..chunk.len()].copy_from_slice(chunk); unsafe { std::ptr::read_unaligned(array.as_ptr() as *const u64) } }) - .map(Self::from_canonical_u64) + .map(Self::from_u64) .collect::>() } @@ -214,20 +214,20 @@ mod impl_goldilocks { fn from_bases(bases: &[Goldilocks]) -> Self { debug_assert_eq!(bases.len(), 2); - Self::from_base_slice(bases) + Self::from_basis_coefficients_slice(bases) } fn as_bases(&self) -> &[Goldilocks] { - self.as_base_slice() + self.as_basis_coefficients_slice() } /// Convert limbs into self fn from_limbs(limbs: &[Self::BaseField]) -> Self { - Self::from_base_slice(&limbs[0..2]) + Self::from_bases(&limbs[0..2]) } fn to_canonical_u64_vec(&self) -> Vec { - self.as_base_slice() + self.as_basis_coefficients_slice() .iter() .map(|v: &Self::BaseField| v.as_canonical_u64()) .collect() diff --git a/ff_ext/src/poseidon.rs b/ff_ext/src/poseidon.rs index 2d7d6c743..cd8ccd95f 100644 --- a/ff_ext/src/poseidon.rs +++ b/ff_ext/src/poseidon.rs @@ -1,4 +1,4 @@ -use p3_field::{FieldAlgebra, PrimeField}; +use p3_field::PrimeField; use p3_symmetric::CryptographicPermutation; use crate::SmallField; @@ -8,11 +8,11 @@ pub trait PoseidonField: PrimeField + SmallField { fn get_perm() -> Self::T; } -pub(crate) fn new_array(input: [u64; N]) -> [F; N] { +pub(crate) fn new_array(input: [u64; N]) -> [F; N] { let mut output = [F::ZERO; N]; let mut i = 0; while i < N { - output[i] = F::from_canonical_u64(input[i]); + output[i] = F::from_u64(input[i]); i += 1; } output diff --git a/mpcs/src/basefold.rs b/mpcs/src/basefold.rs index 94c92b491..a3b572311 100644 --- a/mpcs/src/basefold.rs +++ b/mpcs/src/basefold.rs @@ -594,7 +594,7 @@ where evals.iter().map(Evaluation::value), &evals .iter() - .map(|eval| E::from_canonical_u64(1 << (num_vars - points[eval.point()].len()))) + .map(|eval| E::from_u64(1 << (num_vars - points[eval.point()].len()))) .collect_vec(), &poly_iter_ext(&eq_xt).take(evals.len()).collect_vec(), ); @@ -646,7 +646,7 @@ where &poly_iter_ext(poly).collect_vec(), build_eq_x_r_vec(point).iter(), ) * *scalar - * E::from_canonical_u64(1 << (num_vars - poly.num_vars)) + * E::from_u64(1 << (num_vars - poly.num_vars)) // When this polynomial is smaller, it will be repeatedly summed over the cosets of the hypercube }) .sum::(); @@ -977,7 +977,7 @@ where evals.iter().map(Evaluation::value), &evals .iter() - .map(|eval| E::from_canonical_u64(1 << (num_vars - points[eval.point()].len()))) + .map(|eval| E::from_u64(1 << (num_vars - points[eval.point()].len()))) .collect_vec(), &poly_iter_ext(&eq_xt).take(evals.len()).collect_vec(), ); diff --git a/mpcs/src/basefold/encoding.rs b/mpcs/src/basefold/encoding.rs index 6c3a03d2f..7675e506b 100644 --- a/mpcs/src/basefold/encoding.rs +++ b/mpcs/src/basefold/encoding.rs @@ -173,9 +173,7 @@ pub(crate) mod test_util { pub fn test_codeword_folding>() { let num_vars = 12; - let poly: Vec = (0..(1 << num_vars)) - .map(|i| E::from_canonical_u64(i)) - .collect(); + let poly: Vec = (0..(1 << num_vars)).map(|i| E::from_u64(i)).collect(); let mut poly = FieldType::Ext(poly); let pp: Code::PublicParameters = Code::setup(num_vars); diff --git a/mpcs/src/basefold/encoding/basecode.rs b/mpcs/src/basefold/encoding/basecode.rs index a0e61fbb0..4709058e2 100644 --- a/mpcs/src/basefold/encoding/basecode.rs +++ b/mpcs/src/basefold/encoding/basecode.rs @@ -13,7 +13,7 @@ use ark_std::{end_timer, start_timer}; use ff_ext::ExtensionField; use generic_array::GenericArray; use multilinear_extensions::mle::FieldType; -use p3_field::{Field, FieldAlgebra, batch_multiplicative_inverse}; +use p3_field::{Field, PrimeCharacteristicRing, batch_multiplicative_inverse}; use rand::SeedableRng; use rayon::prelude::{ParallelIterator, ParallelSlice, ParallelSliceMut}; diff --git a/mpcs/src/basefold/encoding/rs.rs b/mpcs/src/basefold/encoding/rs.rs index fef22bc3f..01fdfcc85 100644 --- a/mpcs/src/basefold/encoding/rs.rs +++ b/mpcs/src/basefold/encoding/rs.rs @@ -9,7 +9,7 @@ use crate::{ use ark_std::{end_timer, start_timer}; use ff_ext::ExtensionField; use multilinear_extensions::mle::FieldType; -use p3_field::{Field, FieldAlgebra, PrimeField, TwoAdicField}; +use p3_field::{Field, PrimeCharacteristicRing, PrimeField, TwoAdicField}; use serde::{Deserialize, Serialize, de::DeserializeOwned}; @@ -317,7 +317,7 @@ where gamma_powers.push(gamma_powers[i - 1].square()); gamma_powers_inv.push(gamma_powers_inv[i - 1].square()); } - let inv_of_two = E::BaseField::from_canonical_u64(2).inverse(); + let inv_of_two = E::BaseField::from_u64(2).inverse(); gamma_powers_inv.iter_mut().for_each(|x| *x *= inv_of_two); pp.fft_root_table .truncate(max_message_size_log + Spec::get_rate_log()); @@ -559,9 +559,8 @@ mod tests { fn test_naive_fft() { let num_vars = 5; - let poly: Vec = (0..(1 << num_vars)) - .map(GoldilocksExt2::from_canonical_u64) - .collect(); + let poly: Vec = + (0..(1 << num_vars)).map(GoldilocksExt2::from_u64).collect(); let mut poly2 = FieldType::Ext(poly.clone()); let naive = naive_fft::(&poly, 1, Goldilocks::ONE); @@ -627,9 +626,8 @@ mod tests { fn test_ifft() { let num_vars = 5; - let poly: Vec = (0..(1 << num_vars)) - .map(GoldilocksExt2::from_canonical_u64) - .collect(); + let poly: Vec = + (0..(1 << num_vars)).map(GoldilocksExt2::from_u64).collect(); let mut poly = FieldType::Ext(poly); let original = poly.clone(); @@ -677,14 +675,14 @@ mod tests { pub fn test_colinearity() { let num_vars = 10; - let poly: Vec = (0..(1 << num_vars)).map(E::from_canonical_u64).collect(); + let poly: Vec = (0..(1 << num_vars)).map(E::from_u64).collect(); let poly = FieldType::Ext(poly); let pp = >::setup(num_vars); let (pp, _) = Code::trim(pp, num_vars).unwrap(); let mut codeword = Code::encode(&pp, &poly); reverse_index_bits_in_place_field_type(&mut codeword); - let challenge = E::from_canonical_u64(2); + let challenge = E::from_u64(2); let folded_codeword = Code::fold_bitreversed_codeword(&pp, &codeword, challenge); let codeword = match codeword { FieldType::Ext(coeffs) => coeffs, @@ -715,7 +713,7 @@ mod tests { pub fn test_low_degree() { let num_vars = 10; - let poly: Vec = (0..(1 << num_vars)).map(E::from_canonical_u64).collect(); + let poly: Vec = (0..(1 << num_vars)).map(E::from_u64).collect(); let poly = FieldType::Ext(poly); let pp = >::setup(num_vars); @@ -781,7 +779,7 @@ mod tests { "check low degree of (left-right)*omega^(-i)", ); - let challenge = E::from_canonical_u64(2); + let challenge = E::from_u64(2); let folded_codeword = Code::fold_bitreversed_codeword(&pp, &codeword, challenge); let c_fold = folded_codeword[0]; let c_fold1 = folded_codeword[folded_codeword.len() >> 1]; @@ -807,15 +805,15 @@ mod tests { // So the folded value should be equal to // (gamma^{-1} * alpha * (c0 - c_mid) + (c0 + c_mid)) / 2 assert_eq!( - c_fold * F::GENERATOR * F::from_canonical_u64(2), + c_fold * F::GENERATOR * F::from_u64(2), challenge * (c0 - c_mid) + (c0 + c_mid) * F::GENERATOR ); assert_eq!( - c_fold * F::GENERATOR * F::from_canonical_u64(2), + c_fold * F::GENERATOR * F::from_u64(2), challenge * left_right_diff[0] + left_right_sum[0] * F::GENERATOR ); assert_eq!( - c_fold * F::from_canonical_u64(2), + c_fold * F::from_u64(2), challenge * left_right_diff[0] * F::GENERATOR.inverse() + left_right_sum[0] ); @@ -845,7 +843,7 @@ mod tests { _ => panic!("Wrong field type"), }; assert_eq!( - c_fold * F::from_canonical_u64(2), + c_fold * F::from_u64(2), left_right_diff[0] * b + left_right_sum[0] ); for (i, (c, (diff, sum))) in folded_codeword_vec diff --git a/mpcs/src/sum_check.rs b/mpcs/src/sum_check.rs index 7406025ca..d6d9f6251 100644 --- a/mpcs/src/sum_check.rs +++ b/mpcs/src/sum_check.rs @@ -135,8 +135,5 @@ pub fn eq_xy_eval(x: &[F], y: &[F]) -> F { } fn identity_eval(x: &[F]) -> F { - inner_product( - x, - &powers(F::from_canonical_u64(2)).take(x.len()).collect_vec(), - ) + inner_product(x, &powers(F::from_u64(2)).take(x.len()).collect_vec()) } diff --git a/mpcs/src/sum_check/classic.rs b/mpcs/src/sum_check/classic.rs index 9db6de6bb..2009b5827 100644 --- a/mpcs/src/sum_check/classic.rs +++ b/mpcs/src/sum_check/classic.rs @@ -23,7 +23,7 @@ use multilinear_extensions::{ pub(crate) use coeff::Coefficients; pub use coeff::CoefficientsProver; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; #[derive(Debug)] pub struct ProverState<'a, E: ExtensionField> { @@ -99,7 +99,7 @@ impl<'a, E: ExtensionField> ProverState<'a, E> { fn next_round(&mut self, sum: E, challenge: &E) { self.sum = sum; - self.identity += E::from_canonical_u64(1 << self.round) * *challenge; + self.identity += E::from_u64(1 << self.round) * *challenge; self.lagranges.values_mut().for_each(|(b, value)| { if b.is_even() { *value *= E::ONE - *challenge; @@ -331,50 +331,47 @@ mod tests { fn test_sum_check_protocol() { let polys = [ DenseMultilinearExtension::::from_evaluations_vec(2, vec![ - Fr::from_canonical_u64(1), - Fr::from_canonical_u64(2), - Fr::from_canonical_u64(3), - Fr::from_canonical_u64(4), + Fr::from_u64(1), + Fr::from_u64(2), + Fr::from_u64(3), + Fr::from_u64(4), ]), DenseMultilinearExtension::from_evaluations_vec(2, vec![ - Fr::from_canonical_u64(0), - Fr::from_canonical_u64(1), - Fr::from_canonical_u64(1), - Fr::from_canonical_u64(0), + Fr::from_u64(0), + Fr::from_u64(1), + Fr::from_u64(1), + Fr::from_u64(0), ]), DenseMultilinearExtension::from_evaluations_vec(1, vec![ - Fr::from_canonical_u64(0), - Fr::from_canonical_u64(1), + Fr::from_u64(0), + Fr::from_u64(1), ]), ]; - let points = vec![ - vec![E::from_canonical_u64(1), E::from_canonical_u64(2)], - vec![E::from_canonical_u64(1)], - ]; + let points = vec![vec![E::from_u64(1), E::from_u64(2)], vec![E::from_u64(1)]]; let expression = Expression::::eq_xy(0) * Expression::Polynomial(Query::new(0, Rotation::cur())) - * E::from(Fr::from_canonical_u64(2)) + * E::from(Fr::from_u64(2)) + Expression::::eq_xy(0) * Expression::Polynomial(Query::new(1, Rotation::cur())) - * E::from(Fr::from_canonical_u64(3)) + * E::from(Fr::from_u64(3)) + Expression::::eq_xy(1) * Expression::Polynomial(Query::new(2, Rotation::cur())) - * E::from(Fr::from_canonical_u64(4)); + * E::from(Fr::from_u64(4)); let virtual_poly = VirtualPolynomial::::new(&expression, polys.iter(), &[], points.as_slice()); let sum = inner_product( &poly_iter_ext(&polys[0]).collect_vec(), &build_eq_x_r_vec(&points[0]), - ) * Fr::from_canonical_u64(2) + ) * Fr::from_u64(2) + inner_product( &poly_iter_ext(&polys[1]).collect_vec(), &build_eq_x_r_vec(&points[0]), - ) * Fr::from_canonical_u64(3) + ) * Fr::from_u64(3) + inner_product( &poly_iter_ext(&polys[2]).collect_vec(), &build_eq_x_r_vec(&points[1]), - ) * Fr::from_canonical_u64(4) - * Fr::from_canonical_u64(2); // The third polynomial is summed twice because the hypercube is larger + ) * Fr::from_u64(4) + * Fr::from_u64(2); // The third polynomial is summed twice because the hypercube is larger let mut transcript = BasicTranscript::new(b"sumcheck"); let (challenges, evals, proof) = > as SumCheck>::prove( @@ -402,9 +399,9 @@ mod tests { assert_eq!(verifier_challenges, challenges); assert_eq!( new_sum, - evals[0] * eq_xy_eval(&points[0], &challenges[..2]) * Fr::from_canonical_u64(2) - + evals[1] * eq_xy_eval(&points[0], &challenges[..2]) * Fr::from_canonical_u64(3) - + evals[2] * eq_xy_eval(&points[1], &challenges[..1]) * Fr::from_canonical_u64(4) + evals[0] * eq_xy_eval(&points[0], &challenges[..2]) * Fr::from_u64(2) + + evals[1] * eq_xy_eval(&points[0], &challenges[..2]) * Fr::from_u64(3) + + evals[2] * eq_xy_eval(&points[1], &challenges[..1]) * Fr::from_u64(4) ); let mut transcript = BasicTranscript::new(b"sumcheck"); diff --git a/mpcs/src/sum_check/classic/coeff.rs b/mpcs/src/sum_check/classic/coeff.rs index 826852bcd..3bbfaaee6 100644 --- a/mpcs/src/sum_check/classic/coeff.rs +++ b/mpcs/src/sum_check/classic/coeff.rs @@ -198,7 +198,7 @@ impl ClassicSumCheckProver for CoefficientsProver { // Initialize h(X) to zero let mut coeffs = Coefficients(FieldType::Ext(vec![E::ZERO; state.expression.degree() + 1])); // First, sum the constant over the hypercube and add to h(X) - coeffs += &(E::from_canonical_u64(state.size() as u64) * self.0); + coeffs += &(E::from_u64(state.size() as u64) * self.0); // Next, for every product of polynomials, where each product is assumed to be exactly 2 // put this into h(X). if self.1.iter().all(|(_, products)| products.len() == 2) { diff --git a/mpcs/src/util.rs b/mpcs/src/util.rs index 9a1b0f3d8..d398fe864 100644 --- a/mpcs/src/util.rs +++ b/mpcs/src/util.rs @@ -9,7 +9,7 @@ use multilinear_extensions::mle::{DenseMultilinearExtension, FieldType}; use serde::{Deserialize, Serialize, de::DeserializeOwned}; pub mod merkle_tree; use crate::{Error, util::parallel::parallelize}; -use p3_field::{FieldAlgebra, PrimeField}; +use p3_field::{PrimeCharacteristicRing, PrimeField}; pub use plonky2_util::log2_strict; pub fn ext_to_usize(x: &E) -> usize { @@ -22,7 +22,7 @@ pub fn base_to_usize(x: &E::BaseField) -> usize { } pub fn u32_to_field(x: u32) -> E::BaseField { - E::BaseField::from_canonical_u32(x) + E::BaseField::from_u32(x) } pub trait BitIndex { @@ -320,7 +320,7 @@ pub mod test { #[cfg(test)] use crate::util::{base_to_usize, u32_to_field}; use ff_ext::FromUniformBytes; - use p3_field::FieldAlgebra; + use p3_field::PrimeCharacteristicRing; #[cfg(test)] type E = ff_ext::GoldilocksExt2; #[cfg(test)] @@ -353,10 +353,7 @@ pub mod test { #[test] pub fn test_field_transform() { - assert_eq!( - F::from_canonical_u64(2) * F::from_canonical_u64(3), - F::from_canonical_u64(6) - ); + assert_eq!(F::from_u64(2) * F::from_u64(3), F::from_u64(6)); assert_eq!(base_to_usize::(&u32_to_field::(1u32)), 1); assert_eq!(base_to_usize::(&u32_to_field::(10u32)), 10); } diff --git a/mpcs/src/util/arithmetic.rs b/mpcs/src/util/arithmetic.rs index 34837b60e..8cdc7a896 100644 --- a/mpcs/src/util/arithmetic.rs +++ b/mpcs/src/util/arithmetic.rs @@ -10,7 +10,7 @@ pub use bh::BooleanHypercube; pub use hypercube::{ interpolate_field_type_over_boolean_hypercube, interpolate_over_boolean_hypercube, }; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; use itertools::Itertools; @@ -159,7 +159,7 @@ pub fn degree_2_eval(poly: &[F], point: F) -> F { pub fn base_from_raw_bytes(bytes: &[u8]) -> E::BaseField { let mut res = E::BaseField::ZERO; bytes.iter().for_each(|b| { - res += E::BaseField::from_canonical_u8(*b); + res += E::BaseField::from_u8(*b); }); res } diff --git a/multilinear_extensions/src/mle.rs b/multilinear_extensions/src/mle.rs index 40b5eee72..4135ac27a 100644 --- a/multilinear_extensions/src/mle.rs +++ b/multilinear_extensions/src/mle.rs @@ -4,7 +4,7 @@ use crate::{op_mle, util::ceil_log2}; use ark_std::{end_timer, rand::RngCore, start_timer}; use core::hash::Hash; use ff_ext::{ExtensionField, FromUniformBytes}; -use p3_field::{Field, FieldAlgebra}; +use p3_field::{Field, PrimeCharacteristicRing}; use rayon::iter::{ IndexedParallelIterator, IntoParallelRefIterator, IntoParallelRefMutIterator, ParallelIterator, }; diff --git a/multilinear_extensions/src/test.rs b/multilinear_extensions/src/test.rs index 7e6a7f562..0870c9fad 100644 --- a/multilinear_extensions/src/test.rs +++ b/multilinear_extensions/src/test.rs @@ -1,6 +1,6 @@ use ark_std::test_rng; use ff_ext::{ExtensionField, FromUniformBytes}; -use p3_field::{FieldAlgebra, extension::BinomialExtensionField}; +use p3_field::{PrimeCharacteristicRing, extension::BinomialExtensionField}; use p3_goldilocks::Goldilocks; type F = Goldilocks; @@ -47,30 +47,30 @@ fn test_eq_xr() { fn test_fix_high_variables() { let poly: DenseMultilinearExtension = DenseMultilinearExtension::from_evaluations_vec(3, vec![ - F::from_canonical_u64(13), - F::from_canonical_u64(97), - F::from_canonical_u64(11), - F::from_canonical_u64(101), - F::from_canonical_u64(7), - F::from_canonical_u64(103), - F::from_canonical_u64(5), - F::from_canonical_u64(107), + F::from_u64(13), + F::from_u64(97), + F::from_u64(11), + F::from_u64(101), + F::from_u64(7), + F::from_u64(103), + F::from_u64(5), + F::from_u64(107), ]); - let partial_point = vec![E::from_canonical_u64(3), E::from_canonical_u64(5)]; + let partial_point = vec![E::from_u64(3), E::from_u64(5)]; let expected1 = DenseMultilinearExtension::from_evaluations_ext_vec(2, vec![ - -E::from_canonical_u64(17), - E::from_canonical_u64(127), - -E::from_canonical_u64(19), - E::from_canonical_u64(131), + -E::from_u64(17), + E::from_u64(127), + -E::from_u64(19), + E::from_u64(131), ]); let result1 = poly.fix_high_variables(&partial_point[1..]); assert_eq!(result1, expected1); let expected2 = DenseMultilinearExtension::from_evaluations_ext_vec(1, vec![ - -E::from_canonical_u64(23), - E::from_canonical_u64(139), + -E::from_u64(23), + E::from_u64(139), ]); let result2 = poly.fix_high_variables(&partial_point); assert_eq!(result2, expected2); diff --git a/poseidon/benches/hashing.rs b/poseidon/benches/hashing.rs index 07083731e..cf8060607 100644 --- a/poseidon/benches/hashing.rs +++ b/poseidon/benches/hashing.rs @@ -1,7 +1,7 @@ use ark_std::test_rng; use criterion::{BatchSize, Criterion, black_box, criterion_group, criterion_main}; use ff_ext::FromUniformBytes; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; use p3_goldilocks::Goldilocks; use plonky2::{ field::{goldilocks_field::GoldilocksField, types::Sample}, diff --git a/poseidon/src/challenger.rs b/poseidon/src/challenger.rs index 48a2b9b07..9a48f8c8a 100644 --- a/poseidon/src/challenger.rs +++ b/poseidon/src/challenger.rs @@ -1,6 +1,6 @@ use core::fmt::Debug; use ff_ext::ExtensionField; -use p3_field::{FieldExtensionAlgebra, PrimeField}; +use p3_field::PrimeField; use p3_symmetric::CryptographicPermutation; use std::ops::{Deref, DerefMut}; @@ -67,11 +67,11 @@ where pub trait FieldChallengerExt: FieldChallenger { fn observe_ext_slice>(&mut self, exts: &[E]) { exts.iter() - .for_each(|ext| self.observe_slice(ext.as_base_slice())); + .for_each(|ext| self.observe_slice(ext.as_basis_coefficients_slice())); } - fn sample_ext_vec>(&mut self, n: usize) -> Vec { - (0..n).map(|_| self.sample_ext_element()).collect() + fn sample_ext_vec>(&mut self, n: usize) -> Vec { + (0..n).map(|_| self.sample_algebra_element()).collect() } } diff --git a/sumcheck/src/prover.rs b/sumcheck/src/prover.rs index 7013ade60..cd572a188 100644 --- a/sumcheck/src/prover.rs +++ b/sumcheck/src/prover.rs @@ -26,7 +26,7 @@ use crate::{ merge_sumcheck_polys, serial_extrapolate, }, }; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; impl<'a, E: ExtensionField> IOPProverState<'a, E> { /// Given a virtual polynomial, generate an IOP proof. @@ -72,9 +72,7 @@ impl<'a, E: ExtensionField> IOPProverState<'a, E> { // extrapolation_aux only need to init once let extrapolation_aux = (1..max_degree) .map(|degree| { - let points = (0..1 + degree as u64) - .map(E::from_canonical_u64) - .collect::>(); + let points = (0..1 + degree as u64).map(E::from_u64).collect::>(); let weights = barycentric_weights(&points); (points, weights) }) @@ -447,7 +445,7 @@ impl<'a, E: ExtensionField> IOPProverState<'a, E> { let extrapolation = (0..self.poly.aux_info.max_degree - products.len()) .map(|i| { let (points, weights) = &self.extrapolation_aux[products.len() - 1]; - let at = E::from_canonical_u64((products.len() + 1 + i) as u64); + let at = E::from_u64((products.len() + 1 + i) as u64); serial_extrapolate(points, weights, &sum, &at) }) .collect::>(); @@ -595,9 +593,7 @@ impl<'a, E: ExtensionField> IOPProverState<'a, E> { poly: polynomial, extrapolation_aux: (1..max_degree) .map(|degree| { - let points = (0..1 + degree as u64) - .map(E::from_canonical_u64) - .collect::>(); + let points = (0..1 + degree as u64).map(E::from_u64).collect::>(); let weights = barycentric_weights(&points); (points, weights) }) @@ -709,7 +705,7 @@ impl<'a, E: ExtensionField> IOPProverState<'a, E> { .into_par_iter() .map(|i| { let (points, weights) = &self.extrapolation_aux[products.len() - 1]; - let at = E::from_canonical_u64((products.len() + 1 + i) as u64); + let at = E::from_u64((products.len() + 1 + i) as u64); extrapolate(points, weights, &sum, &at) }) .collect::>(); diff --git a/sumcheck/src/test.rs b/sumcheck/src/test.rs index fc643ccec..c54431f4b 100644 --- a/sumcheck/src/test.rs +++ b/sumcheck/src/test.rs @@ -7,7 +7,7 @@ use crate::{ use ark_std::{rand::RngCore, test_rng}; use ff_ext::{ExtensionField, FromUniformBytes, GoldilocksExt2}; use multilinear_extensions::{mle::DenseMultilinearExtension, virtual_poly::VirtualPolynomial}; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; use rayon::iter::{IntoParallelRefMutIterator, ParallelIterator}; use transcript::{BasicTranscript, Transcript}; @@ -192,7 +192,7 @@ fn test_interpolation() { // test a polynomial with 20 known points, i.e., with degree 19 let poly = DensePolynomial::rand(20 - 1, &mut prng); let evals = (0..20) - .map(|i| poly.evaluate(&GoldilocksExt2::from_canonical_u64(i as u64))) + .map(|i| poly.evaluate(&GoldilocksExt2::from_u64(i as u64))) .collect::>(); let query = GoldilocksExt2::random(&mut prng); @@ -201,7 +201,7 @@ fn test_interpolation() { // test a polynomial with 33 known points, i.e., with degree 32 let poly = DensePolynomial::rand(33 - 1, &mut prng); let evals = (0..33) - .map(|i| poly.evaluate(&GoldilocksExt2::from_canonical_u64(i as u64))) + .map(|i| poly.evaluate(&GoldilocksExt2::from_u64(i as u64))) .collect::>(); let query = GoldilocksExt2::random(&mut prng); @@ -210,7 +210,7 @@ fn test_interpolation() { // test a polynomial with 64 known points, i.e., with degree 63 let poly = DensePolynomial::rand(64 - 1, &mut prng); let evals = (0..64) - .map(|i| poly.evaluate(&GoldilocksExt2::from_canonical_u64(i as u64))) + .map(|i| poly.evaluate(&GoldilocksExt2::from_u64(i as u64))) .collect::>(); let query = GoldilocksExt2::random(&mut prng); diff --git a/sumcheck/src/util.rs b/sumcheck/src/util.rs index 056bc9068..ee881e8d2 100644 --- a/sumcheck/src/util.rs +++ b/sumcheck/src/util.rs @@ -155,7 +155,7 @@ pub(crate) fn interpolate_uni_poly(p_i: &[F], eval_at: F) -> F { // `prod = \prod_{j} (eval_at - j)` for e in 1..len { - let tmp = eval_at - F::from_canonical_u64(e as u64); + let tmp = eval_at - F::from_u64(e as u64); evals.push(tmp); prod *= tmp; } @@ -186,8 +186,8 @@ pub(crate) fn interpolate_uni_poly(p_i: &[F], eval_at: F) -> F { // compute denom for the next step is current_denom * (len-i)/i if i != 0 { - denom_up *= -F::from_canonical_u64((len - i) as u64); - denom_down *= F::from_canonical_u64(i as u64); + denom_up *= -F::from_u64((len - i) as u64); + denom_down *= F::from_u64(i as u64); } } end_timer!(start); @@ -199,7 +199,7 @@ pub(crate) fn interpolate_uni_poly(p_i: &[F], eval_at: F) -> F { fn field_factorial(a: usize) -> F { let mut res = F::ONE; for i in 2..=a { - res *= F::from_canonical_u64(i as u64); + res *= F::from_u64(i as u64); } res } diff --git a/sumcheck_macro/examples/expand.rs b/sumcheck_macro/examples/expand.rs index dcc7c6924..13e366347 100644 --- a/sumcheck_macro/examples/expand.rs +++ b/sumcheck_macro/examples/expand.rs @@ -7,7 +7,7 @@ use ff_ext::GoldilocksExt2; use multilinear_extensions::{ mle::FieldType, util::largest_even_below, virtual_poly::VirtualPolynomial, }; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; use sumcheck::util::{AdditiveArray, ceil_log2}; #[derive(Default)] diff --git a/sumcheck_macro/src/lib.rs b/sumcheck_macro/src/lib.rs index ceed66d44..428500261 100644 --- a/sumcheck_macro/src/lib.rs +++ b/sumcheck_macro/src/lib.rs @@ -241,7 +241,7 @@ pub fn sumcheck_code_gen(input: proc_macro::TokenStream) -> proc_macro::TokenStr }; let num_vars_multiplicity = self.poly.aux_info.max_num_variables - (ceil_log2(v1.len()).max(1) + self.round - 1); if num_vars_multiplicity > 0 { - AdditiveArray(res.0.map(|e| e * E::BaseField::from_canonical_u64(1 << num_vars_multiplicity))) + AdditiveArray(res.0.map(|e| e * E::BaseField::from_u64(1 << num_vars_multiplicity))) } else { res } @@ -295,7 +295,7 @@ pub fn sumcheck_code_gen(input: proc_macro::TokenStream) -> proc_macro::TokenStr quote! { #arm_body let result = {#additive_converter}; - AdditiveArray(result.0.map(E::from_base)) + AdditiveArray(result.0.map(|b| b.into())) } } else { quote! { diff --git a/transcript/src/basic.rs b/transcript/src/basic.rs index 401ff287b..78a38cc61 100644 --- a/transcript/src/basic.rs +++ b/transcript/src/basic.rs @@ -25,12 +25,12 @@ impl Transcript for BasicTranscript { } fn append_field_element_ext(&mut self, element: &E) { - self.challenger.observe_ext_element(*element); + self.challenger.observe_algebra_element(*element); } fn read_challenge(&mut self) -> Challenge { Challenge { - elements: self.challenger.sample_ext_element(), + elements: self.challenger.sample_algebra_element(), } } diff --git a/transcript/src/lib.rs b/transcript/src/lib.rs index d3f6ff57e..f3ceac995 100644 --- a/transcript/src/lib.rs +++ b/transcript/src/lib.rs @@ -8,7 +8,7 @@ mod statistics; pub mod syncronized; pub use basic::BasicTranscript; use ff_ext::SmallField; -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; pub use statistics::{BasicTranscriptWithStat, StatisticRecorder}; pub use syncronized::TranscriptSyncronized; #[derive(Default, Copy, Clone, Eq, PartialEq, Debug)] @@ -98,7 +98,7 @@ pub trait ForkableTranscript: Transcript + Sized + Clone { (0..n) .map(|i| { let mut fork = self.clone(); - fork.append_field_element(&E::BaseField::from_canonical_u64(i as u64)); + fork.append_field_element(&E::BaseField::from_u64(i as u64)); fork }) .collect()