invertibility invertibility
Seal
Rung rung-1 · Status interfaced — each
#print axiomsreports exactly[propext, Classical.choice, Quot.sound], nosorryAx(recorded in The machine seal; full workspace build 2626 jobs). One named interface:hsvd, the singular-value criterion — see interfaces. The determinant and unit biconditionals carry no interface.
Links: module index · interface ledger · related det_gamma_identity · source giordano2019coordinated · pintasks/streams/leanpunov/scratch/check_gamma_invertible.py· lesson lesson_01_error_floor_cascade
Sealed theorems
isUnit_coordinated_transform
Abstract commutative ring: the block transform is a unit iff its lower-right block is.
det_ne_zero_coordinated_transform
Abstract commutative ring: the two determinants vanish together.
gamma_nonsingular_iff
Thesis over : .
gamma_isUnit_iff
Thesis instance: invertible invertible.
gamma_isUnit_iff_sigmaMin_pos
The bridge, given hsvd: the region is exactly where is invertible.
Why this matters
Every downstream theorem of the coordinated architecture carries a standing side-condition: the coordinated transform must be invertible at the current configuration. The controller inverts once per step to recover the generalized velocities, and the singularity-handling layer refuses to enter — or slows the mission — near configurations where that inverse blows up. The singularity-free region is written
(current_sota.md eq 2.4 §4.6, Giordano 2019 RA-L eq 19 / eq 36). Notice the region is defined by the small block — the circumcentroidal Jacobian — not by the full transform . That is a claim, and it is the claim this note seals: watching the small block is not a heuristic, it is exactly equivalent to being invertible.
L1 already sealed the sharp algebraic fact behind this — the determinant identity (det_gamma_identity.md, DetGamma.lean). This note (TARGET 3) turns that equality of scalars into the biconditional of invertibility the side-condition actually needs, and connects it to .
What we prove, and what we interface
Two grades of statement, both sealed:
-
The determinant / unit biconditionals — proved outright from L1:
- (
gamma_nonsingular_iff) - is a unit is a unit (
gamma_isUnit_iff), i.e. the matrices are invertible together, in the ring of matrices.
- (
-
The -region bridge —
gamma_isUnit_iff_sigmaMin_pos: the region is exactly where is invertible.
The one fact grade 2 needs that grade 1 does not is the standard singular-value criterion for a square real matrix
This is left as a named interface hypothesis hsvd, not proved. See “The one interface” below for exactly why, and what it would take to discharge it. Everything downstream of hsvd — the reduction of the condition on the small block to invertibility of the full transform — is machine-checked.
Sources and provenance
- Block structure of and the side-condition: (~/Code/Inspection/GNC/equations/current_sota.md) eq 2.4 and §4.6, transcribing Giordano, Ott & Albu-Schäffer, “Coordinated Control of Spacecraft’s Attitude and End-Effector for Space Robots” (IEEE RA-L 2019), bibkey
giordano2019coordinated, eq 19 / eq 36. - The determinant identity it stands on: det_gamma_identity.md and
DetGamma.leanin this directory (L1, sealed). - Matrix invertibility determinant invertibility:
Matrix.isUnit_iff_isUnit_det(Mathlib,LinearAlgebra/Matrix/NonsingularInverse.lean), the formal form of Cramer’s rule / the adjugate identity. - Unit nonzero in a field:
isUnit_iff_ne_zero(Mathlib,Algebra/GroupWithZero/Units/Basic.lean). - Machine pre-check (biconditional teeth): (~/Code/tasks/streams/leanpunov/scratch/check_gamma_invertible.py), five exact-rational trials 2026-07-06.
A notation note: this document writes for the skew-symmetric cross-product operator the source sheet writes ; and for the transpose.
The precise statement
As in L1, the arm is nonredundant ( joints), so is square and its determinant and inverse are defined. The transform, block rows and columns of sizes , is
with and the identity.
Theorem (invertibility biconditional). At every configuration, is invertible is invertible. Equivalently .
Corollary ( region). Given the singular-value criterion , the region is exactly the set of configurations at which is invertible.
Proof
The whole argument is a two-line composition — which is the point: once L1 pinned the determinant equality, the invertibility biconditional costs almost nothing, because invertibility of a square matrix is a property of its determinant alone.
Step 1 — the determinant biconditional. L1 gives, at every configuration, . Two scalars that are equal are zero together and nonzero together, so immediately
No field structure is used here; it is pure substitution into the L1 identity. This is gamma_nonsingular_iff (and, at the abstract commutative-ring level, det_ne_zero_coordinated_transform).
Step 2 — from determinant to invertibility. For any square matrix over a commutative ring, is invertible is a unit of the ring — this is Cramer’s rule made into an equivalence, Mathlib’s Matrix.isUnit_iff_isUnit_det. Applying it to both and and substituting the L1 equality of determinants,
This is gamma_isUnit_iff (abstract level: isUnit_coordinated_transform). It holds over any commutative ring — the base-to-CoM rotation and the identity block do all the work through , exactly as in L1.
Step 3 — the bridge. Over the field , a scalar is a unit iff it is nonzero (isUnit_iff_ne_zero), so ” invertible” is "". Feeding in the singular-value criterion (the interface hsvd) and chaining through Step 2,
which is , the standing side-condition. This is gamma_isUnit_iff_sigmaMin_pos.
The one interface
gamma_isUnit_iff_sigmaMin_pos takes two arguments that are not proved inside it:
sigmaMin : Matrix (Fin 6) (Fin 6) ℝ → ℝ— an arbitrary candidate for the smallest-singular-value map. It is a bare function parameter, so the theorem cannot secretly assume anything about it: whatever "" means, the conclusion holds provided it satisfies the next hypothesis.hsvd : 0 < sigmaMin J ↔ J.det ≠ 0— the standard SVD fact that a square real matrix is nonsingular iff its smallest singular value is positive.
Why interface hsvd rather than prove it? Mathlib’s pin (v4.31.0) does carry singular values — LinearMap.singularValues in Mathlib/Analysis/InnerProductSpace/SingularValues.lean — but they are defined on linear maps as an -indexed Finsupp, with lemmas phrased through finrank and T.range (e.g. injective_iff_forall_lt_finrank_singularValues_pos). There is no library lemma of the form σ_min(matrix) > 0 ↔ det ≠ 0. Discharging hsvd would mean building the whole bridge: matrix its toLin', "" (an over of an antitone Finsupp) injectivity of that map det ≠ 0 via the finite-dimensional rank-nullity route. That is precisely the new singular-value machinery TARGET 3 was scoped to avoid, and it is several lemmas past the S-difficulty content here (the determinant biconditional is a two-line composition). Per the campaign’s INTERFACE-don’t-fake rule, hsvd stays a named applier-side hypothesis: it is honest standard mathematics, not a weaker substitute and not a silent sorry. The upgrade path, if a later lane wants it, is exactly the LinearMap.singularValues route named above.
The determinant and unit biconditionals (gamma_nonsingular_iff, gamma_isUnit_iff) carry no interface — they are fully proved from L1.
Post-proof analysis
The moral. adds no invertibility failures of its own. Its volume-preserving coordinates (a rotation, the base angular velocity passed through) can never make an invertible transform singular nor rescue a singular one; the entire loss of rank is inherited from the circumcentroidal block. The controller’s practice of gating on is therefore exact: is not an approximation of the invertible region, it is the invertible region.
What it still does not say. As L1 already noted, equal determinants do not mean equal conditioning: in general, and the empirical Spearman correlation (, sheet §6) is a separate, weaker statement. This note pins the singular set exactly; it says nothing new about how close to singular the two matrices are.
Cost. Difficulty S, and it felt like it: three theorems that are each a single rw chain over L1 plus two stock Mathlib lemmas, well under an L2-scale push. The only friction was elaboration order — under IsUnit (fromBlocks …) the middle identity block 1 needs an explicit (1 : Matrix (Fin 3) (Fin 3) ℝ) type ascription, because squareness (hence the identity’s row index) is only forced by the Monoid/.det instance that resolves after the block term elaborates. L1’s statement sat under .det, which pinned it earlier, so L1 did not need the ascription.
The machine seal
- SymPy pre-check (~/Code/tasks/streams/leanpunov/scratch/check_gamma_invertible.py): builds the full eq 2.4 structure over exact rationals with a genuine rational rotation and the eq 2.2 form of , then exhibits the biconditional with teeth on both sides — a nonsingular () forces , and a rank-deficient (last row an integer combination of the others, ) forces no matter what the arbitrary top-right blocks contain. Five trials, all passing 2026-07-06. (The determinant equality itself was already pinned in L1’s check_det_gamma.py; this pin targets the invertibility biconditional specifically.)
- Lean 4 seal —
GammaInvertible.leanin this directory. Five theorems:isUnit_coordinated_transformanddet_ne_zero_coordinated_transform(abstract commutative ring),gamma_nonsingular_iffandgamma_isUnit_iff(thesis over , ), and the bridgegamma_isUnit_iff_sigmaMin_pos. Each#print axiomsreports exactly[propext, Classical.choice, Quot.sound]— nosorryAx. Built green against the full Leanpunov workspace (2626 jobs) on the Mathlib v4.31.0 pin.