"Quasiforms", "Stable/Unstable Isotopes": Simpler Terminology?

It's no secret that I'm proud of the way the design for generalized isotopes is tearing through classic problems in Rebol.

At the same time, people's eyes can glaze over when you find yourself writing sentences like:

"All quasiforms become isotopic forms when evaluated, and when going the other way through a meta operation on an isotope, you'll get a quasiform back."

It all makes sense to me. But I don't want to overlook better terms, if they exist.

How Did "Isotopes" Come To Be Called That?

The term isotope originated from the "decaying" behavior, where a special form of null would run a THEN branch. But this special form would not be something you could store in a variable...it would become an ordinary null at that point. So getting stored in a variable would cause "decay".

>> null
; null

>> if true [null]
; null isotope

>> x: if true [null]
; null isotope

>> x
; null

The decay means variables captured from expressions would have a different behavior when substituted for the expressions. That was deemed to be an acceptable cost.

>> if true [print "then", null] else [print "else"]
then

>> temp: if true [print "then", null]
then

>> temp else [print "else"]
else

The parallel with decay of atomic isotopes seemed pretty clear, at least to me. Many places would see it as a normal null, but a few special sites could use a "sensor" to detect the difference. ELSE was an example of something that could detect.

As things moved forward, and when logic variables became ~true~ and ~false~ isotopes, it became clear these isotopic states would need to be able to stored in variables. That meant there were "unstable isotopes" and "stable isotopes"... e.g. WORD! isotopes were stable, ERROR! isotopes were not.

Having these stable isotopes actually strengthened the analogy. Because some atomic isotopes are stable, while others are not.

How Did "QUASI" Become Called That?

Originally, things like ~foo~ were called "bad words", designed to cause errors when accessed through a variable by default. They were like an old-school UNSET! where you could give it a custom label. But eventually everything was generalized so that everything had an isotopic form.

The fact that these forms stopped conveying an error condition meant considering them "bad" wasn't sensible. I kind of latched onto "quasi" in part because of the tilde's use in approximation, e.g. (3.0001 ~= 3).

(It also sounds a little like "queasy" and the squigglies look wavy and maybe a bit uncomfortable. :nauseated_face:)

So... Speak Now Or Hold Your Peace?

Bad naming can have an impact. I think calling complex numbers "imaginary" is a good example of a bad name that probably caused a few problems.

But I think the names here are good. It's just going to be a matter of figuring out how to teach people to not be afraid of them.

I only just noticed this post, and I’m glad that I did. Because, speaking as a physicist and chemist, the ‘isotope’ terminology has been really annoying me.

My main quibble is with calling the basic distinction ‘isotopic’ vs ‘non-isotopic’. In our world, an ‘isotope’ of an element is just an atom of that element with a specific number of neutrons. That is to say, every atom is an isotope of some element. Some of those isotopes happen to be stable, while others are unstable. (In fact, the vast majority of the atoms we encounter in daily life are stable isotopes. Unstable ones can be called ‘radioisotopes’, especially those which are highly radioactive.)

From this perspective, calling Ren-C values ‘isotopic’ vs ‘non-isotopic‘ is not just confusing but actually nonsensical. If a value is an isotope… what is it an isotope of, exactly? (Carbon? Hydrogen? Oxygen?) And if a value is not an isotope, then what could it possibly be? Some weird form of non-atomic matter?

If you really wanted to use this analogy, I feel it would be most sensible to say that each type has two isotopes. For instance, groups and splices would be different isotopes of GROUP!. And for that matter, you could expand the terminology by saying that quasi- and quoted forms are yet more isotopes of the same type. But, considering the way ‘isotope’ is currently used, I suspect this would just lead to immense confusion.

I don’t really know what would be better, though. Possibly something like ‘twiddled value’, making reference to the printed form with tildes? But I don’t love that option. You’ve once or twice described isotopic values as being at ‘quoting level -1’, so perhaps ‘antiquoted’ is suitable — although it’s more likely to be confusing. ‘Unblockable value’ would be descriptive, but clunky… though we could go slightly more poetic and call them ‘unseated’. But, along the same lines, another alternative might be ‘fragile value’, which strikes me as being the least worst out of all these options.

