AlmostForeignField
Defined in: lib/provable/foreign-field.ts:502
Extends
ForeignFieldWithMul
Properties
type
type: "AlmostReduced" | "FullyReduced" = 'AlmostReduced';
Defined in: lib/provable/foreign-field.ts:503
value
value: Field3;
Defined in: lib/provable/foreign-field.ts:40
The internal representation of a foreign field element, as a tuple of 3 limbs.
Inherited from
ForeignFieldWithMul.value
Accessors
Constructor
Get Signature
get Constructor(): typeof ForeignField;
Defined in: lib/provable/foreign-field.ts:42
Returns
typeof ForeignField
Inherited from
ForeignFieldWithMul.Constructor
modulus
Get Signature
get modulus(): bigint;
Defined in: lib/provable/foreign-field.ts:30
Returns
bigint
Inherited from
ForeignFieldWithMul.modulus
Methods
add()
add(y: number | bigint | ForeignField): UnreducedForeignField;
Defined in: lib/provable/foreign-field.ts:243
Finite field addition
Parameters
y
number | bigint | ForeignField
Returns
Example
x.add(2); // x + 2 mod p
Inherited from
ForeignFieldWithMul.add
assertAlmostReduced()
assertAlmostReduced(): AlmostForeignField;
Defined in: lib/provable/foreign-field.ts:198
Assert that this field element lies in the range [0, 2^k), where k = ceil(log2(p)) and p is the foreign field modulus.
Returns the field element as a AlmostForeignField.
For a more efficient version of this for multiple field elements, see assertAlmostReduced.
Note: this does not ensure that the field elements is in the canonical range [0, p). To assert that stronger property, there is assertCanonical. You should typically use assertAlmostReduced though, because it is cheaper to prove and sufficient for ensuring validity of all our non-native field arithmetic methods.
Returns
AlmostForeignField
Inherited from
ForeignFieldWithMul.assertAlmostReduced
assertCanonical()
assertCanonical(): CanonicalForeignField;
Defined in: lib/provable/foreign-field.ts:229
Assert that this field element is fully reduced, i.e. lies in the range [0, p), where p is the foreign field modulus.
Returns the field element as a CanonicalForeignField.
Returns
Inherited from
ForeignFieldWithMul.assertCanonical
assertEquals()
Call Signature
assertEquals(y: number | bigint | CanonicalForeignField, message?: string): CanonicalForeignField;
Defined in: lib/provable/foreign-field.ts:321
Assert equality with a ForeignField-like value
Parameters
y
number | bigint | CanonicalForeignField
message?
string
Returns
Examples
x.assertEquals(0, "x is zero");
Since asserting equality can also serve as a range check,
this method returns x with the appropriate type:
let xChecked = x.assertEquals(1, "x is 1");
xChecked satisfies CanonicalForeignField;
Inherited from
ForeignFieldWithMul.assertEquals
Call Signature
assertEquals(y: AlmostForeignField, message?: string): AlmostForeignField;
Defined in: lib/provable/foreign-field.ts:322
Assert equality with a ForeignField-like value
Parameters
y
AlmostForeignField
message?
string
Returns
AlmostForeignField
Examples
x.assertEquals(0, "x is zero");
Since asserting equality can also serve as a range check,
this method returns x with the appropriate type:
let xChecked = x.assertEquals(1, "x is 1");
xChecked satisfies CanonicalForeignField;
Inherited from
ForeignFieldWithMul.assertEquals
Call Signature
assertEquals(y: ForeignField, message?: string): ForeignField;
Defined in: lib/provable/foreign-field.ts:323
Assert equality with a ForeignField-like value
Parameters
y
message?
string
Returns
Examples
x.assertEquals(0, "x is zero");
Since asserting equality can also serve as a range check,
this method returns x with the appropriate type:
let xChecked = x.assertEquals(1, "x is 1");
xChecked satisfies CanonicalForeignField;
Inherited from
ForeignFieldWithMul.assertEquals
assertLessThan()
assertLessThan(c: number | bigint, message?: string): void;
Defined in: lib/provable/foreign-field.ts:358
Assert that this field element is less than a constant c: x < c.
The constant must satisfy 0 <= c < 2^264, otherwise an error is thrown.
Parameters
c
number | bigint
message?
string
Returns
void
Example
x.assertLessThan(10);
Inherited from
ForeignFieldWithMul.assertLessThan
div()
div(y: number | bigint | AlmostForeignField): AlmostForeignField;
Defined in: lib/provable/foreign-field.ts:480
Division in the finite field, i.e. x*y^(-1) mod p where y^(-1) is the finite field inverse.
Parameters
y
number | bigint | AlmostForeignField
Returns
AlmostForeignField
Example
let z = x.div(y); // x/y mod p
z.mul(y).assertEquals(x);
Inherited from
ForeignFieldWithMul.div
equals()
equals(y: number | bigint): Bool;
Defined in: lib/provable/foreign-field.ts:538
Check equality with a constant value.
Parameters
y
number | bigint
Returns
Example
let isXZero = x.equals(0);
inv()
inv(): AlmostForeignField;
Defined in: lib/provable/foreign-field.ts:466
Multiplicative inverse in the finite field
Returns
AlmostForeignField
Example
let z = x.inv(); // 1/x mod p
z.mul(x).assertEquals(1);
Inherited from
ForeignFieldWithMul.inv
mul()
mul(y: number | bigint | AlmostForeignField): UnreducedForeignField;
Defined in: lib/provable/foreign-field.ts:452
Finite field multiplication
Parameters
y
number | bigint | AlmostForeignField
Returns
Example
x.mul(y); // x*y mod p
Inherited from
ForeignFieldWithMul.mul
neg()
neg(): AlmostForeignField;
Defined in: lib/provable/foreign-field.ts:254
Finite field negation
Returns
AlmostForeignField
Example
x.neg(); // -x mod p = p - x
Inherited from
ForeignFieldWithMul.neg
sub()
sub(y: number | bigint | ForeignField): UnreducedForeignField;
Defined in: lib/provable/foreign-field.ts:269
Finite field subtraction
Parameters
y
number | bigint | ForeignField
Returns
Example
x.sub(1); // x - 1 mod p
Inherited from
ForeignFieldWithMul.sub
toBigInt()
toBigInt(): bigint;
Defined in: lib/provable/foreign-field.ts:181
Convert this field element to a bigint.
Returns
bigint
Inherited from
ForeignFieldWithMul.toBigInt
toBits()
toBits(length?: number): Bool[];
Defined in: lib/provable/foreign-field.ts:377
Unpack a field element to its bits, as a Bool[] array.
This method is provable!
Parameters
length?
number
Returns
Bool[]
Inherited from
ForeignFieldWithMul.toBits
toFields()
toFields(): Field[];
Defined in: lib/provable/foreign-field.ts:425
Instance version of Provable<ForeignField>.toFields, see Provable.toFields
Returns
Field[]
Inherited from
ForeignFieldWithMul.toFields