Recursive computation rules for the Clifford algebra #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This file provides API for a special case clifford_algebra.foldr
of the universal property
clifford_algebra.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 clifford_algebra.foldl
, implemented via
clifford_algebra.reverse
Main definitions #
clifford_algebra.foldr
: a computation rule for building linear maps out of the clifford algebra starting on the right, analogous to usinglist.foldr
on the generators.clifford_algebra.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 #
clifford_algebra.right_induction
: an induction rule that adds generators from the right.clifford_algebra.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
- clifford_algebra.foldr Q f hf = (⇑(clifford_algebra.lift Q) ⟨f, _⟩).to_linear_map.flip
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
- clifford_algebra.foldl Q f hf = (clifford_algebra.foldr Q f hf).compl₂ clifford_algebra.reverse
This lemma demonstrates the origin of the foldl
name.
Versions with extra state #
Auxiliary definition for clifford_algebra.foldr'
Equations
- clifford_algebra.foldr'_aux Q f = {to_fun := λ (m : M), (⇑(((algebra.lmul R (clifford_algebra Q)).to_linear_map.comp (clifford_algebra.ι Q)).compl₂ (linear_map.fst R (clifford_algebra Q) N)) m).prod (⇑f m), map_add' := _, map_smul' := _}
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 clifford_algebra.foldr
, but with an extra x
argument.
Implement the recursion scheme F[n0](m * x) = f(m, (x, F[n0](x)))
.
Equations
- clifford_algebra.foldr' Q f hf n = (linear_map.snd R (clifford_algebra Q) N).comp (⇑(clifford_algebra.foldr Q (clifford_algebra.foldr'_aux Q f) _) (1, n))