Anything that can be represented on a computer can be seen as a number, rather large numbers sometimes but still definitely numbers.
Anything that can be represented on a computer can be seen as a number, rather large numbers sometimes but still definitely numbers.
So, you give me a number, and I can give you infinitely many n-tuples that can be transformed into that number. Unless you know the mapping, and unless the mapping is injective, a single number is useless. It could represent infinitely many images.
So, I ask again, how can an image be a number?
You could choose to represent an image as image data + decoding scheme, using an agreed representation of the decoding scheme such as a computer program. Mathematically we get nowhere because we are simply moving the encoding scheme around, but in practice, since we possess concrete encoding schemes it means we can practically discuss the situation better.
This is a long-winded away of agreeing with you, BTW.
- I carry a large number y with me
- the police demands that I disclose y, and I do; they apply inverse mapping f^{-1} and obtain x = f^{-1}(y) which is a porn image
- then I show the police that applying inverse mapping g^{-1}, one obtains a totally legit image z = g^{-1}(y)
Of course, finding such a mapping g could be extremely difficult, but if the same number can be obtained from two different images, how would the police be able to accuse me of anything?
Finding small mappings is another matter.
eg:
big_number = 0;
while(!feof(file)) {
big_number = (big_number<<8) | file.readByte();
}Well sure :/ Of course there are.
At the simplest form you could swap things around, represent a fractional part of a number etc, at the more complex side you just have encryption.
But those are different things to your question "So, I ask again, how can an image be a number?"
>> "Lacking that, I merely say that an image can be represented by a number, but this is trivial"
I think you're arguing with yourself at this point.
For example, this --> A <-- looks like the letter A. But it isn't the letter A. It "is" only a representation, a bit-pattern with decimal notation 65, a glyph drawn from a font, a set of pixel elements on a graphics surface, a pattern of light on a display, a bunch of photons traveling through space, a group of excited photoreceptor cells, a set of signals traveling through neurons, etc. And it is none of these things, because none of them capture the essence of the pattern, repeated over human experiences.
So it seems to me that if you're trying to win an argument by drawing a distinction between "is" and "is represented by", you are not going to convince anyone who's put much thought into it. "Ceci n'est pas une pipe"; but a representation of a pipe is a (more or less faithful) representation of a pipe, whether you are blind or not, and so a number is a digital image, and vice versa.
I am not a mathematician, but to me this discussion reminds me of a vector having different coordinates, depending on what coordinate system we choose. Those are all different representations of the same thing. Likewise, a number can be represented in many different ways (binary, oct, hex, etc), but they all represent the same number. Is the vector its representation? If so, then the vector is many things, which is a funny definition of "to be". If the vector is itself, then it cannot be equal to any of its representations, it's something beyond its representation.
This is a programmers' forum, not a philosophers' forum. We should not be discussing the meaning of "is". That's too low-level and fundamental for our purposes. This does not imply it's not an interesting question, it's just not appropriate.
In fact, I'd go as far as saying that you could apply your argument to any data stored on a computer. But someone I don't think a judge would be impressed by "there re infinity many things the data in this file could represent and only under one mapping is it an indecent image".
Let's assume discrete, rectangular representations of images (width, height in pixels and colorspace of #000000-#FFFFFF). Here's an injective mapping from natural numbers (the indices of the vector of images) to actual images:
# In a C-like language where ** is
# the exponentiation operator, and
# ints are unbounded.
int colors = 0xFFFFFF + 1;
int i = 0;
vector images = new vector();
while(i++) {
for(int width = 1; width < i; width++) {
int height = i - width;
int area = width * height;
int pixels[area];
int combinations = colors ** area;
for(int c = 0; c < combinations; c++) {
for(int p = 0; p < area; p++) {
pixels[p] = c % (colors ** (p + 1));
}
images.append(new image(width, height, pixels));
}
}
}