Documentation

LeanPool.Superdiffusion.Algsuperdiff.Section3.Provider.Block.CompletedSquares

CompletedSquares #

Ported from scottnarmstrong/Superdiffusion at 7f20476385d4af418f110303085ad0740c9eba46. Module imports, support namespace and local option directives adapted for Lean Pool.

Provider: the two completed-square formulas for the doubled response #

This file proves local versions of the displays e.bfJ.magic and e.bfJ.magic2 of ABK26:

Both are pure block-matrix algebra on top of CoarseGraining's public splitting

bfJ(U,P,Q) = 1/2 P . bfA P + 1/2 Q . bfA_*^{-1} Q - P . Q

(Homogenization.Book.Ch02.BlockCoarseMatrixTheory.doubled_response_splitting), using only symmetry of bfA and bfA_*^{-1} and the two-sided inverse relations between bfA_* and bfA_*^{-1}.

Notation for differences of block matrices #

BlockMat d is a four-field structure without a Sub instance, so CoarseGraining writes the difference of two block matrices as ofFullBlockMat (toFullBlockMat A - toFullBlockMat B); the quadratic form of such a difference splits by Homogenization.blockVecDot_blockMatVecMul_ofFullBlockMat_sub. That is the spelling used below.

The inverse of bfA #

CoarseGraining names bfA_*^{-1}(U;a) = blockReflect (bfA(U;a)) and bfA_*(U;a) = blockMatInv (bfA_*^{-1}(U;a)) but does not name bfA^{-1}. It is introduced here as coarseBlockMatrixInv, defined by the same generic block inverse blockMatInv, and identified with blockReflect (bfA_*(U;a)); the two-sided inverse identities then follow from CoarseGraining's starred_left_inverse and starred_right_inverse because blockReflect is a multiplicative involution.

Bilinearity helpers for the doubled pairing #

blockReflect is a multiplicative involution #

The inverse of the coarse block matrix #

The inverse bfA^{-1}(U; a) of the coarse block matrix, defined by the same generic doubled inverse blockMatInv that CoarseGraining uses for bfA_*(U; a).

Equations
Instances For

    bfA^{-1}(U; a) is the block reflection of bfA_*(U; a), mirroring CoarseGraining's identity bfA_*^{-1}(U; a) = blockReflect (bfA(U; a)).

    e.bfJ.magic2: completing the square in the potential variable #