def strip
      meta_vars1, meta_values1, var1 = @index1.strip
      meta_vars2, meta_values2, var2 = @index2.strip
      vars1, values1, term1 =
        @value.subst( @index1 => var1, @index2 => var2 ).strip
      if @initial
        vars2, values2, term2 = @initial.strip
      else
        vars2, values2, term2 = [], [], nil
      end
      vars3, values3, term3 = @block.strip
      return vars1 + meta_vars1 + meta_vars2 + vars2 + vars3,
        values1 + meta_values1 + meta_values2 + values2 + values3,
        Diagonal.new( term1, @index0, var1, var2, term2, term3, @var1, @var2 )
    end
def strip
      meta_vars1, meta_values1, var1 = @index1.strip
      meta_vars2, meta_values2, var2 = @index2.strip
      vars1, values1, term1 =
        @value.subst( @index1 => var1, @index2 => var2 ).strip
      if @initial
        vars2, values2, term2 = @initial.strip
      else
        vars2, values2, term2 = [], [], nil
      end
      vars3, values3, term3 = @block.strip
      return vars1 + meta_vars1 + meta_vars2 + vars2 + vars3,
        values1 + meta_values1 + meta_values2 + values2 + values3,
        Diagonal.new( term1, @index0, var1, var2, term2, term3, @var1, @var2 )
    end
Strip of all values

 Split up into variables, values, and a term where all values have been
 replaced with variables.

 @return [Array<Array,Node>] Returns an array of variables, an array of
 values, and the term based on variables.

 @private