Basic properties of holors #
Holors are indexed collections of tensor coefficients. Confusingly, they are often called tensors in physics and in the neural network community.
A holor is simply a multidimensional array of values. The size of a
holor is specified by a List ℕ
, whose length is called the dimension
of the holor.
The tensor product of x₁ : Holor α ds₁
and x₂ : Holor α ds₂
is the
holor given by (x₁ ⊗ x₂) (i₁ ++ i₂) = x₁ i₁ * x₂ i₂
. A holor is "of
rank at most 1" if it is a tensor product of one-dimensional holors.
The CP rank of a holor x
is the smallest N such that x
is the sum
of N holors of rank at most 1.
Based on the tensor library found in https://www.isa-afp.org/entries/Deep_Learning.html
References #
HolorIndex ds
is the type of valid index tuples used to identify an entry of a holor
of dimensions ds
.
Equations
- HolorIndex ds = { is : List ℕ // List.Forall₂ (fun (x1 x2 : ℕ) => x1 < x2) is ds }
Instances For
Instances For
Instances For
Instances For
Instances For
Equations
- Holor.instInhabited = { default := fun (x : HolorIndex ds) => default }
Equations
- Holor.instZero = { zero := fun (x : HolorIndex ds) => 0 }
Equations
- Holor.instAddSemigroup = Pi.addSemigroup
Equations
- Holor.instAddCommSemigroup = Pi.addCommSemigroup
Equations
- Holor.instAddCommMonoid = Pi.addCommMonoid
Equations
- Holor.instAddCommGroup = Pi.addCommGroup
Equations
- Holor.instModule = Pi.module (HolorIndex ds) (fun (a : HolorIndex ds) => α) α
The 1-dimensional "unit" holor with 1 in the j
th position.
Equations
- Holor.unitVec d j ti = if ↑ti = [j] then 1 else 0
Instances For
The original holor can be recovered from its slices by multiplying with unit vectors and summing up.
CPRankMax1 x
means x
has CP rank at most 1, that is,
it is the tensor product of 1-dimensional holors.
- nil: ∀ {α : Type} [inst : Mul α] (x : Holor α []), x.CPRankMax1
- cons: ∀ {α : Type} [inst : Mul α] {d : ℕ} {ds : List ℕ} (x : Holor α [d]) (y : Holor α ds), y.CPRankMax1 → (x.mul y).CPRankMax1
Instances For
CPRankMax N x
means x
has CP rank at most N
, that is,
it can be written as the sum of N holors of rank at most 1.
- zero: ∀ {α : Type} [inst : Mul α] [inst_1 : AddMonoid α] {ds : List ℕ}, Holor.CPRankMax 0 0
- succ: ∀ {α : Type} [inst : Mul α] [inst_1 : AddMonoid α] (n : ℕ) {ds : List ℕ} (x y : Holor α ds), x.CPRankMax1 → Holor.CPRankMax n y → Holor.CPRankMax (n + 1) (x + y)