Recursive computation rules for the Clifford algebra #
This file provides API for a special case CliffordAlgebra.foldr
of the universal property
CliffordAlgebra.lift
with A = Module.End R N
for some arbitrary module N
. This specialization
resembles the list.foldr
operation, allowing a bilinear map to be "folded" along the generators.
For convenience, this file also provides CliffordAlgebra.foldl
, implemented via
CliffordAlgebra.reverse
Main definitions #
CliffordAlgebra.foldr
: a computation rule for building linear maps out of the clifford algebra starting on the right, analogous to usinglist.foldr
on the generators.CliffordAlgebra.foldl
: a computation rule for building linear maps out of the clifford algebra starting on the left, analogous to usinglist.foldl
on the generators.
Main statements #
CliffordAlgebra.right_induction
: an induction rule that adds generators from the right.CliffordAlgebra.left_induction
: an induction rule that adds generators from the left.
Fold a bilinear map along the generators of a term of the clifford algebra, with the rule
given by foldr Q f hf n (ι Q m * x) = f m (foldr Q f hf n x)
.
For example, foldr f hf n (r • ι R u + ι R v * ι R w) = r • f u n + f v (f w n)
.
Equations
- CliffordAlgebra.foldr Q f hf = ((CliffordAlgebra.lift Q) ⟨f, ⋯⟩).toLinearMap.flip
Instances For
This lemma demonstrates the origin of the foldr
name.
Fold a bilinear map along the generators of a term of the clifford algebra, with the rule
given by foldl Q f hf n (ι Q m * x) = f m (foldl Q f hf n x)
.
For example, foldl f hf n (r • ι R u + ι R v * ι R w) = r • f u n + f v (f w n)
.
Equations
- CliffordAlgebra.foldl Q f hf = (CliffordAlgebra.foldr Q f hf).compl₂ CliffordAlgebra.reverse
Instances For
This lemma demonstrates the origin of the foldl
name.
Versions with extra state #
Auxiliary definition for CliffordAlgebra.foldr'
Equations
- One or more equations did not get rendered due to their size.
Instances For
Fold a bilinear map along the generators of a term of the clifford algebra, with the rule
given by foldr' Q f hf n (ι Q m * x) = f m (x, foldr' Q f hf n x)
.
Note this is like CliffordAlgebra.foldr
, but with an extra x
argument.
Implement the recursion scheme F[n0](m * x) = f(m, (x, F[n0](x)))
.
Equations
- CliffordAlgebra.foldr' Q f hf n = LinearMap.snd R (CliffordAlgebra Q) N ∘ₗ (CliffordAlgebra.foldr Q (CliffordAlgebra.foldr'Aux Q f) ⋯) (1, n)