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[AZ]*[09]*\z/ > /\A[AZ]*[09]*\z/
++: /\A[az]*[09]*\z/ > /\A[az]*[09]*\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. :)
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.
What about 1?
But thanks, some good links there. :)

demerphq
_{<Elian> And I do take a kind of perverse pleasure in having an OO assembly language...
}
 [reply] [d/l] 

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[az09]*\z/ > /\A[az09]*\z/
, what is the difference between this addition and the addition in a 36ary 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:~>
What about "1"?
"1" is an illegal input. harhar. ;)  [reply] [d/l] [select] 

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...
}
 [reply] [d/l] 
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 onetoone,
it is not onto. As such, it is not a permutation, since
a permutation is defined as a onetoone 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 onetoone,
because the inverse of a onetoone function is onto
and vice versa, but the inverse of a function that is
not onetoone is not onto and vice versa. Some people
strongly prefer to avoid dealing with functions that
are not onetoone. Of course you could redefine the
domain of  so that it is onetoone, 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 "welldefined" to refer
to a feature that can be implemented and meet most
reasonable expectations. Applying the magic extension
to  would probably not be considered welldefined.
$;=sub{$/};@;=map{my($a,$b)=($_,$;);$;=sub{$a.$b>()}}
split//,".rekcah lreP rehtona tsuJ";$\=$ ;>();print$/
 [reply] [d/l] 

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 onetoone, 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?
 [reply] 

Modern algebra would say that although ++ is onetoone, 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 onetoone 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 onetoone 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
onetoone 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$/
 [reply] [d/l] 





