text:
# What are the possible integral zeros of P(z)=z^4+5z^3+2z^2+7z-15?

Jun 25, 2017

The possible integer roots that should be tried are $\setminus \pm 1 , \setminus \pm 3 , \setminus \pm 5 , \setminus \pm 15$.

#### Explanation:

Let us imagine that some other integer could be a root. We pick $2$. This is wrong. We are about to see why.

The polynomial is

${z}^{4} + 5 {z}^{3} + 2 {z}^{2} + 7 z - 15$.

If $z = 2$ then all the terms are even because they are multiples of $z$, but then the last term has to be even to make the whole sum equal to zero ... and $- 15$ isn't even. So $z = 2$ fails because the divisibility does not work out.

To get the divisibility to work out right an integer root for $z$ has to be something that divides evenly into the constant term, which here is $- 15$. Remembering that integers can be positive, negative or zero the candidates are $\setminus \pm 1 , \setminus \pm 3 , \setminus \pm 5 , \setminus \pm 15$.


text: In dimension 3, consider a projective space and a smooth quadric threefold. These two have the same Hodge numbers, same $c_3 = 4$ (Euler number), same $c_1 c_2 = 24$ (by Todd's theorem), but distinct degrees $c_1^3$: for the projective space it equals $64$ and for quadric it is $54$.

format: plain


text:
# Wednesday, November 9, 2011 More sets theory - ordinals and cardinals

## 1Finite sets¶

Informally, a hereditarily finite set is one that is finite,

• all its elements are finite
• all the elements of its elements are finite
• etc...

Using the axioms we listed in the last lecture, we can prove the existence of any such set.

### 1.1Ordered pairs¶

$(a,b)$: The ordered pair with first entry $a$ and second entry $b = \{ \{a\}, \{a,b\} \}$

Note: $(a,b) = (c,d) \iff a = c \land b = d$

$A \times B = \{(a,b): a \in A \land b \in B\}$ if it exists. If we assume the power set axiom then we can prove $A \times B$ exists for any $A,B$

### 1.2Power set axiom¶

$\forall x \exists y (\forall z ( z \subseteq x \to z \in y))$

Using comprehension we can show the existence of $\mathcal{P}(A)$ for any $A = \{B : B \subseteq A\}$subseteq here not proper subset right?

Suppose we have $A, B$. Where missing word? is $\{a\}$ (for $a \in A$) $\in \mathcal{P}(A) \subseteq \mathcal{P}(A \cup B)$

$\{a,b\} \in \mathcal{P}(A \cup B)$

$(a,b) \in \{\{a\}, \{a,b\}\} \subseteq \mathcal{P}(A \cup B)$

So $(a,b) \in \mathcal{P}(\mathcal{P}(A \cup B))$

By comprehension, we can "cut" down $\mathcal{P}(\mathcal{P}(A \cup B))$ to $A \times B$

Once a set exists that is "big enough" you can cut it down using a comprehension.

### 1.3Properties of sets¶

We can now define relations functions, equivalence relations, (strict) partial orders?

Transitivity: A set is called transitive if whenever $x \in X \land y \in X$ then $y \in X$ (ie if $x \in X, x \subseteq X$)

So $\{0,1,2\}$ is transitive but say $\{0,2\}$ is not.

A well order' of a set $A$ is a relation $R$ on $A$ which is

1. a total order of $A$
2. if $B \subseteq A, b \neq \varnothing$ then $B$ has an $R$-least element

ie: there is $b \in B$ such that there is no $c \in B, c \neq b$ such that $cRb$

#### 1.3.1Ordinals¶

A set $A$ is an ordinal if $A$ is transitive and $\in A$missing something? strictly well-orders it

That is:

1. (irreflexive) $a \not \in a$ for any $a \in A$
2. (antisymmetric) $a \in b \land b \in a$ never happens for $a,b \in A$
3. (transitive) If $a,b,c \in A, a \in b \land b \in c$ then $a \in c$
4. (total) For any $a,b \in A$ either $a \in b \lor b \in a \lor b = a$
5. For any nonempty $B \subseteq A$ there is $b \in B$ such that for no $c \in B$ do we have $c \in b$

Note: if we assume the axiom of regularity (also known as the axiom of foundation**) then every set satisfies properties 1, 2 and 5.

Given a set $A, SA = A \cup \{A\}$ (where S is the successor symbol just like in Peano arithmetic).

Fact: If $A$ is an ordinal then so is $SA$.

#### 1.3.2Cardinals¶

An ordinal $\alpha$ is called a cardinal if there are no $\beta \in \alpha$ and bijection $f: \alpha \to \beta$what?

Fact: Any element of any ordinal is an ordinal. Proof in next lecture!


text:
# 14 Functions

Writing functions is a core activity of an R programmer. It represents the key step of the transition from a mere “user” to a developer who creates new functionality for R. Functions are often used to encapsulate a sequence of expressions that need to be executed numerous times, perhaps under slightly different conditions. Functions are also often written when code must be shared with others or the public.

The writing of a function allows a developer to create an interface to the code, that is explicitly specified with a set of parameters. This interface provides an abstraction of the code to potential users. This abstraction simplifies the users’ lives because it relieves them from having to know every detail of how the code operates. In addition, the creation of an interface allows the developer to communicate to the user the aspects of the code that are important or are most relevant.

## 14.1 Functions in R

Functions in R are “first class objects”, which means that they can be treated much like any other R object. Importantly,

• Functions can be passed as arguments to other functions. This is very handy for the various apply functions, like lapply() and sapply().

• Functions can be nested, so that you can define a function inside of another function

If you’re familiar with common language like C, these features might appear a bit strange. However, they are really important in R and can be useful for data analysis.

Functions are defined using the function() directive and are stored as R objects just like anything else. In particular, they are R objects of class “function”.

Here’s a simple function that takes no arguments and does nothing.

> f <- function() {
+         ## This is an empty function
+ }
> ## Functions have their own class
> class(f)
[1] "function"
> ## Execute this function
> f()
NULL

Not very interesting, but it’s a start. The next thing we can do is create a function that actually has a non-trivial function body.

> f <- function() {
+         cat("Hello, world!\n")
+ }
> f()
Hello, world!

The last aspect of a basic function is the function arguments. These are the options that you can specify to the user that the user may explicity set. For this basic function, we can add an argument that determines how many times “Hello, world!” is printed to the console.

> f <- function(num) {
+         for(i in seq_len(num)) {
+                 cat("Hello, world!\n")
+         }
+ }
> f(3)
Hello, world!
Hello, world!
Hello, world!

Obviously, we could have just cut-and-pasted the cat("Hello, world!\n") code three times to achieve the same effect, but then we wouldn’t be programming, would we? Also, it would be un-neighborly of you to give your code to someone else and force them to cut-and-paste the code however many times the need to see “Hello, world!”.

In general, if you find yourself doing a lot of cutting and pasting, that’s usually a good sign that you might need to write a function.

Finally, the function above doesn’t return anything. It just prints “Hello, world!” to the console num number of times and then exits. But often it is useful if a function returns something that perhaps can be fed into another section of code.

This next function returns the total number of characters printed to the console.

> f <- function(num) {
+         hello <- "Hello, world!\n"
+         for(i in seq_len(num)) {
+                 cat(hello)
+         }
+         chars <- nchar(hello) * num
+         chars
+ }
> meaningoflife <- f(3)
Hello, world!
Hello, world!
Hello, world!
> print(meaningoflife)
[1] 42

In the above function, we didn’t have to indicate anything special in order for the function to return the number of characters. In R, the return value of a function is always the very last expression that is evaluated. Because the chars variable is the last expression that is evaluated in this function, that becomes the return value of the function.

Note that there is a return() function that can be used to return an explicity value from a function, but it is rarely used in R (we will discuss it a bit later in this chapter).

Finally, in the above function, the user must specify the value of the argument num. If it is not specified by the user, R will throw an error.

> f()
Error in f(): argument "num" is missing, with no default

We can modify this behavior by setting a default value for the argument num. Any function argument can have a default value, if you wish to specify it. Sometimes, argument values are rarely modified (except in special cases) and it makes sense to set a default value for that argument. This relieves the user from having to specify the value of that argument every single time the function is called.

Here, for example, we could set the default value for num to be 1, so that if the function is called without the num argument being explicitly specified, then it will print “Hello, world!” to the console once.

> f <- function(num = 1) {
+         hello <- "Hello, world!\n"
+         for(i in seq_len(num)) {
+                 cat(hello)
+         }
+         chars <- nchar(hello) * num
+         chars
+ }
> f()    ## Use default value for 'num'
Hello, world!
[1] 14
> f(2)   ## Use user-specified value
Hello, world!
Hello, world!
[1] 28

Remember that the function still returns the number of characters printed to the console.

At this point, we have written a function that

• has one formal argument named num with a default value of 1. The formal arguments are the arguments included in the function definition. The formals() function returns a list of all the formal arguments of a function

• prints the message “Hello, world!” to the console a number of times indicated by the argument num

• returns the number of characters printed to the console

Functions have named arguments which can optionally have default values. Because all function arguments have names, they can be specified using their name.

> f(num = 2)
Hello, world!
Hello, world!
[1] 28

Specifying an argument by its name is sometimes useful if a function has many arguments and it may not always be clear which argument is being specified. Here, our function only has one argument so there’s no confusion.

## 14.3 Argument Matching

Calling an R function with arguments can be done in a variety of ways. This may be confusing at first, but it’s really handing when doing interactive work at the command line. R functions arguments can be matched positionally or by name. Positional matching just means that R assigns the first value to the first argument, the second value to second argument, etc. So in the following call to rnorm()

> str(rnorm)
function (n, mean = 0, sd = 1)
> mydata <- rnorm(100, 2, 1)              ## Generate some data

100 is assigned to the n argument, 2 is assigned to the mean argument, and 1 is assigned to the sd argument, all by positional matching.

The following calls to the sd() function (which computes the empirical standard deviation of a vector of numbers) are all equivalent. Note that sd() has two arguments: x indicates the vector of numbers and na.rm is a logical indicating whether missing values should be removed or not.

> ## Positional match first argument, default for 'na.rm'
> sd(mydata)
[1] 0.8843395
> ## Specify 'x' argument by name, default for 'na.rm'
> sd(x = mydata)
[1] 0.8843395
> ## Specify both arguments by name
> sd(x = mydata, na.rm = FALSE)
[1] 0.8843395

When specifying the function arguments by name, it doesn’t matter in what order you specify them. In the example below, we specify the na.rm argument first, followed by x, even though x is the first argument defined in the function definition.

> ## Specify both arguments by name
> sd(na.rm = FALSE, x = mydata)
[1] 0.8843395

You can mix positional matching with matching by name. When an argument is matched by name, it is “taken out” of the argument list and the remaining unnamed arguments are matched in the order that they are listed in the function definition.

> sd(na.rm = FALSE, mydata)
[1] 0.8843395

Here, the mydata object is assigned to the x argument, because it’s the only argument not yet specified.

Below is the argument list for the lm() function, which fits linear models to a dataset.

> args(lm)
function (formula, data, subset, weights, na.action, method = "qr",
model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE,
contrasts = NULL, offset, ...)
NULL

The following two calls are equivalent.

lm(data = mydata, y ~ x, model = FALSE, 1:100)
lm(y ~ x, mydata, 1:100, model = FALSE)

Even though it’s legal, I don’t recommend messing around with the order of the arguments too much, since it can lead to some confusion.

Most of the time, named arguments are useful on the command line when you have a long argument list and you want to use the defaults for everything except for an argument near the end of the list. Named arguments also help if you can remember the name of the argument and not its position on the argument list. For example, plotting functions often have a lot of options to allow for customization, but this makes it difficult to remember exactly the position of every argument on the argument list.

Function arguments can also be partially matched, which is useful for interactive work. The order of operations when given an argument is

1. Check for exact match for a named argument
2. Check for a partial match
3. Check for a positional match

Partial matching should be avoided when writing longer code or programs, because it may lead to confusion if someone is reading the code. However, partial matching is very useful when calling functions interactively that have very long argument names.

In addition to not specifying a default value, you can also set an argument value to NULL.

f <- function(a, b = 1, c = 2, d = NULL) {

}

You can check to see whether an R object is NULL with the is.null() function. It is sometimes useful to allow an argument to take the NULL value, which might indicate that the function should take some specific action.

## 14.4 Lazy Evaluation

Arguments to functions are evaluated lazily, so they are evaluated only as needed in the body of the function.

In this example, the function f() has two arguments: a and b.

> f <- function(a, b) {
+         a^2
+ }
> f(2)
[1] 4

This function never actually uses the argument b, so calling f(2) will not produce an error because the 2 gets positionally matched to a. This behavior can be good or bad. It’s common to write a function that doesn’t use an argument and not notice it simply because R never throws an error.

This example also shows lazy evaluation at work, but does eventually result in an error.

> f <- function(a, b) {
+         print(a)
+         print(b)
+ }
> f(45)
[1] 45
Error in print(b): argument "b" is missing, with no default

Notice that “45” got printed first before the error was triggered. This is because b did not have to be evaluated until after print(a). Once the function tried to evaluate print(b) the function had to throw an error.

## 14.5 The ... Argument

There is a special argument in R known as the ... argument, which indicate a variable number of arguments that are usually passed on to other functions. The ... argument is often used when extending another function and you don’t want to copy the entire argument list of the original function

For example, a custom plotting function may want to make use of the default plot() function along with its entire argument list. The function below changes the default for the type argument to the value type = "l" (the original default was type = "p").

myplot <- function(x, y, type = "l", ...) {
plot(x, y, type = type, ...)         ## Pass '...' to 'plot' function
}

Generic functions use ... so that extra arguments can be passed to methods.

> mean
function (x, ...)
UseMethod("mean")
<bytecode: 0x7ff125749038>
<environment: namespace:base>

The ... argument is necessary when the number of arguments passed to the function cannot be known in advance. This is clear in functions like paste() and cat().

> args(paste)
function (..., sep = " ", collapse = NULL)
NULL
> args(cat)
function (..., file = "", sep = " ", fill = FALSE, labels = NULL,
append = FALSE)
NULL

Because both paste() and cat() print out text to the console by combining multiple character vectors together, it is impossible for those functions to know in advance how many character vectors will be passed to the function by the user. So the first argument to either function is ....

## 14.6 Arguments Coming After the ... Argument

One catch with ... is that any arguments that appear after ... on the argument list must be named explicitly and cannot be partially matched or matched positionally.

Take a look at the arguments to the paste() function.

> args(paste)
function (..., sep = " ", collapse = NULL)
NULL

With the paste() function, the arguments sep and collapse must be named explicitly and in full if the default values are not going to be used.

Here I specify that I want “a” and “b” to be pasted together and separated by a colon.

> paste("a", "b", sep = ":")
[1] "a:b"

If I don’t specify the sep argument in full and attempt to rely on partial matching, I don’t get the expected result.

> paste("a", "b", se = ":")
[1] "a b :"

## 14.7 Summary

• Functions can be defined using the function() directive and are assigned to R objects just like any other R object

• Functions have can be defined with named arguments; these function arguments can have default values

• Functions arguments can be specified by name or by position in the argument list

• Functions always return the last expression evaluated in the function body

• A variable number of arguments can be specified using the special ... argument in a function definition.


text:
# Sun Kim

### Two identities in Ramanujan’s Lost Notebook & Bressoud’s conjecture

In this talk, we discuss two topics.

The first topic is about two identities that Ramanujan recorded without proofs in his lost notebook.

These two identities are intimately connected with the classical Cirlce and Divisor problems in number theory, respectively. They involve doubly infinite series of Bessel functions, and in each case, there are three possible interpretations for the double series. We proved the first identity under all three interpretations, and the second under two of them. Furthermore, we discuss many analogues and generalizations of them. This is joint work with Bruce C. Berndt and Alexandru Zaharescu.

The second topic is about Bressoud’s conjecture. In 1980, Bressoud obtained an analytic generalization of the Rogers-Ramanujan Gordon identities. He then tried to establish a combinatorial interpretation of his identity, which specializes to many well-known Rogers Ramanujan type identities. He proved that a certain partition identity follows from his identity in a very restrictive case and conjectured that the partition identity holds in general. We discuss Bressoud’s conjecture for the general case and bijective proofs of it.


text:
## Elementary and Intermediate Algebra: Concepts & Applications (6th Edition)

yes; no; it doesn't isolate the variable $t$
Given $-3.5=14t,$ adding $3.5$ to both sides will give an equivalent equation. This though will not be helpful in solving the equation since solving the equation means using the properties of equality to isolate the variable on one side of the equal sign.


text:
Question

The length and breadth of a field are measured as: $l = \left( {120 \pm 2} \right)m$ and $b = \left( {100 \pm 5} \right)m$, respectively. What is the area of the field?

Hint: You can start by finding the area of the field without the error, i.e. $A = l \times b$ . Then calculate the margin of error in the area of the field by using the equation $\dfrac{{\Delta A}}{A} = \left( {\dfrac{{\Delta l}}{l} + \dfrac{{\Delta b}}{b}} \right)$ . Then express the area of the field with error in the form $A + \Delta A$

Here, we are given a rectangular field that has some error of margin in the length and the breadth of the field, so the area will also have some error margin which we have to calculate in the solution. The field has the following dimensions
Length $= \left( {120 \pm 2} \right)m$
Breadth $= \left( {100 \pm 5} \right)m$
We know that the area for the field is
$A = l \times b$
$\Rightarrow A = 120 \times 100$
$\Rightarrow A = 12000{m^2}$
Here we are given the dimensions (length and breadth) of a rectangular field. It is also mentioned that there is an $\pm 2m$ error margin in the length of the field. It means that the length of the field may be $2m$ longer or $2m$ shorter than the measured length. It is also mentioned that there is an $\pm 5m$ error margin in the breadth of the field. It means that the breadth of the field may be $5m$ longer or $5m$ shorter than the measured breadth.
So, the margin of error in the area of the field can be calculated by using the equation
$\dfrac{{\Delta A}}{A} = \left( {\dfrac{{\Delta l}}{l} + \dfrac{{\Delta b}}{b}} \right)$
$\Rightarrow \Delta A = \left( {\dfrac{{\Delta l}}{l} + \dfrac{{\Delta b}}{b}} \right) \times A$
$\Rightarrow \Delta A = \left( {\dfrac{2}{{120}} + \dfrac{5}{{100}}} \right) \times 12000$
$\Rightarrow \Delta A = 800.4{m^2}$
So, the area of the field $= A + \Delta A = \left( {12000 \pm 800.4} \right){m^2} = \left( {1.2 \pm 0.08} \right) \times {10^4}{m^2}$

Note: The concept of errors teaches us a very important thing. You may have conducted experiments in the lab, and as you may know, we take multiple observations for the same experiments and then take an average for the final result, because if we only take one observation it may be errors that can be human error or any other error.


text:
Why must subbundle be an embedded submanifold?

In John Lee's smooth manifold, pg 264, or 199 in this version, he defines

Let $$\pi:E \rightarrow M$$ be a vector smooth bundle. A subbundle $$\pi|_D:D \rightarrow M$$ is called a smooth subbundle if it is smooth vector bundle and an embedded submanifold with or without boundary.

Being embedded in Lee's definition has two conditions:

1. It is a topological embedding.
2. It is a smooth immersion. That is $$di_p :T_pD \rightarrow T_pE$$ is injective for all $$p \in D$$.

$$D$$ can be given subspace topology. 1. is then satisfied.

But why do we require in the definition that it is a smooth immersion? Is this condition additonal? Or could actually be deduced?

• note that $i$ maps $D$ into $E$, not into $M$. (this is not an attempt to answer your question, but it may be a hint to a misconception you may have) – Thomas Sep 27 '18 at 9:10
• If it's not an embedding, then your trivialization maps may not restrict to homeomorphisms, since $D$ doesn't necessarily inherit the subspace topology of $E$. It may be still true that $D\to M$ is a smooth vector bundle, but it's not a subbundle of $E\to M$. – Matt Sep 27 '18 at 10:00
• ＠Thomas, thaanks that was a typo. @Matt is it possible that: D is a subbundle , D has subspace topology, but $D \rightarrow E$ is not an embedding? My problem is that I feel the condition of smooth immersion is "forced", if you get what I mean, but could not formalize it. – CL. Sep 27 '18 at 10:36
• @CL I don't understand what you're asking. If you don't have an immersion, then you can't think of $T_pD$ as a subspace of $T_pE$. So $D\subset E$, but the smooth structures aren't compatible in a nice way. This defeats the purpose of working in the smooth category. You could just have $D$ is a topological embedding into $E$ over some topological space $M$ and then have talking about the (topological) subbundle. If it's not an embedding, then you just have two smooth vector bundles $E\to M$ and $D\to M$ that have some overlapping (set) characteristics. – Matt Sep 28 '18 at 17:29
• @CL I think this would be similar to saying you have a smooth map $f:M\to N$ of smooth manifolds, and trying to say $T_pM\leq T_{f(p)}N$. You can certainly make sense of the pushforward, but you don't consider $M$ a submanifold of $N$. So why should you consider $D$ a subbundle of $E$? – Matt Sep 28 '18 at 17:31


text:
# Department of Pure Mathematics and Mathematical Statistics

Research Interests: Schramm-Loewner evolution, Gaussian free field, Liouville quantum gravity, random planar maps, random walks, mixing times for Markov chains.

## Publications

Metric gluing of Brownian and $\sqrt{8/3}$-Liouville quantum gravity surfaces
E Gwynne, J Miller
– Annals of Probability
(2019)
47,
2303
Cut-off for lamplighter chains on tori: dimension interpolation and Phase transition
A Dembo, J Ding, J Miller, Y Peres
– Probability Theory and Related Fields
(2019)
173,
605
Harmonic functions on mated-CRT maps
E Gwynne, J Miller, S Sheffield
– Electronic Journal of Probability
(2019)
24,
58
Connection probabilities for conformal loop ensembles
J Miller, W Werner
– Communications in Mathematical Physics
(2018)
362,
415
Active spanning trees with bending energy on planar maps and SLE-decorated Liouville quantum gravity for $\kappa > 8$
E Gwynne, A Kassel, J Miller, DB Wilson
– Communications in Mathematical Physics
(2018)
358,
1065
Dimension of the SLE Light Cone, the SLE Fan, and ${{\rm SLE}_\kappa(\rho)}$ SLE κ ( ρ ) for ${\kappa \in (0,4)}$ κ ∈ ( 0 , 4 ) and ${\rho \in}$ ρ ∈ ${\big[{\tfrac{\kappa}{2}}-4,-2\big)}$ [ κ 2 - 4 , - 2 )
J Miller
– Communications in Mathematical Physics
(2018)
360,
1083
Brownian motion correlation in the peanosphere for $\kappa>8$
E Gwynne, N Holden, J Miller, X Sun
– Annales de l Institut Henri Poincaré Probabilités et Statistiques
(2017)
53,
1866
Imaginary geometry IV: interior rays, whole-plane reversibility, and space-filling trees
J Miller, S Sheffield
– Probability Theory and Related Fields
(2017)
169,
729
Six-vertex model and Schramm-Loewner evolution.
R Kenyon, J Miller, S Sheffield, DB Wilson
– Physical Review E
(2017)
95,
052146
Uniformity of the late points of random walk on ${\mathbb {Z}}_{n}^{d}$ Z n d for $d \ge 3$ d ≥ 3
J Miller, P Sousi
– Probability Theory and Related Fields
(2017)
167,
1001
• <
• 2 of 5
• >

D2.02

01223 337951


text:
## Homework for Closures

Thursday, March 1st, 2007

I’ve long been an advocate of outside-in API design. This reflects my interest in user-interface principles in API design. When designing a GUI it is customary to mock it up on paper and then with prototyping tools before implementing the internal code. This helps the interface reflect the user’s goals and expectations rather than the internal data structures of the program. In API design, this means the class becomes more easily usable by decoupled client code.

It occurs to me that the same principles apply in language design. In particular we should try writing some code with proposed new features before we implement the features. This has several advantages:

• Ensures we get what we need, rather than what the proposal supports
• Helps us understand exactly what is being proposed
• Shows the strengths and weaknesses of each proposal
• Avoids unnecessary features that don’t support a real use case

Consequently herewith are some challenges for the proposers of the various closure proposals. I’ve tried to make them as simple as possible so that the closure issues will be focused on.
(more…)

## Two Criteria for Closures

Thursday, February 15th, 2007

I’m slowly coming around to the idea that first class functions in Java are probably a good idea. I’m still not convinced we need full-blown closures though. Possibly we do. Doug Lea has some interesting use cases I need to explore further.

Several things concern me though. One is syntax. I really, really want the syntax to be simple and have no surprises or significant learning curve. I want existing Java programmers to be able to read Java code that uses closures (or first class functions) and immediately be able to see what the code is doing without any prior training in the new syntax. I want the syntax to be that clear. If we can’t have that, I don’t want to do it. I want Java to still be a lingua franca.

Secondly I want closures to be really, really easy to write. No gotchas. A little training may be allowed here, but there shouldn’t be any special cases or surprises. Programmers’ first instincts of how to write something should be correct. In particular, I do not want to see any issues like “the closure works if the external variables are declared final, but fails if they’re not.” Or, “the closure works if the external variables are not modified, but stops compiling if a line is added that modifies one.” That is, implicit final is not a workaround. The only things that break the closure should be:

1. Syntax error inside the closure itself
2. Breakage in the closure syntax (i.e. leaving off a trailing curly brace or some such in the closure definition)
3. Removing or renaming an external variable the closure depends on.

In other words, the only things that should cause a closure to fail to compile or run in the expected fashion should be exactly those things that cause today’s code to fail to compile or run. If you rename a local variable from x to y and forget to rewrite the statement foo(x);, then the compiler complains. This is a common bug we all know how to handle when it happens to us. I want to make sure that adding closures does not add any new failure types or patterns.

Those are my requirements for any proposal to introduce closures or first class functions into the Java language. I am prepared to reject any proposal that does not meet these two criteria. If no proposal can satisfy these two criteria, then we shouldn’t add closures or first class functions.

So what are the proposals on the table, and how well do they meet these criteria?
(more…)

## Why Hate the for Loop?

Wednesday, February 7th, 2007

There’s one example that comes up sooner or later every time someone starts talking about closures. This time it’s from Bruce Tate on developerWorks:

Listing 1. The simplest possible closure

 3.times {puts "Inside the times method."} Results: Inside the times method. Inside the times method. Inside the times method.

times is a method on the 3 object. It executes the code in the closure three times. {puts "Inside the times method."} is the closure. It’s an anonymous function that’s passed into the times method and prints a static sentence. This code is tighter and simpler than the alternative with a for loop, shown in Listing 2:

 for i in 1..3 puts "Inside the times method." end

Personally I find the latter example simpler, clearer, and easier to understand. For one thing, when I see the word times suffixed to a number like 3 I expect multiplication, not action. But even if times were changed to a more reasonable method name such as do or act, I’d still prefer the for loop. (Perhaps what you really want here is “do 3 times”. That might really be clearer. )
(more…)

## Java as Lingua Franca

Monday, February 5th, 2007

When I travel I speak English. When I teach I speak Java, and for the same reason: it lets me be understood.

When I need to teach cross-platform subjects like DOM or data structures to mixed language audiences, I can easily use Java to show examples and everyone can follow them, even if they’re not Java programmers. Everyone reads at least pidgin Java. Only C++ programmers can read C++. Only Ruby programmers can read Ruby. (Still better than Perl though. No one can read Perl, Perl programmers included.)

Of course, if you’re traveling in one area, it’s better to speak the native language if you can. French gets you farther in Lyons than English, but if you’re at an international conference English is your only hope. If you’re at RubyConf, Ruby will get you far. However if you’re at OOPSLA or Software Development, Java is the way to go.

Java is the programmer’s lingua franca.
(more…)

## CICE: Not So Nice

Thursday, February 1st, 2007

I’m still trying to wrap my head around closures, so I can decide if they’re a good idea or not; but there is one specific proposal I am willing to shoot down: Concise Instance Creation Expressions by Bob Lee, Doug Lea, and Josh Bloch. In fact, I think they shoot it down themselves pretty effectively without noticing what they’ve done. Here are their examples:
(more…)


text:
# Ray-Triangle intersection issue in RayTracing

This topic is 3615 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hey So I'm programming a RayTracer from scratch, and I just added support for triangles. I am using this algorithm for ray-triangle intersection: http://www.cs.virginia.edu/~gfx/Courses/2003/ImageSynthesis/papers/Acceleration/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf The results are good except for the odd triangle. I think the triangle is orthogonal to the lightsource when this happens. See pic: http://www.steik.org/dump/out.png You can see a couple of triangles there in the middle that look like they are completely in shadow. The shading function is fine (I can add a sphere and it will be perfectly shaded, as will the teapot if I take out shadow checking), so I'm certain that the problem is in the intersection function. The problem might be that the teapot that I use has predefined normal at each vertex that I use for shading, but the intersection function uses the vertexes to do it's thing. If that is the problem however, I am not sure how to solve it, so I'm open to suggestions :) But of course, the intersection testing is totally decoupled from the shading function, so for the intersection test I don't have information about the light. Might as well post some code... the top is the shading function, followed by the intersection stuff..

