### Re: Re: \$a++ allowed by \$a-- is not ! why?

by kabel (Chaplain)
 on Sep 01, 2003 at 08:43 UTC ( #288099=note: print w/replies, xml ) Need Help??

in reply to Re: \$a++ allowed by \$a-- is not ! why?
in thread \$a++ allowed by \$a-- is not ! why?

(what the correct name for this? commutable?).
commutativity involves only one operation.
```\$a + \$b = \$b + \$a
and at least two operands which get "permuted". thus, it is pointless to ask for commutativity of an unary operation.

the problem is, ++ is not surjective.
or can you find a value for \$z so that ++ \$z is "Aa0"? no, you can't:
```kabel@linux:~> perl
my (\$z1, \$z2) = qw/ z9 Z9 /;
print ++ \$z1, ", ", ++ \$z2, \$/;
aa0, AA0
kabel@linux:~>
thus, ++ does not have any reverse mapping at all.
but if we only allow either lower case or upper case (not both mixed), the problem nearly disappears:
```++: /\A[A-Z]*[0-9]*\z/ -> /\A[A-Z]*[0-9]*\z/
++: /\A[a-z]*[0-9]*\z/ -> /\A[a-z]*[0-9]*\z/
a problem is that "0" has no preimage.
or can you find a value for \$z so that ++ \$z is "0"? no, you can't. ;D

HTH hehe, finally i was able to apply some knowledge of last years mathematics. hopefully, i am correct. :-)

Replies are listed 'Best First'.
Re: \$a++ allowed by \$a-- is not ! why?
by jonadab (Parson) on Sep 01, 2003 at 15:19 UTC

Modern algebra would say that although ++ is one-to-one, it is not onto. As such, it is not a permutation, since a permutation is defined as a one-to-one onto function from a set to itself.

-- OTOH (as it is currently defined) is theoretically a permutation over the set of all finite numbers, provided you run Perl on an architecture capable of storing and representing all numbers in that set. (In practice I am not aware of any such architecture, but nevermind.)

The logical conclusion is that if -- were made the inverse function of ++ it would no longer be one-to-one, because the inverse of a one-to-one function is onto and vice versa, but the inverse of a function that is not one-to-one is not onto and vice versa. Some people strongly prefer to avoid dealing with functions that are not one-to-one. Of course you could redefine the domain of -- so that it is one-to-one, but then you have a function on an apparently very arbitrary set (a set defined in terms of the range of ++ in fact), which could be considered "messy".

I don't know how much of this went into the decision, but I know that Larry knows some set theory, so it is entirely possible he considered this issue. It's also entirely possible that he just "felt" that applying the magic string extension to -- would be messy, without ennumerating all these points; sometimes people who design software for a living have a pretty good feel for which features would result in thorny issues. Sometimes they use the term "well-defined" to refer to a feature that can be implemented and meet most reasonable expectations. Applying the magic extension to -- would probably not be considered well-defined.

```\$;=sub{\$/};@;=map{my(\$a,\$b)=(\$_,\$;);\$;=sub{\$a.\$b->()}}
split//,".rekcah lreP rehtona tsuJ";\$\=\$ ;->();print\$/
sorry, i did not mean that permutation ;) it was just meant to be a visual description of the commutitativity law.

Modern algebra would say that although ++ is one-to-one, it is not onto.
why? it is a mapping from N to N (if i understand you correctly).
-- OTOH (as it is currently defined) is theoretically a permutation over the set of all finite numbers ...
the association is not clear to me. why do you think -- is a permutation? (what is a permutation for you?).

i think we make too much fuss about nothing. perhaps we should continue this by mail?
Modern algebra would say that although ++ is one-to-one, it is not onto.
why? it is a mapping from N to N (if i understand you correctly).

Given a function F from set S to set T, F is said to be one-to-one if F(s) is equal to a unique t in T for all s in S, and F is said to be onto if for all t in T there exists exactly one s in S such that F(s)=t. In our case both S and T are the same set, the set of all finite numbers and alphanumeric strings. (I believe (Inf)++ is also defined, but that can be considered a special case.)

++ as it is defined in Perl is one-to-one because each possible number or alphanumeric string has a unique successor, but it is not onto because it is not true that each number or alphanumeric string has a unique predecessor.

why do you think -- is a permutation?

Because, its domain and range are the same set (specifically, the set of all finite numbers; again, (Inf)-- is also defined but can be considered a special case, a polymorphism if you will) and it is both one-to-one and onto.

You can also consider ++ to be a permutation over the set of all finite numbers, if you consider the string magic to be a polymorphism, but ++ is definitely not a permutation over the set of alphanumeric strings, because it is not onto.

```\$;=sub{\$/};@;=map{my(\$a,\$b)=(\$_,\$;);\$;=sub{\$a.\$b->()}}
split//,".rekcah lreP rehtona tsuJ";\$\=\$ ;->();print\$/
Re: Re: Re: \$a++ allowed by \$a-- is not ! why?
by demerphq (Chancellor) on Sep 01, 2003 at 09:48 UTC

but if we only allow either lower case or upper case (not both mixed), the problem nearly disappears:

As long as you can mix numbers with letters the problem remains.

or can you find a value for \$z so that ++ \$z is "0"? no, you can't.

But thanks, some good links there. :-)

---
demerphq

<Elian> And I do take a kind of perverse pleasure in having an OO assembly language...
As long as you can mix numbers with letters the problem remains.
no, the signature does not allow to mix letters with numbers. if we allowed this, that means:
```++: /\A[a-z0-9]*\z/ -> /\A[a-z0-9]*\z/
, what is the difference between this addition and the addition in a 36-ary number system? (have fun with this link)
the only problem here is that the first character must not be a number, thus the awkward domains:
```kabel@linux:~> perl
my \$num = "1hiho";
print ++ \$num, \$/;
2
kabel@linux:~>
"-1" is an illegal input. harhar. ;-)

the signature does not allow to mix letters with numbers.

I think we are at cross purposes here. It does allow them to be mixed, you may have any set of letters followed by any set of numbers and ++ will "work". This means that you still have the problem we have been discussing as there is no mapping from 9 to 'a0' but there is a mapping from 'a0' to 9.

---
demerphq

<Elian> And I do take a kind of perverse pleasure in having an OO assembly language...

Create A New User
Node Status?
node history
Node Type: note [id://288099]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (7)
As of 2018-06-19 05:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
Should cpanminus be part of the standard Perl release?

Results (111 votes). Check out past polls.

Notices?