Skip to main content

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

UnreducedForeignField

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

CanonicalForeignField

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

CanonicalForeignField

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

ForeignField

message?

string

Returns

ForeignField

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

Bool

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

UnreducedForeignField

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

UnreducedForeignField

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