I'm implementing a Geometric Algebra library where I hope to be able to elegantly handle degenerate metrics as well as the more common euclidean and non-euclidean metrics. i.e. $\ e_i e_i = \{0,1,-1\}$
For $\ e_i e_i = \{1,-1\}$ the most common formula I've found for the dual is $ B^* = BI^{-1} $ where $ I^{-1} $ is the inverse of the psuedoscalar for the space you are working in.
From what I can tell, I need the dual to map a k-vector to a k-vector representing (spanning) it's orthogonal complement. A property to be preserved is $B^{**} = -B$
Which brings up my first question. For what reason does the dual of the dual negate the k-vector it acts on? Presumably you could have $B^{**} = B$ and also still have $B^*\perp B $
Back to the degenerate metric. I can't use the inverse of the psuedoscalar involving a degenerate metric for example: $e_1 e_1 = 0$, $I = e_{123}$ in $ G^{2,0,1}$ since $I^{-1}$ doesn't exist in this case.
If I were to use $B^* = BI$ or $B^* = B \rfloor I$ as I've seen in some material. I end up with $e_1e_{123} = 0$ which is not the orthogonal complement of $e_1$
So what can I do? Best I've come up with is to use difference of the indices against the psuedoscalar's to create an orthogonal k-vector. i.e. $ e_{13} => [1,3]$ diff $[1,2,3] => [2] => e_2$ I've played around with ways of getting the sign to agree with the other definitions of the dual, but can't quite get it right.
Charles Gunn uses Poincare Duality for 3D Projective Geometric Algebra https://bivector.net/doc.html, but this doesn't fully agree with the purely euclidean dual from some quick tests I did. Also I know very little about algebraic topology so implementing a general Poincare Map is beyond me at this point.