{
else if (light->type == LightBase::DIRECTIONAL)
{
LightDirectional* ld = (LightDirectional*)scene->lights;

float dist = TestRay(Ray(pos, ld->dir), scene);
bool isInShadow = !(dist == 0);

{
// Calculate color.. this part works
}
}
}

float RayTracer::TestRay(Ray ray, Scene* scene)
{
vector<ISect> *isects = Intersections(ray, scene);

float dist;
if (isects->empty())
dist = 0;
else
dist = (*isects)[0].dist;

delete isects;
return dist;
}

vector<ISect> *RayTracer::Intersections(Ray& ray, Scene* scene)
{
vector<ISect> *list = new vector<ISect>();

for (int i = 0; i < scene->sceneObjects.size(); i++)
{
ISect inter = scene->sceneObjects->Intersect(ray);

if (inter.valid && inter.dist > 0)
list->push_back(inter);
}

struct isectSort
{	bool operator()(ISect a, ISect b) { return a.dist < b.dist; }	};

std::sort(list->begin(), list->end(), isectSort());

return list;
}

and well.. since i'm posting code anyway, here is the triangle intersection test:

inline virtual ISect Intersect(Ray& _ray)
{
// From the paper "Fast Minimum Storage Ray Triangle Intersection"
// Tomas Möller
// Ben Trumbore

Vec3 tvec, pvec, qvec;
float det, inv_det;
float u, v, t;

Vec3 edge1 = Vec3::Minus(v1, v0);
Vec3 edge2 = Vec3::Minus(v2, v0);
pvec = Vec3::CrossP(_ray.dir, edge2);
det = Vec3::DotP(edge1, pvec);

if (det > -EPSILON && det < EPSILON)
return ISect(); // false, no intersection

inv_det = 1.0 / det;

tvec = Vec3::Minus(_ray.start, v0);

u = Vec3::DotP(tvec, pvec) * inv_det;

if (u < 0.0 || u > 1.0)
return ISect(); // false, no intersection

qvec = Vec3::CrossP(tvec, edge1);

v = Vec3::DotP(_ray.dir, qvec) * inv_det;

if (v < 0.0 || (u + v) > 1.0)
return ISect(); // false, no intersection

t = Vec3::DotP(edge2, qvec) * inv_det;

return ISect(this, _ray, t);
}

##### Share on other sites
I'm guessing here: while for the shading you use the interpolated normal, I think that you check if the shading must be performed at all for a given light by doing a dot product between the light ray and the triangle normal. In some cases this will report that the triangle is backfacing the light, even when at least PART of the surface would be visible according to the interpolated normals.

Hope this help.

PS. Whay do you store all the intersected triangles? Usually you retun just the closer one (and this enabled a few optimizations in the intersecting routines). Do you use it to handle overlapping transparent surfaces or for other reasons?

EDIT: you could try a test to see if the problem is what I suspect: try rendering the same scene using the true triangle normal: if I got it, the problematic triangles should be fully shadowed, while every triangle that looks at least partially lit will be fully lit.

##### Share on other sites
Did check whether the normal you are using for shading is actually unit length?
When interpolating normals it often happens that they use unit length properties.

Looking at the picture however I think the problem lies somewhere else, look at the edge artifacts at the middle/bottom

##### Share on other sites

Performance is not really an issue at this point (image quality first), so I haven't thought about optimizations to the intersection routine.

Yes, I make sure the normal used for lighting is unit length.

True triangle normal:

Interpolated normals from dataset:

Same as above, but no checking if it's shadow (if it's occluded by other triangles in the scene)

As cignox1 suggested, the problematic triangles are fully shadowed when renderin with true normals.

I considered your suggestion;

Quote:
 I'm guessing here: while for the shading you use the interpolated normal, I think that you check if the shading must be performed at all for a given light by doing a dot product between the light ray and the triangle normal. In some cases this will report that the triangle is backfacing the light, even when at least PART of the surface would be visible according to the interpolated normals.

But as I said previously, the problem is not in the shading function. This can be observed from the above pictures. When the problem occours I don't even evaluate the shading function because the triangle is judged to be completely shaded.

Hmmm... :o

[Edited by - bjarnia on November 27, 2008 5:25:53 AM]

##### Share on other sites
I think that those triangles occlude themself: when the shadowray is shot, the ray hit the same triangle it was originated from. A solution might be to discard from the shadow test the triangle where the ray originated.
This happens because you use fake normals, but the true shape of the triangle is planar: that is, this works for shading, but shadowing breaks and reveals the true poligonal shape.

##### Share on other sites
Looks like it worked!

I multiplied the starting position of the shadow ray by 1.01 so it wouldn't "originate in it self", and that seems to have taken care of the problem.
It's a hack.. but i'm happy with the results :)

Thanks!

(sorry for diff color! forgot what the previous setting was :) )

##### Share on other sites
Quote:
 Original post by bjarniaLooks like it worked!I multiplied the starting position of the shadow ray by 1.01 so it wouldn't "originate in it self", and that seems to have taken care of the problem.It's a hack.. but i'm happy with the results :)Thanks!

Sorry, I didn't suggested you that because I thought you already were doing this, since not using this hack usually lead to strange pixels here and there.
However, this very problem is often called 'acne problem', and you should add an epsilon to any ray originating by an intersection (reflection, transmission and shadow, usually). Most of the people use the surface normal to offset the origin point (the intersection point) and thought it is a hack, is (as far as I know) the most used trick to avoid those kind of errors.

As I said, not doing this resulted (at least in my RT) in strange pixels similar to noise appearing randomly all over the image and I'm a bit surprised that you didn't have the same problem with your reflection code...

Glad you found the solution.

##### Share on other sites
Thanks again!

I queued up 200 frames or so for rendering while sleeping and noticed another problem when I woke up, when the light had moved, but this (and the original problem) was fixed by adding the normal multiplied by 0.01 to the position, instead of just increasing the position a bit.

Don't have any books or nothin on raytracing, just doing this for fun, so I'm not aware of what is "generally done" >_<

##### Share on other sites
If you aren't using any book/tutorial, then maybe you might be interested in this tutorial series hosted by DevMaster.net.

1. 1
Rutin
37
2. 2
3. 3
4. 4
5. 5

• 11
• 10
• 13
• 103
• 11
• ### Forum Statistics

• Total Topics
632977
• Total Posts
3009674
• ### Who's Online (See full list)

There are no registered users currently online

×


text:
# Define a relation $\sim$ on $\mathbb{R}^2 \setminus (0,0)$ by $(a,b)\sim (c,d)$ if there is some real number x with $a=xc$ and $b=xd$.

Define a relation $\sim$ on $\mathbb{R}^2 \setminus (0,0)$ by $(a,b)\sim (c,d)$ if there is some real number $x$ with $a=xc$ and $b=xd$. I need to prove the relation is an equivalence relation and determine the equivalence classes.

Here's what I have started.

Reflexive: Let $(a,b) \epsilon \sim$, then $a=1\cdot a$ and $b=1\cdot b$. Thus $(a,b)\sim(a,b)$ and $\sim$ is reflexive.

Can I have a nudge to finish the rest?

Even more important though...can I some deeper intuition to their relation? Help with understanding that will help me determine the equivalence classes on my own.

• Viewing $(a,b)$ as a vector from $(0,0)$ to $(a,b)$ then the relation says $V\sim U\iff V = xU$ is a scaling of $U$ by some real $x$ (necessarily $x\neq 0$ since $V\neq (0,0)$ by hypothesis). That this is an equivalence relation is equivalent to the fact that the scalars $\Bbb R\backslash0$ contain $1$ (reflexive) and are closed under inverses (symmetric) and multiplication (transitive) i.e. the scalars $\Bbb R\backslash0$ form a group. – Bill Dubuque Aug 31 '17 at 17:41

Symmetry comes from the fact that you can divide by $x$ since neither $a$ or $b$ are $0$, and transitivity comes from considering the product of $x_1$ and $x_2$.
For what the equivalence classes are, think of $\mathbb{R}^2$ as the Euclidean plane, and imagine lines through the origin.
• If $x = 0$ then we have $a = b = 0$, but we've forbidden that from the choice of set we're working on. – Duncan Ramage Aug 31 '17 at 17:24
• Then for symmetry I can say: If $(a,b),(c,d))\epsilon\sim$, then $a=xc, b=xd$ and so $c=x^{-1}a, d=x^{-1}b$. Thus $\sim$ is symmetric. – PerpetualStudent Aug 31 '17 at 17:51
• Exactly. You will probably also want to include a line about why $x^{-1}$ exists. – Duncan Ramage Aug 31 '17 at 17:53
• Transitivity: If $(a,b), (c,d), (e,f) \epsilon \sim$, then $a=xc, b=xd$ $c=xe, d=xf$ Thus, $a=x^{2}e, b=x^{2}f$. Therefore, $\sim$ is transitive. – PerpetualStudent Aug 31 '17 at 18:01
• Yes, thanks. Since $x \epsilon \mathbb{R}, x^{-1} \epsilon \mathbb{R}$ – PerpetualStudent Aug 31 '17 at 18:03


text:
# How to print, with biblatex, the bibliography with the whole content of my bib-file?

Should be an obvious question but Google fails to asnswer it :)

I am trying to fine-tune the biblatex output. To test the result, I would like to see how it works for all entries in my bib-file. Is it possible to achieve this without copying all keys manually?

-
Possible duplicate: tex.stackexchange.com/questions/6885/… –  diabonas Feb 28 '11 at 21:50
Since this question specifically asks about biblatex, I'm not sure if it can be considered a duplicate. –  Caramdir Feb 28 '11 at 22:09
@Caramdir But the solution is the same, so this is independent of biblatex. –  Alan Munn Feb 28 '11 at 22:16
@Alan: But obviously it wasn't findable using Google, which indicates that we should have a separate question about it. Biblatex can, after all, be sometimes quite different. Also see locksteps comment to the answer. –  Caramdir Feb 28 '11 at 22:25
@Alan: The question suggests the OP might want the 'debug' style in biblatex in addition to the more general 'cite everything' situation –  Joseph Wright Feb 28 '11 at 22:37

\nocite{*}

should be what you are looking for. It prints all of your entries, including the uncited ones into your bibliography. You enter it somewhere between \begin{document} ... \end{document}

I'm including locksteps comment into the answer:

With biblatex, you can also write \nocite{*} in the preamble.

-
With biblatex, you can also write \nocite{*} in the preamble. –  lockstep Feb 28 '11 at 22:18
@texnic: If the answer was helpful to you, you could accept it when you're sure no better answer comes along. :-) Also, if you haven't already, you could upvote locksteps comment. In my opinion it really enhances the answer!! :-) –  meep.meep Mar 1 '11 at 8:21
Thanks. BTW, it is possible to use code samples inside blockquotes. –  lockstep Mar 1 '11 at 8:29
I would vote up the lockstep's comment and also that old an_ant's answer but I don't yet have enough privilege for it :) Guys, thanks very much for help. It's really stupid I couldn't find \nocite{*} myself, but somehow I spent about an hour with biblatex.pdf, Google and Stackexchange but failed to find what I needed. –  texnic Mar 1 '11 at 11:21


text:
Qwika Toolbar for IE and Firefox users!

## Home > English

 Searching 21,964,380 articles in 1,158 wikis. Beta release. Any comments please contact us Press release (Feb 17): New search engine helps bridge the language gap in Wikipedia Press release (Apr 4): Qwika search engine now indexes 1158 wikis in 12 languages

Search wikis:

 Results for graph theory   31 to 40 of 2271

Algebraic graph theory
Algebraic graph theory Algebraic graph theory is a branch of mathematics. In one sense, algebraic graph theory studies graphs in connection with ...
http://en.wikipedia.org/wiki/Algebraic_graph_theory - 1k - Cached - Similar pages

Connectivity (graph theory)
Connectivity (graph theory) In mathematics and computer science, connectivity is one of the basic concepts of graph theory. It is closely related to the theory of network flow problems. The connectivity ...
http://en.wikipedia.org/wiki/Connectivity_(graph_theory) - 9k - Cached - Similar pages

Closeness (graph theory)
Closeness (graph theory) Closeness is a centrality measure of a vertex within a graph. Vertices that are 'shallow' to other vertices ... distances to other vertices with in the graph) have higher closeness. Closeness is preferred in ... distances to all other vertices in the graph: $C_C\left(v\right)=\frac\left\{1\right\}\left\{\sum_\left\{ ...$
http://en.wikipedia.org/wiki/Closeness_(graph_theory) - 1k - Cached - Similar pages

Tournament (graph theory)
Tournament (graph theory) A tournament is a directed graph obtained by choosing a direction for each edge in an undirected complete graph. For example, here is a tournament on ... The name tournament originates from such a graph's interpretation as the outcome of ...
http://en.wikipedia.org/wiki/Tournament_(graph_theory) - 4k - Cached - Similar pages

Degree (graph theory)
Degree (graph theory) This article is about the term "degree" as used in graph theory. For alternate meanings, see degree (mathematics) or degree. In the mathematical field of graph theory the degree or valency of ...
http://en.wikipedia.org/wiki/Degree_(graph_theory) - 2k - Cached - Similar pages

Distance (graph theory)
Distance (graph theory) In the mathematical subfield of graph theory, the distance between two vertices in a graph is the number of edges in ...
http://en.wikipedia.org/wiki/Distance_(graph_theory) - 3k - Cached - Similar pages

Snark (graph theory)
Snark (graph theory) The flower snark is one of 6 snarks on 20 vertices. In graph theory, a snark is a connected, bridgeless cubic graph with chromatic index equal to 4. ...
http://en.wikipedia.org/wiki/Snark_(graph_theory) - 2k - Cached - Similar pages

Path (graph theory)
Path (graph theory) In mathematics, a path in a graph is a sequence of vertices such that ... The same concepts apply in a directed graph , with the edges being directed from each ... are the same by definition). In modern graph theory, most often "simple" is implied; ...
http://en.wikipedia.org/wiki/Path_(graph_theory) - 3k - Cached - Similar pages

Spectral graph theory
Spectral graph theory In mathematics, spectral graph theory is the study of properties of a graph in relationship to the characteristic polynomials, ...
http://en.wikipedia.org/wiki/Spectral_graph_theory - 3k - Cached - Similar pages

Extremal graph theory
Extremal graph theory Extremal graph theory is a branch of mathematics. In the narrow sense, extremal graph theory studies the graphs which are ...
http://en.wikipedia.org/wiki/Extremal_graph_theory - 3k - Cached - Similar pages

Page: <<Previous 1 2 3 4 5 6 7 8 9 10 Next >>

Search wikis:

Search:

Try your search on: FactBites (sentence-based)


text:
### Author Topic: Bengtson & Ruhlen, Global Etymology  (Read 15786 times)

#### freknu

• Forum Regulars
• Serious Linguist
• Posts: 396
• Country:
• Ostrobothnian (Norse)
##### Re: Bengtson & Ruhlen, Global Etymology
« Reply #30 on: June 23, 2014, 11:31:37 PM »
I forgot to post the link to the criticism:

What can we learn about the earliest human language by comparing languages known today?, Lyle Campbell

Quote
So, what can we find out or reasonably hypothesize about the earliest human language(s) from looking back from evidence in modern and attested older languages? We can speculate, perhaps even reasonably in some cases, but we can 'know' extremely little. What can we find out from lexical comparisons? Answer: essentially nothing, though we can learn object lessons from the many problems found in the methods which have been utilized to attempt to get at 'global etymologies.' Perhaps because of the assumption that all the world's languages are genetically related, descendants of 'Proto-World,' global etymologists are disposed to believe in etymological connections among words in contemporary languages, and this will to believe permits them to accept as related forms which do not exceed sheer accidental similarity as a more plausible explanation. I conclude with Bender (1993:203), ''global etymologies' are an illusion. They are an artifact of too much freedom of choice and the loss of control.' The global etymologists have not met their burden of proof. In the long time since the origin of human language(s), so much vocabulary replacement has taken place that in effect no forms once found in 'Proto-World' could have survived. Moreover, if some form had survived (and I assert it did not), after so much change it could not be recognized, and, if it should preserve a recognizable shape (and again I assert it could not), there would be so few such surviving forms that it would be impossible to distinguish successful survivors from forms similar by sheer accident. In short, the search for global etymologies is at best a waste of time, at worst an embarrassment to linguistics as a discipline, confusing and misleading those who might look to linguistics for understanding in this area.

What can we find out Proto-World from structural comparisons? Answer: nothing especially useful, though functional typological and structural considerations may provide broad guidelines to what even the earliest human language would have to have in order to qualify as a human language. Again, though, we learn object lessons from the problems encountered in such structural comparisons. In particular, we learn that there is no correlation to be found between size of speech community or social organization and structural aspects of languages. We can speculate that the design features of human language give us a small handle on the necessary nature of the earliest human language(s), but these are so broad that essentially any linguistic structure known in any language today would qualify as possible.

Quite a biting conclusion. I'm not so sure I agree with everything he says, but I can't say I see any major issue with his conclusion, either.
« Last Edit: June 23, 2014, 11:53:06 PM by freknu »

#### Daniel

• Experienced Linguist
• Posts: 1805
• Country:
• English
##### Re: Bengtson & Ruhlen, Global Etymology
« Reply #31 on: June 24, 2014, 03:50:04 AM »
Quote
In particular, we learn that there is no correlation to be found between size of speech community or social organization and structural aspects of languages.
A lot of linguists would disagree. I'm not sure that I do. But the idea that culture and language are closely connected is certainly popular.
At least one property of small speech communities is the use of local geography in the grammatical system. That disappears with globalization (if not much sooner). And there are probably more things. I'm not sure why Campbell wrote that particular part.

Quote
We can speculate that the design features of human language give us a small handle on the necessary nature of the earliest human language(s), but these are so broad that essentially any linguistic structure known in any language today would qualify as possible.
This I agree with. (But of course, many would not-- those who believe that UG is fairly constrained, for example.)

As for the issue of reconstruction, I still want to go back to my earlier point that the best way (to whatever degree there is any chance of a good way) would be through intermediate reconstructions. Surface comparisons of modern languages is silly, for the reasons outlined well above-- we'd expected differences, not strong similarities at this point. But none of this means we absolutely can't get back that far.

Additionally, there is one interesting perspective that Campbell, I assume unintentionally, hints at: if the issue is borrowing and the messiness of data, one odd but interesting argument for a Ruhlen type approach to Proto-World is that borrowing is indeed accounted for at that level. Comparing these words across all languages, and including all changes and all borrowing, there may be some way to just average that all out and see what Proto-World was like. Overall it's still not going to happen. But at the level of Proto-World, borrowed words aren't "noise" per se, but rather just more data, with a different path.

#### MalFet

• Global Moderator
• Serious Linguist
• Posts: 282
• Country:
##### Re: Bengtson & Ruhlen, Global Etymology
« Reply #32 on: June 25, 2014, 07:29:33 PM »
Quote
Once you get past a certain point, the system contains enough mutation to push the similiarities into a band of probability that makes it fundamentally impossible to separate from chance.
WHAT POINT?
That's my entire objection. You're hand-waving if you can't give a date (or general window) for that point.
And, yes, that "point" is the barrier/wall/limit I've been talking about.

I know this is your entire objection, but it's the wrong objection. That's what I keep trying (but failing) to explain. There is no simple "point" in historical time beyond which reconstruction is impossible. That's just not how it works. For any particular dataset, however, there are some hard methodological limits on how much mutation can be reliably extrapolated in the absence of actual, attested datapoints. Any good textbook on historical linguistics should cover this.

When you start postulating beyond the reach of your dataset (as Ruhlen insists on doing), it becomes statistically impossible to distinguish between similarity as a consequence of relatedness and similarity as a consequence of chance. Put simply, Ruhlen is making **** up and telling people to prove him wrong. That's not science. It's not even mediocre science. It's sitting around the campfire telling just-so stories.

What's the coherent and specific argument against Ruhlen et al then?

Precisely what I've said in every post in this thread. Most historical linguists feel that it is necessarily to test claims of relatedness against the null hypothesis...namely, that observed similarities between languages are the product of coincidence. Ruhlen does not do this, and when others have done it for him his hypotheses tend to collapse under the weight of analysis.

#### Daniel

• Experienced Linguist
• Posts: 1805
• Country:
• English
##### Re: Bengtson & Ruhlen, Global Etymology
« Reply #33 on: June 25, 2014, 07:44:41 PM »
I agree with you completely, except that I see this as a gradient distinction, not a categorical one.

Quote
For any particular dataset, however, there are some hard methodological limits on how much mutation can be reliably extrapolated in the absence of actual, attested datapoints. Any good textbook on historical linguistics should cover this.
Can you be more specific?

Certainly there are limits, but I'm not sure how we know what those limits are. I can tell which argument is a better argument, but not exactly where a hard limit is.

#### MalFet

• Global Moderator
• Serious Linguist
• Posts: 282
• Country:
##### Re: Bengtson & Ruhlen, Global Etymology
« Reply #34 on: June 25, 2014, 09:29:39 PM »
I agree with you completely, except that I see this as a gradient distinction, not a categorical one.

Quote
For any particular dataset, however, there are some hard methodological limits on how much mutation can be reliably extrapolated in the absence of actual, attested datapoints. Any good textbook on historical linguistics should cover this.
Can you be more specific?

Certainly there are limits, but I'm not sure how we know what those limits are. I can tell which argument is a better argument, but not exactly where a hard limit is.

If I try to throw a quarter into a cup, the probability that I will be successful decreases as the cup gets farther away from me. This decrease is a gradient change. If the cup is sitting on the moon, however, it's pretty darn categorical that I'm not going to land a quarter in it.

If you're interested in historical reconstruction, you might look at something like Anthony Fox's book. He doesn't provide much by the way of cutting edge statistical methodology, but his historical overview is the next best thing to actually doing some of this work yourself. The material on transformation chains, in particular, should make it very clear why Ruhlen's claims sit a few million miles north of this notional "hard limit" that you keep wanting to locate.

#### Daniel

• Experienced Linguist
• Posts: 1805
• Country:
• English
##### Re: Bengtson & Ruhlen, Global Etymology
« Reply #35 on: June 25, 2014, 10:57:48 PM »
Quote
If I try to throw a quarter into a cup, the probability that I will be successful decreases as the cup gets farther away from me. This decrease is a gradient change. If the cup is sitting on the moon, however, it's pretty darn categorical that I'm not going to land a quarter in it.
That's exactly the sort of hand waving that I'd like to avoid. It's an unscientific argument against what you're claiming is an unscientific approach.

Again, I agree with you. This is all intuitive and Ruhlen is looking way too early. But I don't know that for scientific reasons.

Scientifically, all I know is that you almost certainly won't hit the cup. But you might.

Quote
The material on transformation chains, in particular, should make it very clear why Ruhlen's claims sit a few million miles north of this notional "hard limit" that you keep wanting to locate.
So let's, for argument's sake, assume that the hard limit is somewhere between 1,000 and 50,000 years ago, still far from the reconstructions Ruhlen proposes. How do we establish with relative certainty that the limit is indeed within that window?

#### freknu

• Forum Regulars
• Serious Linguist
• Posts: 396
• Country:
• Ostrobothnian (Norse)
##### Re: Bengtson & Ruhlen, Global Etymology
« Reply #36 on: June 26, 2014, 01:23:01 AM »
Scientifically, all I know is that you almost certainly won't hit the cup. But you might.

Scientifically, there is no evidence to support the notion that he could complete said task. If you have evidence to the contrary, you are free to prove how he could do it — the burden of proof is on you.

So let's, for argument's sake, assume that the hard limit is somewhere between 1,000 and 50,000 years ago, still far from the reconstructions Ruhlen proposes. How do we establish with relative certainty that the limit is indeed within that window?

Statistics is not one of my stronger points, but here goes ...

1. attested data point
2. extrapolated data point
3. extrapolated data point, k=√(k1²+k2²)
4. extrapolated data point, k=√(k1²+k2²+k3²)
5. extrapolated data set, k=√Σki²

How long before your uncertainty is so far off the scale that you need a magnifying glass just to see it?

There is not just a single step from modern language to PIE, it already involves decades of work and layers upon layers of reconstructions and uncertainties. Going from PIE to any hypothetical earlier superfamily is likewise going to require many layers of reconstructions, it's not going to be one single swift step.

As Campbell mentioned in his critique, the time depth of PIE is around 6,000 years, and to find any relation to Proto-Uralic (probably the nearest and most likely candidate) to form Proto-Indo-Uralic one might very well add another 6,000 years worth of change. At least PIE and PU are reconstructed from attested data points which "document" the changes over time; PIU on the other hand would be entirely reconstructed from extrapolated data points. Even further back and you have extrapolated data points from extrapolated data points from extrapolated data points ... and so on.

#### Daniel

• Experienced Linguist
• Posts: 1805
• Country:
• English
##### Re: Bengtson & Ruhlen, Global Etymology
« Reply #37 on: June 26, 2014, 03:42:56 AM »
To summarize my position: I'm not at all advocating Ruhlen's method. But I want to question the specific arguments against it. I think pushing these limits back is a very interesting topic, and I'm far from convinced we'll find some kind of hard limit at, for example, 10,000 years. Instead, I think it will become increasingly difficult to push it back further and further. But I see no reason why we cannot continue to push that limit back, very slowly, with continued research.

Details:
Quote
Scientifically, there is no evidence to support the notion that he could complete said task. If you have evidence to the contrary, you are free to prove how he could do it — the burden of proof is on you.
Scientifically, we only disprove (falsify) things. So the burden of proof is on proving that Ruhlen cannot do this-- otherwise it's just hand-waving, which is what I've been saying.
I don't need to "prove" that he can do what he's doing. I'm actually seeking a way to prove that he cannot, if there is indeed such a way.

Quote
How long before your uncertainty is so far off the scale that you need a magnifying glass just to see it?
Of course. But why believe anything about PIE then?
The whole point is that if you do it well enough, maybe that result you can only see with a magnifying glass is correct. So the burden of proof is on you to show why you cannot possibly, even with a magnifying glass, come to a reasonable conclusion at 100,000 years ago.
And I've said we can't: for the same reasons you showed, that it becomes statistically uninformative over time, so earlier is less information -- we'd need a magnifying glass then. But that still doesn't provide us with a cutoff between "can" and "can't" time periods.

Quote
There is not just a single step from modern language to PIE, it already involves decades of work and layers upon layers of reconstructions and uncertainties. Going from PIE to any hypothetical earlier superfamily is likewise going to require many layers of reconstructions, it's not going to be one single swift step.
I agree. And this is the weakest part of Ruhlen's approach, just skimming the surface of modern languages. It doesn't mean we "can't" go back farther, just that it would be hard to do so. It might be impossible, but this just means it is hard.

Quote
As Campbell mentioned in his critique, the time depth of PIE is around 6,000 years, and to find any relation to Proto-Uralic (probably the nearest and most likely candidate) to form Proto-Indo-Uralic one might very well add another 6,000 years worth of change. At least PIE and PU are reconstructed from attested data points which "document" the changes over time; PIU on the other hand would be entirely reconstructed from extrapolated data points. Even further back and you have extrapolated data points from extrapolated data points from extrapolated data points ... and so on.
Indeed. And what's, technically speaking, wrong with that?
It's obviously a lot less reliable than something easier, but that's why these hard questions are interesting. We might be able to come up with a good theory about these things. We might not.

To me, a very interesting question is just how far back we can push these limits. I think it's crazy to start at 100,000 years ago. But I would be very interested in exactly the question you pose: what's just before PIE? However, to answer that question we need to work with many complex details of PIE itself (and other proto-languages), some of which are still being worked out. I think it's incredibly hard but not necessarily impossible.

Another major issue here is the rate of change. While 6,000 years of PIE might show a lot of change, maybe 6,000 more years before that would not. There does seem to be evidence that intense language contact increases the rate of change, and this is exactly what happened to make IE spread out so much. Before that it may have been relatively unchanging for 6,000 years. If that is the case, then going back farther would be relatively easier, helping us to make up for some of the limited data.
« Last Edit: June 26, 2014, 03:44:46 AM by djr33 »

#### freknu

• Forum Regulars
• Serious Linguist
• Posts: 396
• Country:
• Ostrobothnian (Norse)
##### Re: Bengtson & Ruhlen, Global Etymology
« Reply #38 on: June 26, 2014, 04:12:41 AM »
To summarize my position: I'm not at all advocating Ruhlen's method. But I want to question the specific arguments against it. I think pushing these limits back is a very interesting topic, and I'm far from convinced we'll find some kind of hard limit at, for example, 10,000 years. Instead, I think it will become increasingly difficult to push it back further and further. But I see no reason why we cannot continue to push that limit back, very slowly, with continued research.

No one, absolutely no one has been arguing that it is a static and immovable limit, that was the whole point of my attempt at an analogy — it is dynamic and movable. Hence according to the properties of your current set of data and understanding you approach a statistical limit where any result is pretty much indistinguishable from noise — pure chance. It is entirely dependent upon your current set of data and understanding, increase the set and the circumstances are no longer equal and the previous limits no longer apply. Hence it is always possible to push it farther and farther back, provided that your set of data and understanding allow this.

Quote
Scientifically, there is no evidence to support the notion that he could complete said task. If you have evidence to the contrary, you are free to prove how he could do it — the burden of proof is on you.
Scientifically, we only disprove (falsify) things. So the burden of proof is on proving that Ruhlen cannot do this-- otherwise it's just hand-waving, which is what I've been saying.

Que!? The burden of proof is on proving that Ruhlen's material is valid ... the bloody hell :/ It's his job to prove his claim, it's not my bloody job to prove it wrong. Not being able to disprove something does not make it correct, it only makes it unfalsifiable.

Another major issue here is the rate of change. While 6,000 years of PIE might show a lot of change, maybe 6,000 more years before that would not. There does seem to be evidence that intense language contact increases the rate of change, and this is exactly what happened to make IE spread out so much. Before that it may have been relatively unchanging for 6,000 years. If that is the case, then going back farther would be relatively easier, helping us to make up for some of the limited data.

Rate of change is certainly and intriguing question, but PIE would still have had to change considerably (as would the other families) to allow for a merging into a superfamily. It may very well be much slower than currently, but that doesn't exactly help, as it only means there was a particularly stable pre-PIE stage — it doesn't give you a get-out-of-jail-free card.

It also ignores the fact that apart from a very few select words of core vocabulary, there may simply not be any cognates available. Going from modern language to PIE you are left with a thousand or so roots (even less if you only count strict roots, and even less if you only count known reduced roots). How many of these do you think are shared by all later branches of IE? How many do you think will be left, if hypothetically, it was possible to merge a handful of families with cognates is all families?
« Last Edit: June 26, 2014, 06:30:06 AM by freknu »

#### Daniel

• Experienced Linguist
• Posts: 1805
• Country:
• English
##### Re: Bengtson & Ruhlen, Global Etymology
« Reply #39 on: June 26, 2014, 05:48:35 AM »
Quote
No one, absolutely no one has been arguing that it is a static and immovable limit, that was the whole point of my attempt at an analogy — it is dynamic and movable. Hence according to the properties of your current set of data and understanding you approach a statistical limit where any result is pretty much indistinguishable from noise — pure chance. It is entirely dependent upon your current set of data and understanding, increase the set and the circumstances are no longer equal and the previous limits no longer apply. Hence it is always possible to push it farther and farther back, provided that your set of data and understanding allow this.
This still doesn't address then why working on PIE or Proto-PIE is acceptable, while Proto-World is not. That categorical distinction is not yet supported.

Quote
Que!? The burden of proof is on proving that Ruhlen's material is valid ... the bloody hell :/ It's his job to prove his claim, it's not my bloody job to prove it wrong. Not being able to disprove something does not make it correct, it only makes it unfalsifiable.
Of course-- you can show that it's unfalsifiable (and thus unscientific) as well. I didn't mean to suggest otherwise.
But to be fair to Ruhlen, it really isn't possible to prove it correct or prove that he can really reconstruct Proto-World. It's only possible to falsify, or to show that it is unfalsifiable.
Just because an approach seems strange doesn't mean we can dismiss it (except from a practical "I don't want to do that personally" perspective), unless we can falsify it or demonstrate unfalsifiability.

Quote
Rate of change is certainly and intriguing question, but PIE would still have had to change considerably (as would the other families) to allow for a merging into a superfamily. It may very well be much slower than currently, but that doesn't exactly help, as it only means there was a particularly stable pre-PIE stage — it doesn't give you a get-out-of-jail-free card.
That's a good point, and one of the few pieces of concrete evidence we have: we'd need to go back in time far enough and through enough changes to eliminate the diversity found in any two families to be related through these methods. Of course it's possible some variation would be eliminated via the first round of reconstruction (proto-languages for each) but there would still be a good bit to account for.

Quote
It also ignores the fact that appart from a very few select words of core vocabulary, there may simply not be any cognates available. Going from modern language to PIE you are left with a thousand or so roots (even less if you only count strict roots, and even less if you only count known reduced roots). How many of these do you think are shared by all later branches of IE? How many do you think will be left, if hypothetically, it was possible to merge a handful of families with cognates is all families?
This gets us into more interesting questions. Ruhlen et al claim that some particular roots are more likely to survive due to frequent use.
You say 1000 in PIE. That might be because 90%+ of the vocabulary disappears over 6,000 years, or it may be because those 1000 words are the sort that stick around. I'd guess a combination. There are some issues with reconstruction, such as names for particular local tree species. Therefore, those will be eliminated. But the core 1000 may be the sort of words that would potentially stay in use for 6,000 or 12,000 years because they aren't, semantically/culturally, likely to be discarded. There's still the potential for borrowing and so forth.

In the end, this may give us a better approximation of the statistics:
0 years = 10,000+ words
6,000 years = 1,000 words
12,000  years = 100 words??
18,000 years = 10 words?
25,000 years = ~1 word?

There's a lot of guesswork in that. And we'd need to come up with supporting evidence. If that's true, then the 100,000 year time depth isn't going to work at all. But if the rate of losing words changes, perhaps at 100,000 years there could still be 10 core words left. These are unclear issues, and I have no idea how we'd hope to get data to tell one way or the other.

----
Also, importantly, I think we need to determine one more thing:
Aside from time-depth, what do we hope to do at that time-depth? I can think of a few goals:
1) Show relatedness of languages.
2) Reconstruct the proto-language.
3) Show development from proto-language to all daughter languages.

