From f22203d2bbf61dda2bae454717be7da4e5260eaf Mon Sep 17 00:00:00 2001 From: Flynn Fehre Date: Sun, 10 Mar 2024 19:22:38 +0100 Subject: [PATCH 1/2] removed everything related to ButterflyFaithfulMonomorphismIntoSimplicialSurface in order to split facegraph_function branch --- gap/Morphisms/morphisms.gd | 75 ------ gap/Morphisms/morphisms.gi | 516 ------------------------------------- 2 files changed, 591 deletions(-) diff --git a/gap/Morphisms/morphisms.gd b/gap/Morphisms/morphisms.gd index 8b01c12c..a494e951 100644 --- a/gap/Morphisms/morphisms.gd +++ b/gap/Morphisms/morphisms.gd @@ -422,81 +422,6 @@ DeclareOperation( "PolygonalIdentityMorphism", [IsPolygonalComplex] ); DeclareAttribute( "InversePolygonalMorphism", IsPolygonalMorphism and IsBijective ); -#! -#! -#! A polygonal morphism or fail -#! -#! Given two simplicial surfaces surf1 and surf2, return a butterfly-faithful -#! monomorphism from surf1 to surf2 if it exists. Otherwise return fail. -#! A homomorphism of simplicial surfaces is called butterfly-faithful if the homomorphism -#! when restricted to a butterfly, i.e. restricted to two incident faces of an inner edge, -#! becomes a bijection onto another butterfly. In other words, every butterfly of -#! surf1 is being preserved and does not degenerate in surf2. -#! As an example, consider the 3-half-umbrella and 6-umbrella. -#! -#! \begin{tikzpicture}[vertexStyle, edgeStyle, faceStyle] -#! \input{Image_Butterfly_Faithful_Monomorphism_Hexagon.tex} -#! \end{tikzpicture} -#! -#! @ExampleSession -#! gap> six := SimplicialSurfaceByDownwardIncidence( -#! > [[1,2],[2,3],[3,4],[4,5],[5,6],[6,1],,[1,8],[2,8],[3,8],[4,8],[5,8],[6,8]], -#! > [[1,8,9],[2,9,10],[3,10,11],[4,11,12],[5,12,13],[6,13,8]]);; -#! gap> three := SimplicialSurfaceByDownwardIncidence( -#! > [[1,2],[2,3],[3,4],[5,4],[1,5],[2,5],[3,5]], [[1,5,6],[2,6,7],[3,7,4]]);; -#! gap> mor_3_to_6 := ButterflyFaithfulMonomorphismIntoSimplicialSurface(three, -#! > six);; -#! gap> VertexMapAsImageList(mor_3_to_6); -#! [ 1, 2, 3, 4, 8 ] -#! gap> EdgeMapAsImageList(mor_3_to_6); -#! [ 1, 2, 3, 11, 8, 9, 10 ] -#! gap> FaceMapAsImageList(mor_3_to_6); -#! [ 1, 2, 3 ] -#! @EndExampleSession -#! -#! -# -DeclareOperation( "ButterflyFaithfulMonomorphismIntoSimplicialSurface", [IsSimplicialSurface, IsSimplicialSurface]); - -#! -#! -#! A list of polygonal morphisms -#! -#! Given two simplicial surfaces surf1 and surf2, return a list of all -#! butterfly-faithful monomorphisms from surf1 to surf2. -#! A homomorphism of simplicial surfaces is called butterfly-faithful if the homomorphism -#! when restricted to a butterfly, i.e. restricted to two incident faces of an inner edge, -#! becomes a bijection onto another butterfly. In other words, every butterfly of -#! surf1 is being preserved and does not degenerate in surf2. -#! As an example, consider the 3-half-umbrella and 6-umbrella. We would expect 12 -#! butterfly-faithful monomorphisms, namely by aligning the 3-half umbrella with 3 -#! consecutive faces of the 6-umbrella. There are 6 ways to do this and another 6 if -#! we flip the 3-half-umbrella first. -#! -#! \begin{tikzpicture}[vertexStyle, edgeStyle, faceStyle] -#! \input{Image_Butterfly_Faithful_Monomorphism_Hexagon.tex} -#! \end{tikzpicture} -#! -#! @ExampleSession -#! gap> six := SimplicialSurfaceByDownwardIncidence( -#! > [[1,2],[2,3],[3,4],[4,5],[5,6],[6,1],,[1,8],[2,8],[3,8],[4,8],[5,8],[6,8]], -#! > [[1,8,9],[2,9,10],[3,10,11],[4,11,12],[5,12,13],[6,13,8]]);; -#! gap> three := SimplicialSurfaceByDownwardIncidence( -#! > [[1,2],[2,3],[3,4],[5,4],[1,5],[2,5],[3,5]], [[1,5,6],[2,6,7],[3,7,4]]);; -#! gap> all_mor_3_to_6 := AllButterflyFaithfulMonomorphismsIntoSimplicialSurface( -#! > three, six);; -#! gap> Length(all_mor_3_to_6); -#! 12 -#! @EndExampleSession -#! -#! -# -DeclareOperation( "AllButterflyFaithfulMonomorphismsIntoSimplicialSurface", [IsSimplicialSurface, IsSimplicialSurface]); - #! @Section Images and pre-images #! @SectionLabel Morphisms_Images #! diff --git a/gap/Morphisms/morphisms.gi b/gap/Morphisms/morphisms.gi index e98c202f..b8726847 100644 --- a/gap/Morphisms/morphisms.gi +++ b/gap/Morphisms/morphisms.gi @@ -480,522 +480,6 @@ InstallMethod( InverseGeneralMapping, "for a polygonal morphism", end ); -InstallMethod(ButterflyFaithfulMonomorphismIntoSimplicialSurface, "for two simplicial surfaces", - [IsSimplicialSurface, IsSimplicialSurface], - function(surface1, surface2) - local PermuteList, AllBijections, AllOneFaceIsomorphisms, MyImage, MyPreImage, MyImageCat, - MyPreImages, MyPreImagesCat, MyUpdateMap, SurfaceIdentityMap, RemoveElement, MyLess, - VertexDegreesOfFace, MyIsInjective, MonomorphismIntoSimplicialSurface; - PermuteList := function(list, perm) - return List(list, x -> x^perm); - end; - - AllBijections := function(list1, list2) - local res, AllPermutations, i, bijection, g, tmp; - res := []; - if not (Length(list1) = Length(list2)) then - return []; - else - AllPermutations := []; - for g in SymmetricGroup(list2) do - Add(AllPermutations, PermuteList(list2, g)); - od; - for bijection in AllPermutations do - tmp := []; - for i in [1..Length(list1)] do - tmp[list1[i]] := bijection[i]; - od; - Add(res, tmp); - od; - # res := List(AllPermutations, x -> IndexInducedMap(list1, x)); - return res; - fi; - end; - - MyImage := function(map, x) - return map[x]; - end; - - MyImageCat := function(map, x_list) - local res, i; - res := []; - for i in x_list do - if IsBound(map[i]) then - Add(res, map[i]); - fi; - od; - return res; - end; - - MyPreImage := function(map, y) - local res, i; - res := []; - for i in [1..Length(map)] do - if IsBound(map[i]) and map[i] = y then - Add(res, i); - fi; - od; - return res; - end; - - MyPreImagesCat := function(map, y_list) - return Concatenation(List(y_list, y -> MyPreImage(map, y))); - end; - - MyPreImages := function(map) - return MyPreImagesCat(map, Compacted(map)); - end; - - AllOneFaceIsomorphisms := function(face1, surface1, face2, surface2) - local res, e, vertex_maps, vertex_map, mapped_e, i, edge, edge_map, face_map; - res := []; - vertex_maps := AllBijections(VerticesOfFace(surface1, face1), - VerticesOfFace(surface2, face2)); - # edge_map := []; - for vertex_map in vertex_maps do - edge_map := []; - e := List([1,2,3], i -> Set(VerticesOfEdge(surface1, EdgesOfFace(surface1, face1)[i]))); - mapped_e := List(e, e_i -> Set(List(e_i, v -> vertex_map[v]))); - # Error(); - for i in [1..3] do - for edge in EdgesOfFace(surface2, face2) do - # Error(); - if Set(VerticesOfEdge(surface2, edge)) = Set(mapped_e[i]) then - # Error(); - # mapped_e[i] := edge; - edge_map[EdgesOfFace(surface1, face1)[i]]:= edge; - break; - fi; - od; - od; - face_map := []; - face_map[face1] := face2; - Add(res, [vertex_map, edge_map, face_map]); - od; - return res; - end; - - MyUpdateMap := function(map, element, image_of_element) # is used to update maps with new images, also updates when used in if-clauses ! - if not IsBound(map[element]) then - map[element] := image_of_element; - return true; - elif map[element] = image_of_element then - return true; - else - return false; - fi; - end; - - SurfaceIdentityMap := function(surface) - return [[1..NumberOfVertices(surface)], [1..NumberOfEdges(surface)], [1..NumberOfFaces(surface)]]; - end; - - RemoveElement := function(list, element) - if not element in list then - return fail; - else - Remove(list, Position(list, element)); - fi; - end; - - MyLess := function(fdeg1, fdeg2) - return fdeg1 < fdeg2; - end; - - VertexDegreesOfFace := function(surface, face) - return Set(List(VerticesOfFace(surface, face), v -> DegreeOfVertex(surface, v))); - end; - - MyIsInjective := function(map) - return IsDuplicateFree(Compacted(map)); - end; - MonomorphismIntoSimplicialSurface := function(surface1, surface2) - local possible_vertex_maps, possible_monomorphisms, starting_face, image_starting_face, mapped_edges, mapped_faces, - remaining_faces, cur_edges, cur_edge, mapped_vertices, monomorphism, cur_face, face_map, edge_map, - vertex_map, i, new_face, new_image_face, is_correct_morphism, new_vertex, new_image_vertex, new_edges, new_image_edges, - cur_new_edge, cur_new_image_edge, finished_cur_edges, faces1, faces2, face_counter1, face_counter2, face_degrees1, face_degrees2, - min_degrees, min_pos, possible_image_faces; - - faces1 := Filtered(Faces(surface1), face -> ForAll(VerticesOfFace(surface1, face), v -> IsInnerVertex(surface1, v))); - faces2 := Filtered(Faces(surface2), face -> ForAll(VerticesOfFace(surface2, face), v -> IsInnerVertex(surface2, v))); - possible_image_faces := Faces(surface2); - if not faces1 = [] then # inner vertex degrees heuristic - face_counter1 := List(faces1, face -> Set(List(VerticesOfFace(surface1, face), v -> DegreeOfVertex(surface1, v)))); - face_counter2 := List(faces1, face -> Set(List(VerticesOfFace(surface2, face), v -> DegreeOfVertex(surface2, v)))); - # face_counter1 := ListCounter(CounterOfFaces(surface1)); - # face_counter2 := ListCounter(CounterOfFaces(surface2)); - # face_degrees1 := List(face_counter1, fdegs1 -> Set(fdegs1[1])); - # face_degrees2 := List(face_counter2, fdegs2 -> Set(fdegs2[1])); - if ForAny(face_counter2, fdegs2 -> not fdegs2 in face_counter1) then - # Error("heuristic"); - return fail; - else - min_pos := PositionMinimum(List(Collected(face_counter2), fdeg2 -> fdeg2[2])); - min_degrees := Collected(face_counter2)[min_pos][1]; - starting_face := Filtered(faces1, face -> min_degrees = Set(List(VerticesOfFace(surface1, face), v -> DegreeOfVertex(surface1, v))))[1]; - possible_image_faces := Filtered(faces2, face -> min_degrees = Set(List(VerticesOfFace(surface2, face), v -> DegreeOfVertex(surface2, v)))); - fi; - else - starting_face := Faces(surface1)[1]; - fi; - - for image_starting_face in possible_image_faces do - possible_monomorphisms := AllOneFaceIsomorphisms(starting_face, surface1, - image_starting_face, surface2); - for i in [1..Length(possible_monomorphisms)] do - is_correct_morphism := true; - monomorphism := possible_monomorphisms[i]; - vertex_map := monomorphism[1]; - edge_map := monomorphism[2]; - face_map := monomorphism[3]; - - cur_edges := Filtered(EdgesOfFace(surface1, starting_face), e -> IsInnerEdge(surface1, e)); - finished_cur_edges := []; - remaining_faces := Difference(Faces(surface1), [starting_face]); - mapped_faces := MyPreImages(face_map); - while not IsEmpty(remaining_faces) do - cur_edge := cur_edges[1]; - # Error("Mono"); - # update face_map - if Length(Difference(FacesOfEdge(surface2, edge_map[cur_edge]), face_map)) = 1 then - # Error("Mono"); - new_image_face := Difference(FacesOfEdge(surface2, edge_map[cur_edge]), face_map)[1]; - else # QUESTION not sure if this case is correct - # Error("Mono"); - is_correct_morphism := false; - break; - fi; - new_face := Difference(FacesOfEdge(surface1, cur_edge), mapped_faces)[1]; - - if not new_face in remaining_faces then - # Error("Mono"); - is_correct_morphism := false; - break; - fi; - - if MyUpdateMap(face_map, new_face, new_image_face) = false or MyIsInjective(face_map) = false then - # Error("Mono"); - is_correct_morphism := false; - break; - fi; - mapped_faces := MyPreImages(face_map); - - # update vertex_map - # new_vertex := Difference(VerticesOfFace(surface1, new_face), - # Intersection(List(FacesOfEdge(surface1, cur_edge), F -> VerticesOfFace(surface1, F))))[1]; # QUESTION requires vertex-faithful - new_vertex := Difference(VerticesOfFace(surface1, new_face), VerticesOfEdge(surface1, cur_edge))[1]; - # new_image_vertex := Difference(VerticesOfFace(surface2, new_image_face), - # Intersection(List(FacesOfEdge(surface2, edge_map[cur_edge]), F -> VerticesOfFace(surface2, F))))[1]; # QUESTION requires vertex-faithful - new_image_vertex := Difference(VerticesOfFace(surface2, new_image_face), VerticesOfEdge(surface2, edge_map[cur_edge]))[1]; - if MyUpdateMap(vertex_map, new_vertex, new_image_vertex) = false or MyIsInjective(vertex_map) = false then - # Error("Mono"); - is_correct_morphism := false; - break; - fi; - - # update edge_map - new_edges := Difference(EdgesOfFace(surface1, new_face), [cur_edge]); - new_image_edges := Difference(EdgesOfFace(surface2, new_image_face), [edge_map[cur_edge]]); - for cur_new_edge in new_edges do - for cur_new_image_edge in new_image_edges do - # Error("MonoEdge"); - if Set(MyImageCat(vertex_map, VerticesOfEdge(surface1, cur_new_edge))) = Set(VerticesOfEdge(surface2, cur_new_image_edge)) then # QUESTION requires vertex-faithful - if MyUpdateMap(edge_map, cur_new_edge, cur_new_image_edge) = false or MyIsInjective(edge_map) = false then - # Error("Mono"); - is_correct_morphism := false; - fi; - if cur_new_edge in cur_edges then - Add(finished_cur_edges, cur_new_edge); - fi; - # Error("MonoEdge"); - fi; - od; - od; - if is_correct_morphism = false then - break; - fi; - - # update cur_edges - cur_edges := Union(cur_edges, Filtered(EdgesOfFace(surface1, new_face), e -> IsInnerEdge(surface1, e))); - Add(finished_cur_edges, cur_edge); - cur_edges := Difference(cur_edges, finished_cur_edges); - - # update remaining_faces - remaining_faces := Difference(remaining_faces, [new_face]); - # Error("Mono"); - od; - - if is_correct_morphism = true then - # return monomorphism; # uncomment for the lists that make the homomorphism FLAG(LISTS) - return PolygonalMorphismByLists(surface1, surface2, monomorphism[1], monomorphism[2], monomorphism[3]); #FLAG(MORPHISMS) - fi; - od; - od; - return fail; - end; - return MonomorphismIntoSimplicialSurface(surface1, surface2); - end -); - -InstallMethod(AllButterflyFaithfulMonomorphismsIntoSimplicialSurface, "for two simplicial surfaces", - [IsSimplicialSurface, IsSimplicialSurface], - function(surface1, surface2) - local PermuteList, AllBijections, AllOneFaceIsomorphisms, MyImage, MyPreImage, MyImageCat, - MyPreImages, MyPreImagesCat, MyUpdateMap, SurfaceIdentityMap, RemoveElement, MyLess, - VertexDegreesOfFace, MyIsInjective, AllMonomorphismsIntoSimplicialSurface; - PermuteList := function(list, perm) - return List(list, x -> x^perm); - end; - - AllBijections := function(list1, list2) - local res, AllPermutations, i, bijection, g, tmp; - res := []; - if not (Length(list1) = Length(list2)) then - return []; - else - AllPermutations := []; - for g in SymmetricGroup(list2) do - Add(AllPermutations, PermuteList(list2, g)); - od; - for bijection in AllPermutations do - tmp := []; - for i in [1..Length(list1)] do - tmp[list1[i]] := bijection[i]; - od; - Add(res, tmp); - od; - # res := List(AllPermutations, x -> IndexInducedMap(list1, x)); - return res; - fi; - end; - - MyImage := function(map, x) - return map[x]; - end; - - MyImageCat := function(map, x_list) - local res, i; - res := []; - for i in x_list do - if IsBound(map[i]) then - Add(res, map[i]); - fi; - od; - return res; - end; - - MyPreImage := function(map, y) - local res, i; - res := []; - for i in [1..Length(map)] do - if IsBound(map[i]) and map[i] = y then - Add(res, i); - fi; - od; - return res; - end; - - MyPreImagesCat := function(map, y_list) - return Concatenation(List(y_list, y -> MyPreImage(map, y))); - end; - - MyPreImages := function(map) - return MyPreImagesCat(map, Compacted(map)); - end; - - AllOneFaceIsomorphisms := function(face1, surface1, face2, surface2) - local res, e, vertex_maps, vertex_map, mapped_e, i, edge, edge_map, face_map; - res := []; - vertex_maps := AllBijections(VerticesOfFace(surface1, face1), - VerticesOfFace(surface2, face2)); - # edge_map := []; - for vertex_map in vertex_maps do - edge_map := []; - e := List([1,2,3], i -> Set(VerticesOfEdge(surface1, EdgesOfFace(surface1, face1)[i]))); - mapped_e := List(e, e_i -> Set(List(e_i, v -> vertex_map[v]))); - # Error(); - for i in [1..3] do - for edge in EdgesOfFace(surface2, face2) do - # Error(); - if Set(VerticesOfEdge(surface2, edge)) = Set(mapped_e[i]) then - # Error(); - # mapped_e[i] := edge; - edge_map[EdgesOfFace(surface1, face1)[i]]:= edge; - break; - fi; - od; - od; - face_map := []; - face_map[face1] := face2; - Add(res, [vertex_map, edge_map, face_map]); - od; - return res; - end; - - MyUpdateMap := function(map, element, image_of_element) # is used to update maps with new images, also updates when used in if-clauses ! - if not IsBound(map[element]) then - map[element] := image_of_element; - return true; - elif map[element] = image_of_element then - return true; - else - return false; - fi; - end; - - SurfaceIdentityMap := function(surface) - return [[1..NumberOfVertices(surface)], [1..NumberOfEdges(surface)], [1..NumberOfFaces(surface)]]; - end; - - RemoveElement := function(list, element) - if not element in list then - return fail; - else - Remove(list, Position(list, element)); - fi; - end; - - MyLess := function(fdeg1, fdeg2) - return fdeg1 < fdeg2; - end; - - VertexDegreesOfFace := function(surface, face) - return Set(List(VerticesOfFace(surface, face), v -> DegreeOfVertex(surface, v))); - end; - - MyIsInjective := function(map) - return IsDuplicateFree(Compacted(map)); - end; - - AllMonomorphismsIntoSimplicialSurface := function(surface1, surface2) - local possible_vertex_maps, possible_monomorphisms, starting_face, image_starting_face, mapped_edges, mapped_faces, - remaining_faces, cur_edges, cur_edge, mapped_vertices, monomorphism, cur_face, face_map, edge_map, - vertex_map, i, new_face, new_image_face, is_correct_morphism, new_vertex, new_image_vertex, new_edges, new_image_edges, - cur_new_edge, cur_new_image_edge, finished_cur_edges, faces1, faces2, face_counter1, face_counter2, face_degrees1, face_degrees2, - min_degrees, min_pos, possible_image_faces, res; - - res := []; - faces1 := Filtered(Faces(surface1), face -> ForAll(VerticesOfFace(surface1, face), v -> IsInnerVertex(surface1, v))); - faces2 := Filtered(Faces(surface2), face -> ForAll(VerticesOfFace(surface2, face), v -> IsInnerVertex(surface2, v))); - possible_image_faces := Faces(surface2); - if not faces1 = [] then # inner vertex degrees heuristic - face_counter1 := List(faces1, face -> Set(List(VerticesOfFace(surface1, face), v -> DegreeOfVertex(surface1, v)))); - face_counter2 := List(faces1, face -> Set(List(VerticesOfFace(surface2, face), v -> DegreeOfVertex(surface2, v)))); - # face_counter1 := ListCounter(CounterOfFaces(surface1)); - # face_counter2 := ListCounter(CounterOfFaces(surface2)); - # face_degrees1 := List(face_counter1, fdegs1 -> Set(fdegs1[1])); - # face_degrees2 := List(face_counter2, fdegs2 -> Set(fdegs2[1])); - if ForAny(face_counter2, fdegs2 -> not fdegs2 in face_counter1) then - # Error("heuristic"); - return res; # empty list - else - min_pos := PositionMinimum(List(Collected(face_counter2), fdeg2 -> fdeg2[2])); - min_degrees := Collected(face_counter2)[min_pos][1]; - starting_face := Filtered(faces1, face -> min_degrees = Set(List(VerticesOfFace(surface1, face), v -> DegreeOfVertex(surface1, v))))[1]; - possible_image_faces := Filtered(faces2, face -> min_degrees = Set(List(VerticesOfFace(surface2, face), v -> DegreeOfVertex(surface2, v)))); - fi; - else - starting_face := Faces(surface1)[1]; - fi; - - for image_starting_face in possible_image_faces do - possible_monomorphisms := AllOneFaceIsomorphisms(starting_face, surface1, - image_starting_face, surface2); - for i in [1..Length(possible_monomorphisms)] do - is_correct_morphism := true; - monomorphism := possible_monomorphisms[i]; - vertex_map := monomorphism[1]; - edge_map := monomorphism[2]; - face_map := monomorphism[3]; - - cur_edges := Filtered(EdgesOfFace(surface1, starting_face), e -> IsInnerEdge(surface1, e)); - finished_cur_edges := []; - remaining_faces := Difference(Faces(surface1), [starting_face]); - mapped_faces := MyPreImages(face_map); - while not IsEmpty(remaining_faces) do - cur_edge := cur_edges[1]; - # Error("Mono"); - # update face_map - if Length(Difference(FacesOfEdge(surface2, edge_map[cur_edge]), face_map)) = 1 then - # Error("Mono"); - new_image_face := Difference(FacesOfEdge(surface2, edge_map[cur_edge]), face_map)[1]; - else # QUESTION not sure if this case is correct - # Error("Mono"); - is_correct_morphism := false; - break; - fi; - new_face := Difference(FacesOfEdge(surface1, cur_edge), mapped_faces)[1]; - - if not new_face in remaining_faces then - # Error("Mono"); - is_correct_morphism := false; - break; - fi; - - if MyUpdateMap(face_map, new_face, new_image_face) = false or MyIsInjective(face_map) = false then - # Error("Mono"); - is_correct_morphism := false; - break; - fi; - mapped_faces := MyPreImages(face_map); - - # update vertex_map - # new_vertex := Difference(VerticesOfFace(surface1, new_face), - # Intersection(List(FacesOfEdge(surface1, cur_edge), F -> VerticesOfFace(surface1, F))))[1]; # QUESTION requires vertex-faithful - new_vertex := Difference(VerticesOfFace(surface1, new_face), VerticesOfEdge(surface1, cur_edge))[1]; - # new_image_vertex := Difference(VerticesOfFace(surface2, new_image_face), - # Intersection(List(FacesOfEdge(surface2, edge_map[cur_edge]), F -> VerticesOfFace(surface2, F))))[1]; # QUESTION requires vertex-faithful - new_image_vertex := Difference(VerticesOfFace(surface2, new_image_face), VerticesOfEdge(surface2, edge_map[cur_edge]))[1]; - if MyUpdateMap(vertex_map, new_vertex, new_image_vertex) = false or MyIsInjective(vertex_map) = false then - # Error("Mono"); - is_correct_morphism := false; - break; - fi; - - # update edge_map - new_edges := Difference(EdgesOfFace(surface1, new_face), [cur_edge]); - new_image_edges := Difference(EdgesOfFace(surface2, new_image_face), [edge_map[cur_edge]]); - for cur_new_edge in new_edges do - for cur_new_image_edge in new_image_edges do - # Error("MonoEdge"); - if Set(MyImageCat(vertex_map, VerticesOfEdge(surface1, cur_new_edge))) = Set(VerticesOfEdge(surface2, cur_new_image_edge)) then # QUESTION requires vertex-faithful - if MyUpdateMap(edge_map, cur_new_edge, cur_new_image_edge) = false or MyIsInjective(edge_map) = false then - # Error("Mono"); - is_correct_morphism := false; - fi; - if cur_new_edge in cur_edges then - Add(finished_cur_edges, cur_new_edge); - fi; - # Error("MonoEdge"); - fi; - od; - od; - if is_correct_morphism = false then - break; - fi; - - # update cur_edges - cur_edges := Union(cur_edges, Filtered(EdgesOfFace(surface1, new_face), e -> IsInnerEdge(surface1, e))); - Add(finished_cur_edges, cur_edge); - cur_edges := Difference(cur_edges, finished_cur_edges); - - # update remaining_faces - remaining_faces := Difference(remaining_faces, [new_face]); - # Error("Mono"); - od; - - if is_correct_morphism = true then - # Add(res, monomorphism); # uncomment to add the list the monomorphism is made of FLAG(LISTS) - Add(res,PolygonalMorphismByLists(surface1, surface2, monomorphism[1], monomorphism[2], monomorphism[3])); # FLAG(MORPHISMS) - fi; - od; - od; - return res; - end; - return AllMonomorphismsIntoSimplicialSurface(surface1, surface2); - end -); - ## ## End of constructions ## From f9bf72cd000d7e594534b1e27884b5628c61004b Mon Sep 17 00:00:00 2001 From: Flynn Fehre Date: Mon, 11 Mar 2024 18:05:43 +0100 Subject: [PATCH 2/2] again deleting everything related to ButterflyFaithfulMonomorphismIntoSimplicialSurface --- ...utterfly_Faithful_Monomorphism_Hexagon.pdf | Bin 40202 -> 0 bytes ...utterfly_Faithful_Monomorphism_Hexagon.svg | 428 ------------------ 2 files changed, 428 deletions(-) delete mode 100644 doc/images/Image_Butterfly_Faithful_Monomorphism_Hexagon.pdf delete mode 100644 doc/images/Image_Butterfly_Faithful_Monomorphism_Hexagon.svg diff --git a/doc/images/Image_Butterfly_Faithful_Monomorphism_Hexagon.pdf b/doc/images/Image_Butterfly_Faithful_Monomorphism_Hexagon.pdf deleted file mode 100644 index b2d0a87dda591ffb4fe7cbb90cf604b6ee57f04b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40202 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 i{H-4;;a@*0%EiRl#RJ!)0C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -