Martin Baker wrote:
> On 19/09/16 11:17, Waldek Hebisch wrote:
> > AFAICS code which allows omiting lower
> > dimensional faces is buggy, if we include lower dimensional
> > faces we get duplicate simplices.  In particular, all
> > faces of triangle are duplicated and we get three extra
> > loops.
> Are sure this is buggy?
> AFAICS we need to take orientation into account and orientation requires 
> a consistent set of notation standards. Could it be that other programs 
> are using different conventions?
> (1) -> triangle := sphereSolid(2)$SimplicialComplexFactory
>     (1)
>          (1,2,3)
>                      Type: FiniteSimplicialComplex(VertexSetAbstract)
> (2) -> delta(triangle)
> (2)
>          (1,2)
>         -(1,3)
>          (2,3)
>                   Type: FiniteSimplicialComplex(VertexSetAbstract)
> So [(1,2),-(1,3), (2,3)] represents a circular chain (boundary of a 
> triangle).
> Which can be notated [(1,2),(3,1), (2,3)]
> OTOH [(1,2), (1,3), (2,3)] represents two parallel chains, starting and 
> ending at the same vertices. This will have different homology.

You are confused.  As a face (part of simplical complex) (1,3) and
(3, 1) are the same face.  And problem is not due to wrong
orientation of input:

v2b:List(List(NNI)) := [[1,2],[3,1],[2,3],[1,2,3]]
si2 := simplicialComplex(vertexSeta(3::NNI),v2b)$ASIMP
(20) -> homology(si2)

   (20)  [Z,Z*3,0]
                                                         Type: List(Homology)
(21) -> addImpliedFaces(si2)

   (21)  [[(1,2),-(1,3),(2,3),(2,3),(1,3),(1,2)],[(1,2,3)]]
                                              Type: List(List(OrientedFacet))

Here orientation of one-dimensional edges agrees with boundary
of two-dimensional simplex, but we get duplicated edges.
AFAICS the problem is that 'addImpliedFaces' detects duplicates
between boundary faces, but ignores possible duplication
between explicitely provided faces and boundary faces.

Oriententin in 'addImpliedFaces' just add some unnecessary
complication because duplication should be detected diregarding
orientation so it would be simpler to use unoriented faces here.
Working with oriented faces means the we need something like your
signed 'position' from OrientedFacet.

> These conventions make sense to me because all we need to do is order 
> the facets (left entry is most significant) and then alternate the sign.
> This is what concerns me about your proposal, for changing the VertexSet 
> structure, the user interface could then loose this ordering information.
> So is this Cyclic?
> [(a,b),-(a,c), (b,c)]
> I would say yes, but only if a<b<c or a>b>c, but the user can't know 
> this because they can't see the underlying index ordering.

- apparently you want chains here.  Chains are not the same as
- in homology cyclic means that boudary is zero.  You get zero
  boundary from the chain _regardless_ of underlying index ordering.
  Different ordering can change orientation of edges and hence
  boundaries of edges, but the boundary of chain will change in
  consistent way, in partucular zero boundary will remain
  zero boudary.
- you may be thinking homotopy here.  You can get the same
  one-dimensional chain (in fact cycle) from two inequivalent

                              Waldek Hebisch

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 post to this group, send email to
Visit this group at
For more options, visit

Reply via email to