Those three tasks are increasingly difficult. At the very least I imagine we can potentially make great progress toward (1) even significantly earlier than PIE. Beyond that, it's much less likely. And for (3) we still have a lot of work to do for PIE, though chunks of (2) are already (reasonably convincingly) accomplished.
« Last Edit: June 26, 2014, 05:53:05 AM by djr33 »

#### MalFet

• Global Moderator
• Serious Linguist
• Posts: 282
• Country:
##### Re: Bengtson & Ruhlen, Global Etymology
« Reply #40 on: June 26, 2014, 06:09:56 AM »
Quote
If I try to throw a quarter into a cup, the probability that I will be successful decreases as the cup gets farther away from me. This decrease is a gradient change. If the cup is sitting on the moon, however, it's pretty darn categorical that I'm not going to land a quarter in it.
That's exactly the sort of hand waving that I'd like to avoid. It's an unscientific argument against what you're claiming is an unscientific approach.

Again, I agree with you. This is all intuitive and Ruhlen is looking way too early. But I don't know that for scientific reasons.

Scientifically, all I know is that you almost certainly won't hit the cup. But you might.

Quote
The material on transformation chains, in particular, should make it very clear why Ruhlen's claims sit a few million miles north of this notional "hard limit" that you keep wanting to locate.
So let's, for argument's sake, assume that the hard limit is somewhere between 1,000 and 50,000 years ago, still far from the reconstructions Ruhlen proposes. How do we establish with relative certainty that the limit is indeed within that window?

With the statistical entropy metrics I've been referencing throughout this thread. Some of the math depends on how much contextual phonology you're willing to bake into your model, but nothing from structuralism is going to get you much past 2-3 postulated intermediate states. Ruhlen is working with an arbitrarily large number. Alternately, you can use a purely stochastic model like the one jkpate linked to earlier for long reach but less specificity, but Ruhlen is most certainly not doing the legwork necessary for that either.

As I've said, any good textbook on historical linguistics, information theory, or plain ol' statistics will cover all this for you. I'm not sure why you're so willing to dismiss all that out of hand as "unscientific" when you seem not to know the first thing about it, but that's your choice. Perhaps you just like throwing quarters at the moon.

The rest of us, on the other hand, realize something very important: a quarter weighs 5.67 grams, a typical human's ulnar collateral ligament will break somewhere around 80 N*m, and the escape velocity of earth is 11.2 km/s.

#### MalFet