As for ‘quasiform’, I think that’s more or less fine as it is. Though I see no reason why they couldn’t just be called ‘quoted isotopes’ (or ‘quoted fragiles’, or whatever they might be).

1 Like

When the null state was the only thing that carried an "isotope" flag (and the only non-valued state), I tried some various ideas... printing out comments since there was nothing else to show.

In those days, the decaying form was thought of as the "heavy" form that decayed to the lighter form. I tried giving it a number or calling it heavy:

>> null
; null

>> if true [null]
; null-2

>> if true [null]
; null₂

>> if true [null]
; null (heavy)

HEAVY is actually around today, it makes a PACK with a void or null in it out of a plain one, but leaves other things alone.

>> heavy null
; first in pack of length 1
== ~null~  ; isotope

>> heavy 3
== 3

"antiquoted" isn't awful, and could use ANTI, something like:

>> anti null
== ~null~  ; antiquoted

But when you constrast "isotopic decay" and talking about "stable and unstable isotopes" with "antiquoted decay" and "stable and unstable antiquoteds", the isotope term comes out ahead in my book.

Then you end up with '~foo~ being a "quoted quoted isotope". The language of "quoted quasi(form)" works better.

I'll reiterate that I think it clarifies callsites when you use more narrow operations like QUASI and UNQUASI if possible vs. having QUOTE and UNQUOTE handle it, as a further shade of distinction from META and UNMETA. So while quasi-ing is related to quoting, it's something distinct, in particular because it only moves in one step for specific forms.

I see quoting as more like containership. e.g. '1 and '''1 and [1] and [[[1]]] are not isotopes, because the containership can nest arbitrarily (in theory, if not for the byte limit of quoting).

Quasiforms could more reasonably be argued as one of the "three isotopes of a value", where the plain and quasi "isotopes" can be put in containers, while the "anti isotope" cannot.

(perhaps call "plain" something like "common" form instead, as plain runs into some contention because it's also used in places to describe a "plain word" FOO vs. a "set word" FOO:, e.g. plain 'foo: is currently foo... calling this PLAIN vs. PLAINIFY is up in the air, and see also the MORPH proposal.)

That's one way of looking at it. Or you can also say quasi is just a weird container that can only hold common forms, so there are really two isotopes: plain and anti, and when we say "isotope of word" we are referring implicitly to the other isotope.

Though rendering-wise I leave the quasi marks on just to call attention:

>> ~null~
== ~null~  ; isotope

So we could say it's actually the quasi-container that comes in a regular and isotope form. But I've been calling this "an isotopic word" vs. "an isotopic quasi word", so that could be:

>> ~null~
== null  ; isotope

But so far, I think I like it how it is. It does take a stretch to consider one way or another that there are only two isotopic forms in play, so when you say "a word isotope" then it is understood what you mean is "the other isotope" or "the heavy isotope".

Going extreme with this, we could say:

>> isotopic 'null
== ~null~  ; isotope

>> isotopic isotopic 'null
== null

And then say ANTI goes only one way:

>> anti 'null
== ~null~  ; isotope

>> anti anti 'null
** Error: ANTI requires plain form to make anti isotope

But I think I like how it is now better, even if it doesn't precisely match use of the term in other largely unrelated fields.

It's just that little leap of seeing the word (other) or heavy or whatever, implicitly:

>> null
== ~null~  ; (other) isotope

Just a shorthand.

Starting at the end:

I do understand that I’m about a year too late to comment on this. The current terminology does suffice, so it’s unlikely to change further.

All the same, the chemist in me wants to scream when reading paragraphs like this. The term ‘isotope’ has no particular association at all with unstable or unusual forms. If I’m doing, say, a carbon NMR experiment, ‘the carbon isotope’ could only be carbon-13, a rare but completely stable isotope of carbon. If I switch to hydrogen NMR, ‘the hydrogen isotope’ would be hydrogen-1, which is not only stable but the most common atom in the universe. Except that I wouldn’t use either of those phrases in the first place, because we know that all atoms are isotopes of something, and therefore saying so adds nothing whatsoever to the sentence.

