back to list

The # operator

🔗Mike Battaglia <battaglia01@gmail.com>

3/24/2012 11:21:36 AM

Let # be an n-ary operator that takes either n vectors, n sets of
vectors, or a combination of both as input. Then #(S1, S2, ..., Sn,
v1, v2, ..., vn) returns the set of all Z-linear combinations of all
elements in S1 U S2 U ... U Sn U {v1, v2, ..., vn}, where Sk represent
sets of vectors, and vk represent individual vectors. For notational
convenience, when # takes two operands, then #(a, b) can be instead
written as a # b, and when # takes one operand, then #(a) can simply
be written as #a.

Since it immediately follows from the definition above that the
operation of # is associative in general, it's thus true that (A # B)
# C = A # (B # C) = #(A, B, C), so we can simply write A # B # C. In
general, we can simply write E1 # E2 # E3 # ... # En to signify #(E1,
E2, E3, ..., En). This is my preferred notational convention for
notating multidimensional lattices.

This gets more useful if we introduce an additional binary operator,
called +. + takes in either two sets of vectors, two vectors, or a
combination of both as input. If + is acting on two sets of vectors,
then + returns the set that's the Minkowski sum of those two sets. If
one or more of the operands of + is itself a vector and not a set,
then those operands can be replaced with the 1-element sets containing
those operands, and the preceding definition is then applied to those
sets. This allows us to represent lattice cosets. It may be better to
use a different symbol for this, such as a + in a circle or what have
you, but for ASCII reasons I'm going to just use + for now.

Here are some examples of things that can be represented using this notation.

The set of all vals supporting meantone temperament:
<7 11 16| # <12 19 28|, shortened to 7#12 or (7p#12p). Could also
be notated as 5#12 or 12#31, but NOT as 7#31, which generates the
vicentino mapping.

The set of all commas tempered out by meantone:
#(|-4 4 -1>) or #|-4 4 -1>, shortened to #(81/80)

The set of all commas tempered out by 12-EDO:
|-4 4 -1> # |-7 0 3>, shortened to 81/80 # 128/125

The set of all vals supporting the 12-EDO patent val:
#<12 19 28|, shortened to #12 or #12p

The set of all JI intervals that maps to the meantone fifth:
|-1 1 0> + #(|-4 4 -1>), shortened to 3/2 + #(81/80)

The set of all JI intervals that maps to 1 step in the 12-EDO patent val:
|4 -1 -1> + (|7 0 -3> # |-4 4 -1>)

The set of all vals that sends 81/80 to 0 steps:
<7 11 16| # <12 19 28|

The set of all vals that sends 81/80 to 1 step:
<0 0 -1| + (<7 11 16| # <12 19 28|) - Note that <15 24 35|
and <22 35 51| are points in this lattice coset

-Mike

🔗Mike Battaglia <battaglia01@gmail.com>

3/24/2012 11:47:37 AM

For now, I have no canonical form to put the above expressions in, so
there are many expressions that are equivalent to one another. Just as
7&12 is equivalent to 5&7, the lattices <7 11 16| & <12 19 28| and <5
8 12| # <7 11 16| are equivalent lattices. You can use the following
properties of this operator, (perhaps alternatively treated as axioms
of the operator), to find out which lattices are equivalent to which
other ones.

a#b = b#a (Commutativity)
a#(b#c) = (a#b)#c (Associativity)
a#a = #(a) (Idempotency)
#(-a) = #(a)
#(#(a)) = #(a)
#(a) + #(b) = a#b (Lattice addition, where + is Minkowski sum)
#(a, b, c, ...) = a#b#c#...

Additionally, if v is a vector or a 1-element vector set, then the
following is also true:
a#(a+v) = a#v (Shearing)

The following identities reveal a great many of expressions that use
this operator to be equivalent, or to result in equivalent lattices.

-Mike

On Sat, Mar 24, 2012 at 2:21 PM, Mike Battaglia <battaglia01@gmail.com> wrote:
> Let # be an n-ary operator that takes either n vectors, n sets of
> vectors, or a combination of both as input. Then #(S1, S2, ..., Sn,
> v1, v2, ..., vn) returns the set of all Z-linear combinations of all
> elements in S1 U S2 U ... U Sn U {v1, v2, ..., vn}, where Sk represent
> sets of vectors, and vk represent individual vectors. For notational
> convenience, when # takes two operands, then #(a, b) can be instead
> written as a # b, and when # takes one operand, then #(a) can simply
> be written as #a.

🔗Mike Battaglia <battaglia01@gmail.com>

3/24/2012 12:20:13 PM

We can also treat these identities as equivalence relations on
expressions using #, and treat them to be useful in understanding
temperaments.

Define a "temperament mapping" to be the thing that Graham just calls
a "mapping" on his website, and a "temperament" to be a temperament
mapping that isn't contorted. Define a "supercontorted" temperament
mapping as one whose mapping matrix isn't of full rank, and a
"well-formed" temperament mapping as one whose mapping matrix is of
full rank.

Then every lattice in the module of vals can be uniquely identified
with a well-formed temperament mapping, in the sense that every such
lattice can be identified with a unique matrix of full rank in Hermite
form for which the lattice is the set of all Z-linear combinations of
its rows. Additionally, every saturated lattice in this module can be
uniquely identified with an actual temperament, in the sense that
every such lattice can be identified with a unique matrix of full rank
in rref form, for which the lattice lies in its row space.

Call T the set of all saturated lattices in the module of vals. Call
this module V, and call V* the dual module. Every lattice in T can be
said to have a corresponding dual lattice T* which exists in V*. This
lattice has the property that the bracket product of <t|t*> = 0 for
any points t and t* lying in the T and T* lattices respectively.
Therefore, T** = T, and we can say that saturated lattices in the
module of monzos additionally correspond to temperaments.

If T is the set of all unique saturated lattices, then the set {T, #}
forms a monoid, where # functions as a "join" operator. Additionally,
if M is the set of all unique lattices in general, then the set {M, #}
also forms a monoid, although lattices in M don't have the same nice
dual properties as lattices in T. That these are monoids instead of
groups signifies that every temperament does not have an "inverse," or
that in general "negative temperaments" don't exist.

Numerous useful extensions of this monoid structure exist. For
instance, if set intersection is defined as a "meet" operator, which
we'll for now notate as !, then it also forms a Boolean algebra where
the null element is the lattice consisting of only the zero vector,
the element "1" is the lattice corresponding to JI, and the complement
operator ~ is defined on a lattice t as returning the set of all
points that are in the JI lattice and not in t.

Thus, if t and u are elements of T, with t* and u* their duals, then
it's true that the lattice (t # u) is dual to the lattice (t* ! u*),
where int is set intersection, and likewise that (t* # u*) is dual to
t ! u.

Another useful extension may come by studying Gene's operation of
adding wedgies together to obtain new wedgies. I'm not yet quite sure
how this relates to lattices, but if it's possible to define an
analogous operation "op" on elements of T, then the set {T, #, op}
will perhaps form a semiring, with # as the multiplicative operation
and "op" as the additive operation.

-Mike

PS: many thanks to Graham, Keenan, Ryan, Gene for the offlist
discussions on this so far, although sometimes I went in different
directions than we'd talked about.

On Sat, Mar 24, 2012 at 2:47 PM, Mike Battaglia <battaglia01@gmail.com> wrote:
>
> The following identities reveal a great many of expressions that use
> this operator to be equivalent, or to result in equivalent lattices.

🔗Ryan Avella <domeofatonement@yahoo.com>

3/24/2012 12:27:38 PM

--- In tuning-math@yahoogroups.com, Mike Battaglia <battaglia01@...> wrote:
>
> a#b = b#a (Commutativity)
> a#(b#c) = (a#b)#c (Associativity)
> a#a = #(a) (Idempotency)
> #(-a) = #(a)
> #(#(a)) = #(a)
> #(a) + #(b) = a#b (Lattice addition, where + is Minkowski sum)
> #(a, b, c, ...) = a#b#c#...

Shouldn't the fifth one also be called "Idempotency?"

Also I have a question. Yesterday I saw you using this operator to find the simplest common supertemperament between two rank-2 temperaments. Can you explain how that is done, and possibly give an example? (like meantone and porcupine, or something like that)

Ryan

🔗Mike Battaglia <battaglia01@gmail.com>

3/24/2012 12:50:12 PM

On Sat, Mar 24, 2012 at 3:27 PM, Ryan Avella <domeofatonement@yahoo.com>
wrote:
>
> --- In tuning-math@yahoogroups.com, Mike Battaglia <battaglia01@...>
> wrote:
> >
> > a#b = b#a (Commutativity)
> > a#(b#c) = (a#b)#c (Associativity)
> > a#a = #(a) (Idempotency)
> > #(-a) = #(a)
> > #(#(a)) = #(a)
> > #(a) + #(b) = a#b (Lattice addition, where + is Minkowski sum)
> > #(a, b, c, ...) = a#b#c#...
>
> Shouldn't the fifth one also be called "Idempotency?"

I don't know; I'm not sure if the term "idempotency" is defined for
unary operators.

> Also I have a question. Yesterday I saw you using this operator to find
> the simplest common supertemperament between two rank-2 temperaments. Can
> you explain how that is done, and possibly give an example? (like meantone
> and porcupine, or something like that)

What's the supertemperament? The simplest thing that tempers down to
both? Also, is this in the 5-limit?

-Mike

🔗Mike Battaglia <battaglia01@gmail.com>

3/24/2012 2:02:38 PM

On Sat, Mar 24, 2012 at 3:50 PM, Mike Battaglia <battaglia01@gmail.com> wrote:
>
> What's the supertemperament? The simplest thing that tempers down to
> both? Also, is this in the 5-limit?

I talked to Ryan offlist; he wants to find the simplest 7-limit
supertemperament that tempers down to both.

In the 7-limit, meantone is 7p#12p, and porcupine is 15p#22p. The
supertemperament that tempers down to both is going to be
7p#12p#15p#22p. However, this can be rewritten as 7p#12p#15p#(15p+7p).
By the shearing axiom we get 7p#12p#15p#7p, and then by idempotency we
get 7p#12p#15p, which is starling temperament.

Another way to think of this is to use the identity I spelled out
above for duals, which is namely that (7p#12p) # (15p#22p) is dual to
(7p#12p)* ! (15p#22p)*, where * denotes dual and ! denotes
intersection. Dual to 7p#12p is (81/80)#(126/125), and dual to 15p#22p
is (250/243)#(64/63). The intersection of these two lattices is
#126/125, which is also the dual lattice to 7p#12p#15p.

I note that the term "dual lattice" has a ton of different meanings,
so perhaps it might be better to call it the "null lattice" from now
on.

-Mike

🔗genewardsmith <genewardsmith@sbcglobal.net>

3/24/2012 3:26:46 PM

--- In tuning-math@yahoogroups.com, Mike Battaglia <battaglia01@...> wrote:
>
> On Sat, Mar 24, 2012 at 3:50 PM, Mike Battaglia <battaglia01@...> wrote:
> >
> > What's the supertemperament? The simplest thing that tempers down to
> > both? Also, is this in the 5-limit?
>
> I talked to Ryan offlist; he wants to find the simplest 7-limit
> supertemperament that tempers down to both.
>
> In the 7-limit, meantone is 7p#12p, and porcupine is 15p#22p.

7&12 is dominant, not meantone. You can put it together with porcupine to get 64/63. If you use meantone instead, you get 7-limit JI.

🔗Mike Battaglia <battaglia01@gmail.com>

3/24/2012 3:35:00 PM

On Sat, Mar 24, 2012 at 6:26 PM, genewardsmith <genewardsmith@sbcglobal.net>
wrote:
>
>
> 7&12 is dominant, not meantone. You can put it together with porcupine to
> get 64/63. If you use meantone instead, you get 7-limit JI.

Auugh, you're right. I screwed up in Graham's temperament finder here:

http://x31eq.com/cgi-bin/rt.cgi?ets=12_7&limit=7

Just putting in 12&7 puts "meantone" at the top, and then "dominant"
is hidden down below, with no immediate indication of which is the
patent val. (Feature request for Graham: is there any easy way to make
it say things like "Dominant (7d&12p)" or something?)

So you're correct. Meantone is <7 11 16 19| # <12 19 28 34|, which
should make sense because 7/4 in septimal meantone is a type of sixth.
Porcupine is <15 24 35 42| # <22 35 51 62|. If you put them together,
you get <7 11 16 19| # <12 19 28 34| # <15 24 35 42| # <22 35 51 62|.

The last term can be turned into <15 24 35 42| + <7 11 16 20|, so the
whole thing thus reduces to <7 11 16 19| # <12 19 28 34| # <15 24 35
42| # <7 11 16 20|. The <7 ... | vals no longer cancel, because the
coefficient on the end is the same. The whole thing ends up reducing
to <1 0 0 0| # <0 1 0 0| # <0 0 1 0| # <0 0 0 1|.

The rest of what I wrote was correct though.

-Mike

🔗Mike Battaglia <battaglia01@gmail.com>

3/24/2012 3:41:17 PM

I note the same problem happened with what I called Starling in the
temperament finder. I put this in here

http://x31eq.com/cgi-bin/rt.cgi?ets=7_12_15&limit=7

And although on top it says Starling, it's actually 7d & 12p & 15p up
there, not 7p & 12p & 15p. The actual thing I wanted was stealthily
hidden below, without a name, and it was actually the 64/63 planar
temperament, which all makes a lot more sense.

Yeah... I'll reiterate again that feature request, if it's not too hard :)

-Mike

On Sat, Mar 24, 2012 at 6:35 PM, Mike Battaglia <battaglia01@gmail.com> wrote:
> On Sat, Mar 24, 2012 at 6:26 PM, genewardsmith <genewardsmith@sbcglobal.net>
> wrote:
>>
>>
>> 7&12 is dominant, not meantone. You can put it together with porcupine to
>> get 64/63. If you use meantone instead, you get 7-limit JI.
>
> Auugh, you're right. I screwed up in Graham's temperament finder here:
>
> http://x31eq.com/cgi-bin/rt.cgi?ets=12_7&limit=7
>
> Just putting in 12&7 puts "meantone" at the top, and then "dominant"
> is hidden down below, with no immediate indication of which is the
> patent val. (Feature request for Graham: is there any easy way to make
> it say things like "Dominant (7d&12p)" or something?)
>
> So you're correct. Meantone is <7 11 16 19| # <12 19 28 34|, which
> should make sense because 7/4 in septimal meantone is a type of sixth.
> Porcupine is <15 24 35 42| # <22 35 51 62|. If you put them together,
> you get <7 11 16 19| # <12 19 28 34| # <15 24 35 42| # <22 35 51 62|.
>
> The last term can be turned into <15 24 35 42| + <7 11 16 20|, so the
> whole thing thus reduces to <7 11 16 19| # <12 19 28 34| # <15 24 35
> 42| # <7 11 16 20|. The <7 ... | vals no longer cancel, because the
> coefficient on the end is the same. The whole thing ends up reducing
> to <1 0 0 0| # <0 1 0 0| # <0 0 1 0| # <0 0 0 1|.
>
> The rest of what I wrote was correct though.
>
> -Mike

🔗Ryan Avella <domeofatonement@yahoo.com>

3/24/2012 4:59:23 PM

--- In tuning-math@yahoogroups.com, Mike Battaglia <battaglia01@...> wrote:
> Just putting in 12&7 puts "meantone" at the top, and then "dominant"
> is hidden down below, with no immediate indication of which is the
> patent val. (Feature request for Graham: is there any easy way to make
> it say things like "Dominant (7d&12p)" or something?)

Yes, I agree. Graham?

Ryan

🔗Graham Breed <gbreed@gmail.com>

3/25/2012 1:31:56 AM

Mike Battaglia <battaglia01@gmail.com> wrote:
> I note the same problem happened with what I called
> Starling in the temperament finder. I put this in here
>
> http://x31eq.com/cgi-bin/rt.cgi?ets=7_12_15&limit=7
>
> And although on top it says Starling, it's actually 7d &
> 12p & 15p up there, not 7p & 12p & 15p. The actual thing
> I wanted was stealthily hidden below, without a name, and
> it was actually the 64/63 planar temperament, which all
> makes a lot more sense.
>
> Yeah... I'll reiterate again that feature request, if
> it's not too hard :)

https://bitbucket.org/x31eq/regular/changeset/f8a59b337c67#chg-regular_html.py

Graham

🔗Mike Battaglia <battaglia01@gmail.com>

3/25/2012 8:08:03 AM

Yes! Thanks for that.

-Mike

On Sun, Mar 25, 2012 at 4:31 AM, Graham Breed <gbreed@gmail.com> wrote:
>
> Mike Battaglia <battaglia01@gmail.com> wrote:
> > I note the same problem happened with what I called
> > Starling in the temperament finder. I put this in here
> >
> > http://x31eq.com/cgi-bin/rt.cgi?ets=7_12_15&limit=7
> >
> > And although on top it says Starling, it's actually 7d &
> > 12p & 15p up there, not 7p & 12p & 15p. The actual thing
> > I wanted was stealthily hidden below, without a name, and
> > it was actually the 64/63 planar temperament, which all
> > makes a lot more sense.
> >
> > Yeah... I'll reiterate again that feature request, if
> > it's not too hard :)
>
> https://bitbucket.org/x31eq/regular/changeset/f8a59b337c67#chg-regular_html.py
>
> Graham