• Global Moderator
• Serious Linguist
• Posts: 282
• Country:
##### Re: Bengtson & Ruhlen, Global Etymology
« Reply #41 on: June 26, 2014, 06:22:06 AM »
You say 1000 in PIE. That might be because 90%+ of the vocabulary disappears over 6,000 years, or it may be because those 1000 words are the sort that stick around. I'd guess a combination. There are some issues with reconstruction, such as names for particular local tree species. Therefore, those will be eliminated. But the core 1000 may be the sort of words that would potentially stay in use for 6,000 or 12,000 years because they aren't, semantically/culturally, likely to be discarded. There's still the potential for borrowing and so forth.

In the end, this may give us a better approximation of the statistics:
0 years = 10,000+ words
6,000 years = 1,000 words
12,000  years = 100 words??
18,000 years = 10 words?
25,000 years = ~1 word?

Yikes, no.

That's not how phonological change happens, not in the slightest. Exponential decay is precisely the wrong metaphor. It's all chain shifts, all the way down. You keep wanting to look at this in terms of x% change per y years, but that's a fundamental misunderstanding of the data and the methodology.

#### Daniel

• Experienced Linguist
• Posts: 1805
• Country:
• English
##### Re: Bengtson & Ruhlen, Global Etymology
« Reply #42 on: June 26, 2014, 06:40:09 AM »
Quote
Perhaps you just like throwing quarters at the moon.
Not at all. But my reasons for not doing what Ruhlen is doing are not scientific reasons: they're common sense reasons. I'd like a scientific reason to back this up.

Quote
The rest of us, on the other hand, realize something very important: a quarter weighs 5.67 grams, a typical human's ulnar collateral ligament will break somewhere around 80 N*m, and the escape velocity of earth is 11.2 km/s.
Strawman. And that's exactly the problem: in historical linguistics, we don't have any of those accurate measurements. We don't know how quickly languages change, we don't know what words are preserved and which are lost, we don't know how old language is, we have any way to test our predictions, and so forth.

Quote
With the statistical entropy metrics I've been referencing throughout this thread.
To be fair, hinting at. I asked for a reference. The closest you gave was "any historical linguistics textbook". I teach with one. I've read a handful. They certainly cover this in general terms, but they don't address the technical details at a scientific level, just descriptive. Maybe I missed it, not looking for this when I read the books, so feel free to point me in the right direction if so.

Quote
Ruhlen is working with an arbitrarily large number. Alternately, you can use a purely stochastic model like the one jkpate linked to earlier for long reach but less specificity, but Ruhlen is most certainly not doing the legwork necessary for that either.
Here I'll certainly agree-- Ruhlen is taking every liberty possible and then making some arbitrary guesses. That's a problem. But aside from throwing it out just for that, I am genuinely wondering what can be shown scientifically (unlike his methodology) to demonstrate that he's wrong to even attempt such a task. So far I haven't seen that argument.

As for jkpate's suggestion, it's interesting, but I specifically ignored that because it can't be the optimal methodology, in theory. So any weaknesses are irrelevant if there may be a better approach.

Quote
That's not how phonological change happens, not in the slightest. Exponential decay is precisely the wrong metaphor. It's all chain shifts, all the way down. You keep wanting to look at this in terms of x% change per y years, but that's a fundamental misunderstanding of the data and the methodology.
My comment was directed at freknu in terms of lexical statistics, how many words are reconstructed for PIE. I wasn't referring to phonological changes, at least not directly. And this also appears to be the explanation given by Ringe in the video I linked to earlier. Borrowing (and other kinds of lexical change) are responsible for the time-depth barrier, not (just) grammatical/phonological change.
Quote
Some of the math depends on how much contextual phonology you're willing to bake into your model, but nothing from structuralism is going to get you much past 2-3 postulated intermediate states.
Ok, and with these two comments I think we're getting somewhere: you're talking specifically about phonology, and the argument is within that context, rather than the big picture.
Extending that and rephrasing it to make sure I know what you mean...

As we go back in time and layer sound changes, they become undecidable and opaque from our perspective. Sounds change from A to B then back to A, so that from a flat (synchronic) perspective, the diachrony is flat as well, hiding all of the important changes from us. By having a small (say <50) inventory of phonemes in an average language, and by having many changes over time, we necessarily run into such problems. The result is that, much like "flattening" an image in Photoshop, we can't reconstruct the layers without all of that missing information. We're left with a narrow view.

That's an interesting perspective, and likely one that is easier to defend (statistically) than some others. The trouble is that we still don't have all of the necessary data to know how quickly sound changes occur and so forth. So we don't have a baseline or a control, and we can't really know for sure how far back we can look.

Further, there's the interesting point made (in the video, for example) that some words seem to actually look like what they used to be in PIE, at least in some cases. Selecting arbitrary examples (as in the video) isn't too convincing, but the possibility is intriguing. I believe it was freknu who posted some evidence about similarities in agreement inflections in IE and Uralic, and maybe that's the sort of place we'd find evidence.

In the end, we all agree Ruhlen is looking too far back. I just want to know the best way to show that

#### jkpate

• Forum Regulars
• Linguist
• Posts: 130
• Country:
• American English
##### Re: Bengtson & Ruhlen, Global Etymology
« Reply #43 on: June 26, 2014, 08:30:12 AM »
To me, a very interesting question is just how far back we can push these limits. I think it's crazy to start at 100,000 years ago. But I would be very interested in exactly the question you pose: what's just before PIE? However, to answer that question we need to work with many complex details of PIE itself (and other proto-languages), some of which are still being worked out. I think it's incredibly hard but not necessarily impossible.

The issue is not that the information about very ancient languages is hard to get, it's that the information just isn't there. To a first approximation we can view language change as a markov chain; a language at time t randomly changes into a language at time t+1, according to some transition kernel. The markov chain of language change may be ergodic, which essentially means that any language can eventually turn into any other language with non-zero probability. If it is ergodic, then, for large enough n, the language at time t is asymptotically statistically independent of the language at time t+n. In information-theoretic terms, the reconstruction task is sensitive to the conditional entropy of the language at time t, given the language at time t+n, which in turn is the entropy of both languages minus the entropy of the later, known language:

$H(L_{t} | L_{t+n} ) = H( L_{t} , L_{t+n} ) - H( L_{t+n} )$

However, if n is large enough that the languages are statistically independent, then we have

$H( L_{t} , L_{t+n} ) = H( L_{t} ) + H( L_{t+n} )$

So by substitution:

$H(L_{t} | L_{t+n} ) = H( L_{t} ) + H( L_{t+n} ) - H( L_{t+n} ) = H( L_{t} )$

That is, our uncertainty about the language to be reconstructed is the same, whether or not we know the later language. Our reconstruction does not depend on the evidence. Hard work can give us a better idea of what the transition kernel is (this is essentially the panchronic phonology that MalFet mentioned), but that does not address the core issue, which is the disappearance of information about earlier states. Information about the transition kernel is hard to get. Information about the state at time t is gone.

The worry djr33 raises may be implemented here by worrying about just how large n needs to be, and how to translate this into years. That's still a valid worry; as far as I know, there's no way to derive how large n needs to be (and there's a huge incentive to be able to do this for general ergodic chains). I just wanted to distinguish this case, where information is gone, from the case where information is hard to get.
« Last Edit: June 26, 2014, 03:32:29 PM by jkpate »
All models are wrong, but some are useful - George E P Box

#### MalFet

• Global Moderator
• Serious Linguist
• Posts: 282
• Country:
##### Re: Bengtson & Ruhlen, Global Etymology
« Reply #44 on: June 26, 2014, 09:55:30 AM »
Quote
The rest of us, on the other hand, realize something very important: a quarter weighs 5.67 grams, a typical human's ulnar collateral ligament will break somewhere around 80 N*m, and the escape velocity of earth is 11.2 km/s.
Strawman. And that's exactly the problem: in historical linguistics, we don't have any of those accurate measurements. We don't know how quickly languages change, we don't know what words are preserved and which are lost, we don't know how old language is, we have any way to test our predictions, and so forth.

We don't need to know how quickly language changes. We don't need to know which words are preserved and which are lost. We don't need to know how old language is. That's just not how reconstruction works because (and this is the key point!) that's not how language works.

I'm just repeating myself here, and I don't know how else to say it. jkpate provides an excellent summary of the problem in information theoretic terms. The way we do historical reconstruction is by postulating intermediate nodes in a Markov transformation chain and then comparing the resulting power of explanation against the possibility that the observed similarities came about by chance. Thanks to the techniques that jkpate talks about, we've been able to quantify this increasingly well over the last few decades (with the lovely consequence that we can now trace fainter lineages than ever before), but the core principles at stake here are as old as the hills. Heck, it was in exactly these terms that Saussure got this whole field started with his postulated (and later vindicated) laryngeal consonants.

A critique of Ruhlen in scientific terms is simply that his conclusions are not the product of a scientific methodology. He's not, in short, doing what the bolded sentence above requires. Instead, he's gazing at a bowl of tea leaves and telling the world what he sees. He simply does not have access to the information necessary to make the claims he's making.

Quote
With the statistical entropy metrics I've been referencing throughout this thread.
To be fair, hinting at. I asked for a reference. The closest you gave was "any historical linguistics textbook".

Nonsense. I pointed you towards Juliette Blevens and George van Driem, and told you very specifically that Anthony Fox's work on chain shifts in the history of reconstruction should fill in a critical piece that you seem to be missing. I'm happy to provide more, but first I'd have to know why those didn't work for you as starting places. Until then, if you haven't done the work yourself, haven't read the literature, and won't take my word for it, I'm not really sure what else there is to say. I can't divine this all from first principles for you.