(If it were a more generic term I wouldn’t have nearly as many problems bending its meaning like you are. But ‘isotope’ seems almost exclusively restricted to physics/chemistry, so this usage feels wrong to me.)

This is fair. I was thinking of quoting this way because it’s stored the same way as isotopic and quasi forms (in the same byte), so on some level it seemed unified to me.

As for ‘anti isotope’, I think my earlier suggestion of ‘fragile’ is growing on me. A fragile value is one which can’t be placed in a block… it makes intuitive sense. (Although, like I said, I’m resigned to the fact that the existing terminology will stay as it is.)

Maybe I’m confused, but isn’t that just what it is? '~foo~ is what you get if you take an isotope and quote it twice, just like ''a is what you get if you take a word and quote it twice. I honestly don’t see the reason for giving ‘quasiforms’ their own special name.

Reiterating a previous point, making isotopes makes some potentially weird things. So there's value in not making those weird things too easily.

Consider:

>> x: multi-returner ...
== 10

>> x: meta multi-returner ...
== ~[10 20]~

>> x: quote multi-returner ...
== '10

You don't want to mix up quoting too casually with that transition point around the quasiform/isotope line. Although the quoting byte is used as the "cheap" implementation of the relatively powerful feature, it's good to keep the weirdness in check.

You could argue for calling them "meta isotopes", but then you might start confusing it with things like meta-word! (^foo vs ~foo~). I like there being an operator to add and pick off the tildes, and quasi/unquasi are nice for that.

1 Like

OK, I think this made it ‘click’ for me… I didn’t realise quote and meta would yield these different results in such a situation.

1 Like

Nothing's too late, there's tons of work left to do and all relevant "clients" are things I fix up on GitHub.

You've absorbed why I don't like mixing this up with quoting (despite being related). But if the term antiform is used, that's better than antiquoted.

"anti word" is shorter than "isotopic word". normal-word, quasi-word, anti-word ... could then perhaps be considered the three isotopes of WORD!.

  • "some antiforms are stable and can be held in variables, while others are unstable and will decay"

  • "antiforms don't have representations... they can't be stored in blocks, can't be quoted, and cannot be molded"

  • "all quasiforms become antiforms when evaluated, and when going the other way through a meta operation on an antiform, you get a quasiform back."

I like that it could still all be called "isotopes" and "isotopic theory" (and decisions guided by it said to have happened in the "isotopic era")

1 Like

A post was merged into an existing topic: How Console Displays Isotopes

I Think Antiform Works

Since @bradrn is happy, and I'm happy, then I will probably undertake the renaming effort at some convenient point when that's what I feel like doing.

I will also see what I can do to clean up the usages here on the forum in non-historical posts.

The History Of Anti

Something kind of interesting that I'd forgotten... is that I'd suggested "anti-quoting" as an original name for quasiforms when the ideas were first being proposed around August 2022 (not so long ago!):

But I think "anti" makes more sense for the "antimatter" that can't be put in containers.

4 Likes

A month into the "antiform" change, I wanted to report that it has gone over quite well, and now feels completely natural.

You can still use phrases like "...is an unstable isotope...", but it's just the case that all unstable isotopes are antiforms. So you don't need to say "...is an unstable antiform..." if you don't feel like it.

There's a little subtlety here in that you can say "packs are an isotope of block" or "packs are isotopes of block", but not "packs are the isotope of block".

You can only use THE when saying "packs are the antiform of block" or "packs are the antiform isotope of block".

And the term "isotopic" is now meaningless, outside of referring to something like "isotopic theory" or "the isotopic era of Ren-C".

Anyway... I'm not having any misgivings on this, it's been a good change. Thanks again @bradrn, for putting the pressure on using the "isotope" term correctly!

I'm slowly updating the language used in old posts when I'm already editing them for other reasons. (This makes those posts rise to the top as "recent", so I don't tend to do such terminology retcons all at once...)

2 Likes