Prelude for Binary Tower Fields #
This file contains preliminary definitions, theorems, instances that are used in defining BTFs
Equations
- One or more equations did not get rendered due to their size.
Instances For
instance
neZero_one_of_nontrivial_comm_monoid_zero
{M₀ : Type u_1}
[CommMonoidWithZero M₀]
[instNontrivial : Nontrivial M₀]
:
NeZero 1
instance
unit_of_nontrivial_comm_monoid_with_zero_is_not_zero
{R : Type u_1}
[CommMonoidWithZero R]
[Nontrivial R]
{a : R}
(h_unit : IsUnit a)
:
NeZero a
theorem
linear_sum_repr
(R : Type u_1)
[CommRing R]
(S : Type u_2)
[CommRing S]
[Algebra R S]
(pb : PowerBasis R S)
(h_dim : pb.dim = 2)
(s : S)
:
∃ (a : R) (b : R), s = a • pb.gen + (algebraMap R S) b
theorem
linear_form_of_elements_in_adjoined_commring
{R : Type u_1}
[CommRing R]
(f : Polynomial R)
(hf_deg : f.natDegree = 2)
(hf_monic : f.Monic)
(c1 : AdjoinRoot f)
:
∃ (a : R) (b : R), c1 = (AdjoinRoot.of f) a * AdjoinRoot.root f + (AdjoinRoot.of f) b
theorem
unique_linear_form_of_elements_in_adjoined_commring
{R : Type u_1}
[CommRing R]
(f : Polynomial R)
(hf_deg : f.natDegree = 2)
(hf_monic : f.Monic)
(c1 : AdjoinRoot f)
:
- poly : Polynomial F
Instances For
def
PolyInstances
(F : Type u_1)
[Field F]
(specialElement : F)
:
PolyInstanceResult F specialElement
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
inverse_is_root_of_prevPoly
{prevBTField : Type u_1}
[Field prevBTField]
{curBTField : Type u_2}
[Field curBTField]
(of_prev : prevBTField →+* curBTField)
(u : curBTField)
(t1 : prevBTField)
(specialElementNeZero : u ≠ 0)
(eval_prevPoly_at_root : u ^ 2 + of_prev t1 * u + 1 = 0)
(h_eval :
∀ (x : curBTField),
Polynomial.eval₂ of_prev x (Polynomial.X ^ 2 + (Polynomial.C t1 * Polynomial.X + 1)) = x ^ 2 + of_prev t1 * x + 1)
:
theorem
self_sum_eq_zero
{prevBTField : Type u_1}
[CommRing prevBTField]
(sumZeroIffEqPrev : ∀ (x y : prevBTField), x + y = 0 ↔ x = y)
(prevPoly : Polynomial prevBTField)
(hf_deg : prevPoly.natDegree = 2)
(hf_monic : prevPoly.Monic)
(x : AdjoinRoot prevPoly)
:
theorem
prod_mul_erase
{α : Type u_1}
{β : Type u_2}
[CommMonoid β]
[DecidableEq α]
(s : Finset α)
(f : α → β)
{a : α}
(h : a ∈ s)
:
A variant of Finset.mul_prod_erase
with the multiplication swapped.
theorem
sum_add_erase
{α : Type u_1}
{β : Type u_2}
[AddCommMonoid β]
[DecidableEq α]
(s : Finset α)
(f : α → β)
{a : α}
(h : a ∈ s)
:
A variant of Finset.add_sum_erase
with the addition swapped.
theorem
eval₂_quadratic_prevField_coeff
{prevBTField : Type u_1}
[CommRing prevBTField]
{curBTField : Type u_2}
[CommRing curBTField]
(of_prev : prevBTField →+* curBTField)
(t1 : prevBTField)
(x : curBTField)
:
Polynomial.eval₂ of_prev x (Polynomial.X ^ 2 + (Polynomial.C t1 * Polynomial.X + 1)) = x ^ 2 + of_prev t1 * x + 1
theorem
galois_eval_in_BTField
{curBTField : Type u_1}
[Field curBTField]
(u t1 : curBTField)
(k : ℕ)
(sumZeroIffEq : ∀ (x y : curBTField), x + y = 0 ↔ x = y)
(prevSpecialElementNeZero : t1 ≠ 0)
(u_plus_inv_eq_t1 : u + u⁻¹ = t1)
(h_u_square : u ^ 2 = u * t1 + 1)
(h_t1_pow : t1 ^ (2 ^ 2 ^ k - 1) = 1 ∧ t1⁻¹ ^ (2 ^ 2 ^ k - 1) = 1)
(h_t1_pow_2_pow_2_pow_k : t1 ^ 2 ^ 2 ^ k = t1)
(h_t1_inv_pow_2_pow_2_pow_k : t1⁻¹ ^ 2 ^ 2 ^ k = t1⁻¹)
(trace_map_at_inv : ∑ i ∈ Finset.range (2 ^ k), t1⁻¹ ^ 2 ^ i = 1)
:
theorem
galois_automorphism_power
{curBTField : Type u_1}
[Field curBTField]
(u t1 : curBTField)
(k : ℕ)
(sumZeroIffEq : ∀ (x y : curBTField), x + y = 0 ↔ x = y)
(specialElementNeZero : u ≠ 0)
(prevSpecialElementNeZero : t1 ≠ 0)
(u_plus_inv_eq_t1 : u + u⁻¹ = t1)
(h_u_square : u ^ 2 = u * t1 + 1)
(h_t1_pow : t1 ^ (2 ^ 2 ^ k - 1) = 1 ∧ t1⁻¹ ^ (2 ^ 2 ^ k - 1) = 1)
(trace_map_roots : ∑ i ∈ Finset.range (2 ^ k), t1 ^ 2 ^ i = 1 ∧ ∑ i ∈ Finset.range (2 ^ k), t1⁻¹ ^ 2 ^ i = 1)
:
theorem
lifted_trace_map_eval_at_roots_prev_BTField
{curBTField : Type u_1}
[Field curBTField]
(u t1 : curBTField)
(k : ℕ)
(sumZeroIffEq : ∀ (x y : curBTField), x + y = 0 ↔ x = y)
(u_plus_inv_eq_t1 : u + u⁻¹ = t1)
(galois_automorphism : u ^ 2 ^ 2 ^ k = u⁻¹ ∧ u⁻¹ ^ 2 ^ 2 ^ k = u)
(trace_map_at_prev_root : ∑ i ∈ Finset.range (2 ^ k), t1 ^ 2 ^ i = 1)
:
theorem
rsum_eq_t1_square_aux
{curBTField : Type u_1}
[Field curBTField]
(u : curBTField)
(k : ℕ)
(x_pow_card : ∀ (x : curBTField), x ^ 2 ^ 2 ^ (k + 1) = x)
(u_ne_zero : u ≠ 0)
(trace_map_at_prev_root :
∑ i ∈ Finset.range (2 ^ (k + 1)), u ^ 2 ^ i = 1 ∧ ∑ i ∈ Finset.range (2 ^ (k + 1)), u⁻¹ ^ 2 ^ i = 1)
:
Equivalence between Fin m × Fin n
and Fin (m * n)
which splits quotient part into Fin (n) and the remainder into Fin (m).
If m and n are powers of 2, the Fin (n) holds MSBs and Fin (m) holds LSBs.
This is a reversed version of finProdFinEquiv
.
We put m
before n
for integration with Basis.smulTower
in multilinearBasis
though it's a bit counter-intuitive.
Equations
- leftDivNat i = ⟨↑i / m, ⋯⟩
Instances For
@[simp]
theorem
linearIndependent_fin2'
{K : Type u_3}
{V : Type u}
[DivisionRing K]
[AddCommGroup V]
[Module K V]
{f : Fin 2 → V}
: