[sage-support] How do I define a morphism/function/map of sets?

2016-04-18 Thread John H Palmieri
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?

2016-04-18 Thread Vincent Delecroix
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?

2016-04-18 Thread Vincent Delecroix
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?

2016-04-18 Thread John H Palmieri
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.