Hello Martin You're certainly on track, however, as a believer in the KISS principle I'd say there is room for improvement. Since I'm mostly interested in homology I've not thoroughly tested the 'fundamentalGroup', yet some questions related to homotopy:
* On http://www.euclideanspace.com/prog/scratchpad/mycode/discrete/finiteGroup/presentation/ the sentence "Negative values indicate" ends abruptly, so what's the exact meaning|purpose of the '<|>'? Maybe I'm confused by the result of fundamentalGroup(fillSquare). * I also found some discrepancies regarding the following facts: a) any convex subset has a trivial fundamental group and b) the first singular homology group coincides (isom) with the abelianization of the fundamental group (if path connected), e.g. a 'cube'. I might be mistaken because I don't understand the group presentation yet. * Do you intend implementing higher homotopy groups? Concerning 'homology' I find the algorithm quite elegant, however, why do you define the function in each complex? - FiniteSimplicialComplex - FiniteCubicalComplex - DeltaComplex - ChainComplex() For my taste it should be isolated as a general concept. Actually it should be enough to define 'homology' on general abstract chains represented as free abelian groups ([Z,Q,?]-Module whatever the purpose). This would mean identifying simplices, cubes, faces, complexes etc. with chains (not necessarily homogeneous). What I really wanted to say is that it should be possible to achieve the same functionality in about 300 lines of code. However, this is not so important in the first place as to verify the algorithms. You mentioned 'cohomology' in your source code comments related to DeRhamComplex (lines 43 and 2718): this is of course on another level but if you base your package on chains then it might be useful for DeRham homology/cohomology in simple cases. Why? Because we can identify chains as DeRham currents which are acting on cochains ~ differential forms (already in Fricas as DeRhamComplex). There are a lot of difficulties of course working with R-Modules in Fricas, yet with the CAD package it might be possible for some simple algebraic varieties. I keep up testing. GrĂ¼sse Kurt Am 30.06.2016 um 17:50 schrieb Martin Baker: > Does anyone have any validated examples that I could use to check my > homology (using Waldeks method) and homotopy code? > > Below are some examples of homology and homotopy from simplicial and > cubical complexes. I think the results are starting to look quite > promising. There is obviously a problem with the homotopy since > fundamental group is giving a different result for triangle and square. > Looks like there is also a problem with projective plane since this > gives [Z,C2,0] but sage gives: > RP4 = simplicial_complexes.RealProjectiveSpace(2) > RP4.homology() > {0: 0, 1: C2, 2: 0} > > I would appreciate any help to improve and validate the code. > > Here are some results from my SPAD code: > (Note: low dimensions are on the left) > > fillTriangle := sphereSolid(2)$SimplicialComplexFactory > > (1) > (1,2,3) > Type: FiniteSimplicialComplex(VertexSetAbstract) > homology(fillTriangle) > > (2) [Z,0,0] > Type: List(Homology) > fundamentalGroup(fillTriangle) > > (3) < | > > Type: GroupPresentation > fillSquare := sphereSolid(2)$CubicalComplexFactory > > (4) > (1..2,1..2) > Type: FiniteCubicalComplex(VertexSetAbstract) > homology(fillSquare) > > (5) [Z,0,0] > Type: List(Homology) > fundamentalGroup(fillSquare) > > (6) <d | > > Type: GroupPresentation > fillTetra := sphereSolid(3)$SimplicialComplexFactory > > (7) > (1,2,3,4) > Type: FiniteSimplicialComplex(VertexSetAbstract) > homology(fillTetra) > > (8) [Z,0,0,0] > Type: List(Homology) > fundamentalGroup(fillTetra) > > (9) < | > > Type: GroupPresentation > fillCube := sphereSolid(3)$CubicalComplexFactory > > (10) > (1..2,1..2,1..2) > Type: FiniteCubicalComplex(VertexSetAbstract) > homology(fillCube) > > (11) [Z,0,0,0] > Type: List(Homology) > fundamentalGroup(fillCube) > > - 1 > (12) <k l m n | m*l *k> > > Type: GroupPresentation > triangle := sphereSurface(2)$SimplicialComplexFactory > > (13) > (1,2) > -(1,3) > (2,3) > Type: FiniteSimplicialComplex(VertexSetAbstract) > homology(triangle) > > (14) [Z,Z] > Type: List(Homology) > fundamentalGroup(triangle) > > (15) <c | > > Type: GroupPresentation > tetra := sphereSurface(3)$SimplicialComplexFactory > > (16) > (1,2,3) > -(1,2,4) > (1,3,4) > -(2,3,4) > Type: FiniteSimplicialComplex(VertexSetAbstract) > homology(tetra) > > (17) [Z,0,Z] > Type: List(Homology) > fundamentalGroup(tetra) > > (18) < | > > Type: GroupPresentation > torus := torusSurface()$SimplicialComplexFactory > > (19) > (1,2,3) > (2,3,5) > (2,4,5) > (2,4,7) > (1,2,6) > (2,6,7) > (3,4,6) > (3,5,6) > (3,4,7) > (1,3,7) > (1,4,5) > (1,4,6) > (5,6,7) > (1,5,7) > Type: FiniteSimplicialComplex(VertexSetAbstract) > homology(torus) > > (20) [Z,Z*2,Z] > Type: List(Homology) > fundamentalGroup(torus) > > - 1 - 1 > (21) <o t w | o*w *t o*t*w > > > Type: GroupPresentation > proj := projectivePlane()$SimplicialComplexFactory > > (22) > (1,2,3) > (1,3,4) > (1,2,6) > (1,5,6) > (1,4,5) > (2,3,5) > (2,4,5) > (2,4,6) > (3,4,6) > (3,5,6) > Type: FiniteSimplicialComplex(VertexSetAbstract) > homology(proj) > > (23) [Z,C2,0] > Type: List(Homology) > fundamentalGroup(proj) > > (24) <p | p*p> > Type: GroupPresentation > klein := kleinBottle()$SimplicialComplexFactory > > (25) > (3,4,8) > (2,3,4) > (2,4,6) > (2,6,8) > (2,5,8) > (3,5,7) > (2,3,7) > (1,2,7) > (1,2,5) > (1,3,5) > (4,5,8) > (4,5,7) > (4,6,7) > (1,6,7) > (1,3,6) > (3,6,8) > Type: FiniteSimplicialComplex(VertexSetAbstract) > homology(klein) > > (26) [Z,Z+C2,0] > Type: List(Homology) > fundamentalGroup(klein) > > - 1 > (27) <v w z | w*z *v v*z*w> > > Type: GroupPresentation > > > If anyone would like to try the code it is in usual place: > > https://github.com/martinbaker/multivector/blob/master/logic.spad > https://github.com/martinbaker/multivector/blob/master/graph.spad > https://github.com/martinbaker/multivector/blob/master/groupPresentation.spad > > https://github.com/martinbaker/multivector/blob/master/algebraictopology.spad > > > Then compile as follows: > > )boot $createLocalLibDb:=false > )co logic > )co graph > )co groupPresentation > )boot $bootStrapMode := true > )co algebraictopology > )co algebraictopology > )boot $bootStrapMode := false > )co algebraictopology > > Martin B > -- You received this message because you are subscribed to the Google Groups "FriCAS - computer algebra system" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/fricas-devel. For more options, visit https://groups.google.com/d/optout.
