Конвертировать из PolynomialRing в другой PolynomialRing в SageMath - PullRequest
1 голос
/ 24 мая 2019

У меня есть три алгебраические структуры в SageMath, и я хотел бы преобразовать их друг в друга

  1. Z(3*7681) mod x^768 - x^384 + 1
  2. Z(7681) mod x^768 - x^384 + 1
  3. Z(3) mod x^768 - x^384 + 1

Я хотел бы сделать это:

f = [объект типа 2]

f = f ^ -1 (f обратимо)

// преобразование f в тип 1

// выполнение некоторых вычислений с помощью f

// преобразование f в тип 3 (все коэффициенты мод 3)

Я протестировал функцию change_ring и попытался использовать оператор по модулю для типов от 1 до 3. Есть ли функция "convert"?

Вот как я определил поля в Sage

R1.<r> = PolynomialRing(IntegerModRing(7681*3), 'r').quotient(x^768 - x^384 + 1)
R2.<s> = PolynomialRing(GF(7681), 's').quotient(x^768 - x^384 + 1)
R3.<t> = PolynomialRing(GF(3), 't').quotient(x^768 - x^384 + 1)

1 Ответ

0 голосов
/ 06 июня 2019

Определим три фактор-кольца полиномиальных колец:

sage: x = polygen(ZZ)
sage: R1.<r> = PolynomialRing(Zmod(7681*3), 'r').quotient(x^768 - x^384 + 1)
sage: R2.<s> = PolynomialRing(GF(7681), 's').quotient(x^768 - x^384 + 1)
sage: R3.<t> = PolynomialRing(GF(3), 't').quotient(x^768 - x^384 + 1)

Определите элемент f2 в R2:

sage: f2 = 875*s^5 + 5355*s^4 + 6859*s^3 + 3073*s^2 + 2552*s + 1626

Сопоставьте его с R1 и оттуда с R3:

sage: f1 = R1(f2.list())
sage: f3 = R3(f1.list())

Проверить результат:

sage: f3
2*t^5 + t^3 + t^2 + 2*t
...