[sage-support] How do I define a morphism/function/map of sets?
How do I define a function between finite sets within the category framework? Should the following work? sage: S = Set([1,2,3]) sage: T = Set([4,5,6,7]) sage: f = S.hom(lambda x: 3+x, T) sage: f Generic morphism: From: {1, 2, 3} To: {4, 5, 6, 7} sage: f(2) --- TypeError Traceback (most recent call last) TypeError: 2 fails to convert into the map's domain {1, 2, 3}, but a `pushforward` method is not properly implemented I see that it works if I define S and T using FiniteEnumeratedSet instead. Is that the best solution? Or suppose I want to define a map sending 1 to 5, 2 to 7, 3 to 5. I can't see how to use the dictionary {1:5, 2:7, 3:5} (for example) to define a function. In general, I would like fully functional, callable, composable morphisms of sets, and finite sets are good enough for now. Any advice? Also of other categories, in particular finite abelian groups, but maybe those work better already? -- John -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-support+unsubscr...@googlegroups.com. To post to this group, send email to sage-support@googlegroups.com. Visit this group at https://groups.google.com/group/sage-support. For more options, visit https://groups.google.com/d/optout.
Re: [sage-support] How do I define a morphism/function/map of sets?
It should... but Sage does not recognize that 2 belongs to S. Note that the following works sage: S = FiniteEnumeratedSet([1,2,3]) sage: T = FiniteEnumeratedSet([4,5,6,7]) sage: f = S.hom(lambda x: 3+x, T) sage: f(1) 4 Vincent On 18/04/16 15:02, John H Palmieri wrote: How do I define a function between finite sets within the category framework? Should the following work? sage: S = Set([1,2,3]) sage: T = Set([4,5,6,7]) sage: f = S.hom(lambda x: 3+x, T) sage: f Generic morphism: From: {1, 2, 3} To: {4, 5, 6, 7} sage: f(2) --- TypeError Traceback (most recent call last) TypeError: 2 fails to convert into the map's domain {1, 2, 3}, but a `pushforward` method is not properly implemented I see that it works if I define S and T using FiniteEnumeratedSet instead. Is that the best solution? Or suppose I want to define a map sending 1 to 5, 2 to 7, 3 to 5. I can't see how to use the dictionary {1:5, 2:7, 3:5} (for example) to define a function. In general, I would like fully functional, callable, composable morphisms of sets, and finite sets are good enough for now. Any advice? Also of other categories, in particular finite abelian groups, but maybe those work better already? -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-support+unsubscr...@googlegroups.com. To post to this group, send email to sage-support@googlegroups.com. Visit this group at https://groups.google.com/group/sage-support. For more options, visit https://groups.google.com/d/optout.
Re: [sage-support] How do I define a morphism/function/map of sets?
I read the end of your mail too late. The following works with lambda functions. sage: S = FiniteEnumeratedSet([1,2,3]) sage: T = FiniteEnumeratedSet([4,5,6,7]) sage: d = {1:5, 2:7, 3:5} sage: f = S.hom(lambda x: d[x], T) sage: f(1) 5 sage: f(2) 7 sage: f(3) 5 Otherwise you should have a look at FiniteSetMaps. On 18/04/16 19:48, Vincent Delecroix wrote: It should... but Sage does not recognize that 2 belongs to S. Note that the following works sage: S = FiniteEnumeratedSet([1,2,3]) sage: T = FiniteEnumeratedSet([4,5,6,7]) sage: f = S.hom(lambda x: 3+x, T) sage: f(1) 4 Vincent On 18/04/16 15:02, John H Palmieri wrote: How do I define a function between finite sets within the category framework? Should the following work? sage: S = Set([1,2,3]) sage: T = Set([4,5,6,7]) sage: f = S.hom(lambda x: 3+x, T) sage: f Generic morphism: From: {1, 2, 3} To: {4, 5, 6, 7} sage: f(2) --- TypeError Traceback (most recent call last) TypeError: 2 fails to convert into the map's domain {1, 2, 3}, but a `pushforward` method is not properly implemented I see that it works if I define S and T using FiniteEnumeratedSet instead. Is that the best solution? Or suppose I want to define a map sending 1 to 5, 2 to 7, 3 to 5. I can't see how to use the dictionary {1:5, 2:7, 3:5} (for example) to define a function. In general, I would like fully functional, callable, composable morphisms of sets, and finite sets are good enough for now. Any advice? Also of other categories, in particular finite abelian groups, but maybe those work better already? -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-support+unsubscr...@googlegroups.com. To post to this group, send email to sage-support@googlegroups.com. Visit this group at https://groups.google.com/group/sage-support. For more options, visit https://groups.google.com/d/optout.
Re: [sage-support] How do I define a morphism/function/map of sets?
Thanks, FiniteSetMaps might be what I want, but I'll keep both approaches in mind. John On Monday, April 18, 2016 at 3:51:27 PM UTC-7, vdelecroix wrote: > > I read the end of your mail too late. The following works with lambda > functions. > > sage: S = FiniteEnumeratedSet([1,2,3]) > sage: T = FiniteEnumeratedSet([4,5,6,7]) > sage: d = {1:5, 2:7, 3:5} > sage: f = S.hom(lambda x: d[x], T) > sage: f(1) > 5 > sage: f(2) > 7 > sage: f(3) > 5 > > Otherwise you should have a look at FiniteSetMaps. > > On 18/04/16 19:48, Vincent Delecroix wrote: > > It should... but Sage does not recognize that 2 belongs to S. Note that > > the following works > > > > sage: S = FiniteEnumeratedSet([1,2,3]) > > sage: T = FiniteEnumeratedSet([4,5,6,7]) > > sage: f = S.hom(lambda x: 3+x, T) > > sage: f(1) > > 4 > > > > Vincent > > > > On 18/04/16 15:02, John H Palmieri wrote: > >> How do I define a function between finite sets within the category > >> framework? Should the following work? > >> > >> sage: S = Set([1,2,3]) > >> sage: T = Set([4,5,6,7]) > >> sage: f = S.hom(lambda x: 3+x, T) > >> sage: f > >> Generic morphism: > >>From: {1, 2, 3} > >>To: {4, 5, 6, 7} > >> sage: f(2) > >> > >> > --- > >> > >> TypeError Traceback (most recent > >> call > >> last) > >> > >> TypeError: 2 fails to convert into the map's domain {1, 2, 3}, but > a > >> `pushforward` method is not properly implemented > >> > >> I see that it works if I define S and T using FiniteEnumeratedSet > >> instead. > >> Is that the best solution? > >> > >> Or suppose I want to define a map sending 1 to 5, 2 to 7, 3 to 5. I > can't > >> see how to use the dictionary {1:5, 2:7, 3:5} (for example) to define a > >> function. > >> > >> In general, I would like fully functional, callable, composable > morphisms > >> of sets, and finite sets are good enough for now. Any advice? Also of > >> other > >> categories, in particular finite abelian groups, but maybe those work > >> better already? > >> > -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-support+unsubscr...@googlegroups.com. To post to this group, send email to sage-support@googlegroups.com. Visit this group at https://groups.google.com/group/sage-support. For more options, visit https://groups.google.com/d/optout.