Documentation

CompPoly.Fields.Binary.Tower.Concrete.Algebra

Concrete Binary Tower Algebra #

Algebra maps and embeddings for the concrete bitvector binary tower.

The embedding into the next level preserves the stored natural word.

@[simp]

Z(k+1) is the adjoined root of poly k to ConcreteBTField (k+1), so it is not lifted to ConcreteBTField (k+1) by canonicalAlgMap

@[simp]
@[simp]
@[irreducible]

Auxiliary definition for concreteTowerAlgebraMap using structural recursion. This is easier to reason about in proofs than the Nat.rec version.

Instances For

    Right associativity of the Tower Map

    Left associativity of the Tower Map

    @[simp]

    Cast of composition of ConcreteBTField ring homomorphism is composition of casted ConcreteBTField ring homomorphism. Note that this assumes the SAME underlying instances (e.g. NonAssocSemiring) for both the input and output ring homs.

    theorem ConcreteBinaryTower.concreteTowerAlgebraMap_assoc (r mid l : ) (h_l_le_mid : l mid) (h_mid_le_r : mid r) :
    concreteTowerAlgebraMap l r = (concreteTowerAlgebraMap mid r h_mid_le_r).comp (concreteTowerAlgebraMap l mid h_l_le_mid)

    An embedding between any ordered levels preserves the stored natural word.

    An embedding between ordered levels zero-extends the original bitvector.

    theorem ConcreteBinaryTower.concreteTowerAlgebraMap_Z_succ {k j : } (h : k + 1 j) :
    ((concreteTowerAlgebraMap (k + 1) j h) (Z (k + 1))).toBitVec = BitVec.ofNat (2 ^ j) (2 ^ 2 ^ k)

    The image of the level-k + 1 generator keeps its set bit at position 2 ^ k.

    @[instance_reducible]

    Formalization of Cross - Level Algebra : For any k ≤ τ, ConcreteBTField τ is an algebra over ConcreteBTField k.

    @[reducible, inline]
    Instances For
      def ConcreteBinaryTower.join_via_add_smul (k : ) (h_pos : k > 0) (hi_btf lo_btf : ConcreteBTField (k - 1)) :
      Instances For
        theorem ConcreteBinaryTower.split_algebraMap_eq_zero_x {k : } (h_pos : k > 0) (x : ConcreteBTField (k - 1)) :

        An element x lifted from the base field ConcreteBTField (k-1) has (0, x) as its split representation in ConcreteBTField k.

        theorem ConcreteBinaryTower.split_smul_Z_eq_zero_x {k : } (h_pos : k > 0) (x : ConcreteBTField (k - 1)) :
        split h_pos (x Z k) = (x, 0)
        theorem ConcreteBinaryTower.smul_Z_eq_zero_x {k : } (h_pos : k > 0) (x : ConcreteBTField (k - 1)) :
        x Z k = join h_pos x 0
        @[simp]
        theorem ConcreteBinaryTower.join_eq_join_via_add_smul {k : } (h_pos : k > 0) (hi_btf lo_btf : ConcreteBTField (k - 1)) :
        join h_pos hi_btf lo_btf = join_via_add_smul k h_pos hi_btf lo_btf
        theorem ConcreteBinaryTower.split_join_via_add_smul_eq_iff_split {k : } (h_pos : k > 0) (hi_btf lo_btf : ConcreteBTField (k - 1)) :
        split h_pos (join_via_add_smul k h_pos hi_btf lo_btf) = (hi_btf, lo_btf)
        @[reducible, inline]

        This also provides the corresponding Module instance.

        Instances For