## 80 Reputation

0 years, 250 days

## Maple procedure declaration syntax...

According to  Maple Programming Guide, Sec. 6.2 Defining and Executing Procedures, the procedures in Maple are declared using the following syntax (6 Procedures - Maple Help (maplesoft.com)):

 proc( parameterDeclarations ) :: returnType; description shortDescription; option optionSequence; local localVariableDeclarations; global globalVariableDeclarations; statementSequence end proc

So all local variable declarations take place before the statement sequence. After variables are declared local, they can be used (defined) in the statement sequence. In this case, declaring variable local inside an if-branch (if statement/expression), probably, just breaks this syntax.

## The problem is specific to calling latex...

I reproduced this error on my side. The problems looks to be specific to calling latex( 1.0 * a^(1/2)) (with literal 1.0). It  somehow does not like a combination of a floting point 1.0 times some symbolic expression with ^ (power). Interestingly, latex( 2.0 * a^(1/2)) works.

 > restart;
 > interface(version);
 (1)
 > latex(1.0 * sqrt(a^2 + b^2));
 > latex(1 * sqrt(a^2 + b^2));
 \sqrt{a^{2}+b^{2}}
 > latex(1.0 * sqrt(a));
 > latex(1.0 * sqrt(2));
 > latex(1.0 * sqrt(2.0));
 1.41421
 > latex(1.0 * a^(1/3));
 > latex(1.0 * a^{1.0/3.0});
 a^{\left\{ 0.3333333333\right\}}
 > latex(2.0 * sqrt(a));
 2.0 \sqrt{a}
 >

## It looks like you need to impose assumpt...

It looks like you need to impose assumptions on on functions f(x) and g(x). The following example works for me in Maple2023.2:

 > restart; assume(g(x) in RealRange(-infinity, infinity) and f(x) in RealRange(-infinity, infinity)); is(g(x)^2 + f(x)^4, 'nonnegative'); is(g(x)^2 - f(x)^4, 'nonnegative');
 (1)
 >

## Another option is to use evalc and sim...

This works for me in Maple 2022.2:

expr := (l * h * t * sqrt(4 * k^2 * a^2 * t^2 + m^2 )) / (sqrt(2 * I * k * t * a + m) * sqrt(-2 * I * k * t * a + m) * m);

simplify(evalc(expr)) assuming m >0 and k > 0 and a > 0 and t > 0;

It looks like just using eval is not enough here, and using evalc forces it to simplify real and imaginary parts in the square roots.

## I guess the difference between comparing...

I guess the difference between comparing List and Vectors comes from mutability vs immutability of these data structures. Lists are immutable, and Vectors, Matrices, and Arrays are mutable. According to the Maple's help (3 Maple Expressions - Maple Help (maplesoft.com)):

In general, expressions are compared for equality according to their memory address. That is, two expressions are considered equal in a Boolean context if they have the same address in memory.

Vectors are mutable so Tv and Sv have different memory addresses and evalb(Tv = Sv) returns false (it checks if they both reference the same location in the memory). To compare Vectors and Matrices for equalisty, there is LinearAlgebra:-Equal() method which compares them in mathematical sense, so that  LinearAlgebra:-Equal(Tv, Sv) = true.

Also this may help: 4 Basic Data Structures - Maple Help (maplesoft.com) section "Testing If Two Arrays Are Equal":

For Arrays, there are two notions of equality: do two references point to the same Array, or are they different Arrays that store the same values. To determine if two references refer to the same Array, use = and evalb. To test if two Arrays contain the same elements, use the EqualEntries command.

 Page 1 of 1
﻿