package org.matheclipse.core.integrate.rubi42;
import static org.matheclipse.core.expression.F.*;
import static org.matheclipse.core.integrate.rubi42.UtilityFunctionCtors.*;
import static org.matheclipse.core.integrate.rubi42.UtilityFunctions.*;
import org.matheclipse.core.interfaces.IAST;
import org.matheclipse.core.interfaces.IExpr;
import org.matheclipse.core.interfaces.ISymbol;
/**
* UtilityFunctions rules from the Rubi -
* rule-based integrator.
*
*/
public class UtilityFunctions2 {
public static IAST RULES = List(
SetDelayed(AbsurdNumberQ($p(u)),
RationalQ(u)),
SetDelayed(AbsurdNumberQ(Power($p(u),$p(v))),
And(And(RationalQ(u),Greater(u,C0)),FractionQ(v))),
SetDelayed(AbsurdNumberQ(Times($p(u),$p(v))),
And(AbsurdNumberQ(u),AbsurdNumberQ(v))),
SetDelayed(AbsurdNumberFactors($p(u)),
If(AbsurdNumberQ(u),u,If(ProductQ(u),Map($s("Integrate::AbsurdNumberFactors"),u),NumericFactor(u)))),
SetDelayed(NonabsurdNumberFactors($p(u)),
If(AbsurdNumberQ(u),C1,If(ProductQ(u),Map($s("Integrate::NonabsurdNumberFactors"),u),NonnumericFactors(u)))),
SetDelayed(FactorAbsurdNumber($p(m)),
If(RationalQ(m),FactorInteger(m),If(PowerQ(m),Map(Function(List(Part(Slot1,C1),Times(Part(Slot1,C2),Part(m,C2)))),FactorInteger(Part(m,C1))),CombineExponents(Sort(Flatten(Map($s("Integrate::FactorAbsurdNumber"),Apply($s("List"),m)),C1),Function(Less(Part(Slot1,C1),Part(Slot2,C1)))))))),
SetDelayed(CombineExponents($p("lst")),
If(Less(Length($s("lst")),C2),$s("lst"),If(Equal(Part($s("lst"),C1,C1),Part($s("lst"),C2,C1)),CombineExponents(Prepend(Drop($s("lst"),C2),List(Part($s("lst"),C1,C1),Plus(Part($s("lst"),C1,C2),Part($s("lst"),C2,C2))))),Prepend(CombineExponents(Rest($s("lst"))),First($s("lst")))))),
SetDelayed(AbsurdNumberGCD($ps("seq")),
Module(List(Set($s("lst"),List($s("seq")))),If(Equal(Length($s("lst")),C1),First($s("lst")),AbsurdNumberGCDList(FactorAbsurdNumber(First($s("lst"))),FactorAbsurdNumber(Apply($s("Integrate::AbsurdNumberGCD"),Rest($s("lst")))))))),
SetDelayed(AbsurdNumberGCDList($p("lst1"),$p("lst2")),
If(SameQ($s("lst1"),List()),Apply($s("Times"),Map(Function(Power(Part(Slot1,C1),Min(Part(Slot1,C2),C0))),$s("lst2"))),If(SameQ($s("lst2"),List()),Apply($s("Times"),Map(Function(Power(Part(Slot1,C1),Min(Part(Slot1,C2),C0))),$s("lst1"))),If(Equal(Part($s("lst1"),C1,C1),Part($s("lst2"),C1,C1)),If(LessEqual(Part($s("lst1"),C1,C2),Part($s("lst2"),C1,C2)),Times(Power(Part($s("lst1"),C1,C1),Part($s("lst1"),C1,C2)),AbsurdNumberGCDList(Rest($s("lst1")),Rest($s("lst2")))),Times(Power(Part($s("lst1"),C1,C1),Part($s("lst2"),C1,C2)),AbsurdNumberGCDList(Rest($s("lst1")),Rest($s("lst2"))))),If(Less(Part($s("lst1"),C1,C1),Part($s("lst2"),C1,C1)),If(Less(Part($s("lst1"),C1,C2),C0),Times(Power(Part($s("lst1"),C1,C1),Part($s("lst1"),C1,C2)),AbsurdNumberGCDList(Rest($s("lst1")),$s("lst2"))),AbsurdNumberGCDList(Rest($s("lst1")),$s("lst2"))),If(Less(Part($s("lst2"),C1,C2),C0),Times(Power(Part($s("lst2"),C1,C1),Part($s("lst2"),C1,C2)),AbsurdNumberGCDList($s("lst1"),Rest($s("lst2")))),AbsurdNumberGCDList($s("lst1"),Rest($s("lst2"))))))))),
SetDelayed(NormalizeIntegrand($p(u),$p(x,SymbolHead)),
Module(List(Set(v,NormalizeLeadTermSigns(NormalizeIntegrandAux(u,x)))),If(SameQ(v,NormalizeLeadTermSigns(u)),u,v))),
SetDelayed(NormalizeIntegrandAux($p(u),$p(x,SymbolHead)),
If(SumQ(u),Map(Function(NormalizeIntegrandAux(Slot1,x)),u),If(ProductQ(u),Map(Function(NormalizeIntegrandFactor(Slot1,x)),u),NormalizeIntegrandFactor(u,x)))),
SetDelayed(NormalizeIntegrandFactor($p(u),$p(x,SymbolHead)),
Module(List($s("bas"),$s("deg"),$s("min")),If(And(PowerQ(u),FreeQ(Part(u,C2),x)),CompoundExpression(CompoundExpression(Set($s("bas"),NormalizeIntegrandFactorBase(Part(u,C1),x)),Set($s("deg"),Part(u,C2))),If(And(IntegerQ($s("deg")),SumQ($s("bas"))),If(MapAnd(Function(MonomialQ(Slot1,x)),$s("bas")),CompoundExpression(Set($s("min"),MinimumMonomialExponent($s("bas"),x)),Times(Power(x,Times($s("min"),$s("deg"))),Power(Map(Function(Simplify(Times(Slot1,Power(Power(x,$s("min")),CN1)))),$s("bas")),$s("deg")))),Power($s("bas"),$s("deg"))),Power($s("bas"),$s("deg")))),If(And(PowerQ(u),FreeQ(Part(u,C1),x)),Power(Part(u,C1),NormalizeIntegrandFactorBase(Part(u,C2),x)),CompoundExpression(Set($s("bas"),NormalizeIntegrandFactorBase(u,x)),If(SumQ($s("bas")),If(MapAnd(Function(MonomialQ(Slot1,x)),$s("bas")),CompoundExpression(Set($s("min"),MinimumMonomialExponent($s("bas"),x)),Times(Power(x,$s("min")),Map(Function(Times(Slot1,Power(Power(x,$s("min")),CN1))),$s("bas")))),$s("bas")),$s("bas"))))))),
SetDelayed(NormalizeIntegrandFactorBase(Times(Power($p(x),$p(m,true)),$p(u)),$p(x,SymbolHead)),
Condition(NormalizeIntegrandFactorBase(Map(Function(Times(Power(x,m),Slot1)),u),x),And(FreeQ(m,x),SumQ(u)))),
SetDelayed(NormalizeIntegrandFactorBase($p(u),$p(x,SymbolHead)),
If(BinomialQ(u,x),If(BinomialMatchQ(u,x),u,ExpandToSum(u,x)),If(TrinomialQ(u,x),If(TrinomialMatchQ(u,x),u,ExpandToSum(u,x)),If(ProductQ(u),Map(Function(NormalizeIntegrandFactor(Slot1,x)),u),If(And(PolynomialQ(u,x),LessEqual(Exponent(u,x),C4)),ExpandToSum(u,x),If(SumQ(u),Module(List(Set(v,TogetherSimplify(u))),If(Or(Or(SumQ(v),MatchQ(v,Condition(Times(Power(x,$p(m,true)),$p(w)),And(FreeQ(m,x),SumQ(w))))),Greater(LeafCount(v),Plus(LeafCount(u),C2))),UnifySum(u,x),NormalizeIntegrandFactorBase(v,x))),Map(Function(NormalizeIntegrandFactor(Slot1,x)),u))))))),
SetDelayed(NormalizeLeadTermSigns($p(u)),
Module(List(Set($s("lst"),If(ProductQ(u),Map($s("Integrate::SignOfFactor"),u),SignOfFactor(u)))),If(Equal(Part($s("lst"),C1),C1),Part($s("lst"),C2),AbsorbMinusSign(Part($s("lst"),C2))))),
SetDelayed(AbsorbMinusSign(Times($p(u,true),$p(v,$s("Plus")))),
Times(u,CN1,v)),
SetDelayed(AbsorbMinusSign(Times(Power($p(v,$s("Plus")),$p(m)),$p(u,true))),
Condition(Times(u,Power(Times(CN1,v),m)),OddQ(m))),
SetDelayed(AbsorbMinusSign($p(u)),
Times(CN1,u)),
SetDelayed(NormalizeSumFactors($p(u)),
If(Or(Or(Or(AtomQ(u),SameQ(Head(u),$s("If"))),SameQ(Head(u),$s("Int"))),HeldFormQ(u)),u,If(ProductQ(u),$(Function(Times(Part(Slot1,C1),Part(Slot1,C2))),SignOfFactor(Map($s("Integrate::NormalizeSumFactors"),u))),Map($s("Integrate::NormalizeSumFactors"),u)))),
SetDelayed(SignOfFactor($p(u)),
If(Or(And(RationalQ(u),Less(u,C0)),And(SumQ(u),Less(NumericFactor(First(u)),C0))),List(CN1,Times(CN1,u)),If(And(And(IntegerPowerQ(u),SumQ(Part(u,C1))),Less(NumericFactor(First(Part(u,C1))),C0)),List(Power(CN1,Part(u,C2)),Power(Times(CN1,Part(u,C1)),Part(u,C2))),If(ProductQ(u),Map($s("Integrate::SignOfFactor"),u),List(C1,u))))),
SetDelayed(NormalizePowerOfLinear($p(u),$p(x,SymbolHead)),
Module(List(Set(v,FactorSquareFree(u))),If(And(And(PowerQ(v),LinearQ(Part(v,C1),x)),FreeQ(Part(v,C2),x)),Power(ExpandToSum(Part(v,C1),x),Part(v,C2)),ExpandToSum(v,x)))),
SetDelayed(SimplifyIntegrand($p(u),$p(x,SymbolHead)),
Module(List(v),CompoundExpression(Set(v,NormalizeLeadTermSigns(NormalizeIntegrandAux(Simplify(u),x))),If(Less(LeafCount(v),Times(QQ(4L,5L),LeafCount(u))),v,If(UnsameQ(v,NormalizeLeadTermSigns(u)),v,u))))),
SetDelayed(SimplifyTerm($p(u),$p(x,SymbolHead)),
Module(List(Set(v,Simplify(u)),w),CompoundExpression(Set(w,Together(v)),NormalizeIntegrand(If(Less(LeafCount(v),LeafCount(w)),w,w),x)))),
SetDelayed(TogetherSimplify($p(u)),
TimeConstrained(Module(List(v),CompoundExpression(Set(v,Together(Simplify(Together(u)))),TimeConstrained(FixSimplify(v),Times(C1D3,$s("TimeLimit")),v))),$s("TimeLimit"),u)),
SetDelayed(SmartSimplify($p(u)),
TimeConstrained(Module(List(v,w),CompoundExpression(CompoundExpression(CompoundExpression(CompoundExpression(CompoundExpression(Set(v,Simplify(u)),Set(w,Factor(v))),Set(v,If(Less(LeafCount(w),LeafCount(v)),w,v))),Set(v,If(And(NotFalseQ(Set(w,FractionalPowerOfSquareQ(v))),FractionalPowerSubexpressionQ(u,w,Expand(w))),SubstForExpn(v,w,Expand(w)),v))),Set(v,FactorNumericGcd(v))),TimeConstrained(FixSimplify(v),Times(C1D3,$s("TimeLimit")),v))),$s("TimeLimit"),u)),
SetDelayed(Simp($p(u),$p(x)),
TimeConstrained(NormalizeSumFactors(SimpHelp(u,x)),$s("TimeLimit"),u)),
SetDelayed(SimpHelp(Power(E,Times(Plus(Times(Log($p(a)),$p(v,true)),$p(w)),$p(u,true))),$p(x)),
Times(Power(a,Times(u,v)),SimpHelp(Power(E,Times(u,w)),x))),
SetDelayed(SimpHelp($p(u),$p(x)),
If(AtomQ(u),u,If(Or(Or(SameQ(Head(u),$s("If")),SameQ(Head(u),$s("Int"))),HeldFormQ(u)),u,If(FreeQ(u,x),Module(List(Set(v,SmartSimplify(u))),If(LessEqual(LeafCount(v),LeafCount(u)),v,u)),If(ProductQ(u),Module(List(Set(v,FreeFactors(u,x)),Set(w,NonfreeFactors(u,x))),CompoundExpression(CompoundExpression(CompoundExpression(CompoundExpression(Set(v,Times(NumericFactor(v),SmartSimplify(Times(NonnumericFactors(v),Power(x,C2))),Power(Power(x,C2),CN1))),Set(w,If(ProductQ(w),Map(Function(SimpHelp(Slot1,x)),w),SimpHelp(w,x)))),Set(w,FactorNumericGcd(w))),Set(v,MergeFactors(v,w))),If(ProductQ(v),Map(Function(SimpFixFactor(Slot1,x)),v),v))),If(SumQ(u),If(And(PolynomialQ(u,x),LessEqual(Exponent(u,x),C0)),SimpHelp(Coefficient(u,x,C0),x),If(And(And(PolynomialQ(u,x),Equal(Exponent(u,x),C1)),SameQ(Coefficient(u,x,C0),C0)),Times(SimpHelp(Coefficient(u,x,C1),x),x),Module(List(Set(v,C0),Set(w,C0)),CompoundExpression(CompoundExpression(CompoundExpression(Scan(Function(If(FreeQ(Slot1,x),Set(v,Plus(Slot1,v)),Set(w,Plus(Slot1,w)))),u),Set(v,SmartSimplify(v))),Set(w,If(SumQ(w),Map(Function(SimpHelp(Slot1,x)),w),SimpHelp(w,x)))),Plus(v,w))))),Map(Function(SimpHelp(Slot1,x)),u))))))),
SetDelayed(FractionalPowerOfSquareQ($p(u)),
If(AtomQ(u),False,If(And(FractionalPowerQ(u),MatchQ(Part(u,C1),Condition(Times($p(a,true),Power(Plus($p(b),$p(c)),C2)),NonsumQ(a)))),Part(u,C1),Module(List($s("tmp")),Catch(CompoundExpression(Scan(Function(If(NotFalseQ(Set($s("tmp"),FractionalPowerOfSquareQ(Slot1))),Throw($s("tmp")))),u),False)))))),
SetDelayed(FractionalPowerSubexpressionQ($p(u),$p(v),$p(w)),
If(AtomQ(u),False,If(And(FractionalPowerQ(u),PositiveQ(Times(Part(u,C1),Power(w,CN1)))),And(Not(SameQ(Part(u,C1),v)),Less(LeafCount(w),Times(C3,LeafCount(v)))),Catch(CompoundExpression(Scan(Function(If(FractionalPowerSubexpressionQ(Slot1,v,w),Throw(True))),u),False))))),
SetDelayed(FixSimplify(Times(Complex(C0,$p(a)),Power(Plus(Times(Complex(C0,$p(b)),$p(v,true)),$p(w)),$p(n,true)),$p(u,true))),
Condition(Times(Power(CN1,Times(C1D2,Plus(n,C1))),a,u,FixSimplify(Power(Plus(Times(b,v),Times(CN1,CI,w)),n))),OddQ(n))),
SetDelayed(FixSimplify(Times(Power($p(u),$p(m,true)),Power($p(v),$p(n)),$p(w,true))),
Condition(Module(List(Set(z,Simplify(Times(Power(u,Times(m,Power(GCD(m,n),CN1))),Power(v,Times(n,Power(GCD(m,n),CN1))))))),Condition(FixSimplify(Times(w,Power(z,GCD(m,n)))),Or(AbsurdNumberQ(z),SqrtNumberSumQ(z)))),And(And(And(And(And(RationalQ(m),FractionQ(n)),SqrtNumberSumQ(u)),SqrtNumberSumQ(v)),PositiveQ(u)),PositiveQ(v)))),
SetDelayed(FixSimplify(Times(Power($p(u),$p(m,true)),Power($p(v),$p(n)),$p(w,true))),
Condition(Module(List(Set(z,Simplify(Times(Power(u,Times(m,Power(GCD(m,Times(CN1,n)),CN1))),Power(v,Times(n,Power(GCD(m,Times(CN1,n)),CN1))))))),Condition(FixSimplify(Times(w,Power(z,GCD(m,Times(CN1,n))))),Or(AbsurdNumberQ(z),SqrtNumberSumQ(z)))),And(And(And(And(And(RationalQ(m),FractionQ(n)),SqrtNumberSumQ(u)),SqrtNumberSumQ(Power(v,CN1))),PositiveQ(u)),PositiveQ(v)))),
SetDelayed(FixSimplify(Times(Power($p(u),$p(m,true)),Power($p(v),$p(n)),$p(w,true))),
Condition(Module(List(Set(z,Simplify(Times(Power(Times(CN1,u),Times(m,Power(GCD(m,n),CN1))),Power(v,Times(n,Power(GCD(m,n),CN1))))))),Condition(FixSimplify(Times(CN1,w,Power(z,GCD(m,n)))),Or(AbsurdNumberQ(z),SqrtNumberSumQ(z)))),And(And(And(And(And(IntegerQ(m),FractionQ(n)),SqrtNumberSumQ(u)),SqrtNumberSumQ(v)),NegativeQ(u)),PositiveQ(v)))),
SetDelayed(FixSimplify(Times(Power($p(u),$p(m,true)),Power($p(v),$p(n)),$p(w,true))),
Condition(Module(List(Set(z,Simplify(Times(Power(Times(CN1,u),Times(m,Power(GCD(m,Times(CN1,n)),CN1))),Power(v,Times(n,Power(GCD(m,Times(CN1,n)),CN1))))))),Condition(FixSimplify(Times(CN1,w,Power(z,GCD(m,Times(CN1,n))))),Or(AbsurdNumberQ(z),SqrtNumberSumQ(z)))),And(And(And(And(And(IntegerQ(m),FractionQ(n)),SqrtNumberSumQ(u)),SqrtNumberSumQ(Power(v,CN1))),NegativeQ(u)),PositiveQ(v)))),
SetDelayed(FixSimplify(Times(Power(Plus(Times(Power($p(b),$p(n)),$p(v,true)),$p(u)),$p(p,true)),Power($p(a),$p(m)),$p(w,true))),
Condition(Module(List(Set(c,Simplify(Times(Power(a,Times(m,Power(p,CN1))),Power(b,n))))),Condition(FixSimplify(Times(w,Power(Plus(Times(Power(a,Times(m,Power(p,CN1))),u),Times(c,v)),p))),RationalQ(c))),And(And(And(RationalQ(a,b,m,n),Greater(a,C0)),Greater(b,C0)),PositiveIntegerQ(p)))),
SetDelayed(FixSimplify(Times(Plus(Times(Power($p(a),$p(n)),$p(u,true)),Times(Power($p(b),$p(p,true)),$p(v,true))),Power($p(a),$p(m,true)),$p(w,true))),
Condition(FixSimplify(Times(w,Power(a,Plus(m,n)),Plus(u,Times(Power(CN1,p),Power(a,Plus(p,Times(CN1,n))),v)))),And(And(And(And(RationalQ(m),FractionQ(n)),IntegerQ(p)),Greater(Plus(p,Times(CN1,n)),C0)),SameQ(Plus(a,b),C0)))),
SetDelayed(FixSimplify(Times(Power(Plus($p(a),$p(b)),$p(m,true)),Power(Plus($p(c),$p(d)),$p(n)),$p(w,true))),
Condition(Module(List(Set(q,Simplify(Times(b,Power(d,CN1))))),Condition(FixSimplify(Times(w,Power(q,m),Power(Plus(c,d),Plus(m,n)))),FreeQ(q,$s("Plus")))),And(And(IntegerQ(m),Not(IntegerQ(n))),ZeroQ(Plus(Times(b,c),Times(CN1,a,d)))))),
SetDelayed(FixSimplify(Times(Power(Plus(Times(Power($p(a),$p(m,true)),$p(u,true)),Times(Power($p(a),$p(n,true)),$p(v,true))),$p(t,true)),$p(w,true))),
Condition(FixSimplify(Times(Power(a,Times(m,t)),w,Power(Plus(u,Times(Power(a,Plus(n,Times(CN1,m))),v)),t))),And(And(And(Not(RationalQ(a)),IntegerQ(t)),RationalQ(m,n)),And(Less(C0,m),LessEqual(m,n))))),
SetDelayed(FixSimplify(Times(Power(Plus(Times(Power($p(a),$p(m,true)),$p(u,true)),Times(Power($p(a),$p(n,true)),$p(v,true)),Times(Power($p(a),$p(p,true)),$p(z,true))),$p(t,true)),$p(w,true))),
Condition(FixSimplify(Times(Power(a,Times(m,t)),w,Power(Plus(u,Times(Power(a,Plus(n,Times(CN1,m))),v),Times(Power(a,Plus(p,Times(CN1,m))),z)),t))),And(And(And(Not(RationalQ(a)),IntegerQ(t)),RationalQ(m,n,p)),LessEqual(And(Less(C0,m),LessEqual(m,n)),p)))),
SetDelayed(FixSimplify(Times(Power(Plus(Times(Power($p(a),$p(m,true)),$p(u,true)),Times(Power($p(a),$p(n,true)),$p(v,true)),Times(Power($p(a),$p(q,true)),$p(y,true)),Times(Power($p(a),$p(p,true)),$p(z,true))),$p(t,true)),$p(w,true))),
Condition(FixSimplify(Times(Power(a,Times(m,t)),w,Power(Plus(u,Times(Power(a,Plus(n,Times(CN1,m))),v),Times(Power(a,Plus(p,Times(CN1,m))),z),Times(Power(a,Plus(q,Times(CN1,m))),y)),t))),And(And(And(Not(RationalQ(a)),IntegerQ(t)),RationalQ(m,n,p)),LessEqual(LessEqual(And(Less(C0,m),LessEqual(m,n)),p),q)))),
SetDelayed(FixSimplify(Times(Plus(Times(Power($p(v,$s("Plus")),C1D2),$p(a,true)),Times(Power($p(v),C1D2),$p(b,true)),Times(Power($p(v),C1D2),$p(c,true)),Times(Power($p(v),C1D2),$p(d,true)),$p(u,true)),$p(w,true))),
FixSimplify(Times(w,Plus(u,Times(FixSimplify(Plus(a,b,c,d)),Sqrt(v)))))),
SetDelayed(FixSimplify(Times(Plus(Times(Power($p(v,$s("Plus")),C1D2),$p(a,true)),Times(Power($p(v),C1D2),$p(b,true)),Times(Power($p(v),C1D2),$p(c,true)),$p(u,true)),$p(w,true))),
FixSimplify(Times(w,Plus(u,Times(FixSimplify(Plus(a,b,c)),Sqrt(v)))))),
SetDelayed(FixSimplify(Times(Plus(Times(Power($p(v,$s("Plus")),C1D2),$p(a,true)),Times(Power($p(v),C1D2),$p(b,true)),$p(u,true)),$p(w,true))),
FixSimplify(Times(w,Plus(u,Times(FixSimplify(Plus(a,b)),Sqrt(v)))))),
SetDelayed(FixSimplify(Times(Power(Times(Plus(Times(Power($p(a),C1D2),$p(d,true)),$p(c)),$p(b,true)),C1D2),Power($p(a),$p(m)),$p(u,true))),
Condition(Times(Sqrt(Together(Times(b,Plus(Times(c,Power(a,Times(C2,m))),Times(d,Power(a,Plus(Times(C2,m),C1D2))))))),FixSimplify(u)),And(And(RationalQ(a,b,c,d,m),Greater(a,C0)),Equal(Denominator(m),C4)))),
SetDelayed(FixSimplify(Times(Power(Times(Plus(Times(Power($p(a),C1D2),$p(d,true)),$p(c)),$p(b,true)),CN1D2),Power($p(a),$p(m)),$p(u,true))),
Condition(Times(FixSimplify(u),Power(Sqrt(Together(Times(b,Plus(Times(c,Power(Power(a,Times(C2,m)),CN1)),Times(d,Power(Power(a,Plus(Times(C2,m),Times(CN1,C1D2))),CN1)))))),CN1)),And(And(RationalQ(a,b,c,d,m),Greater(a,C0)),Equal(Denominator(m),C4)))),
SetDelayed(FixSimplify(Times(Power($p(v),$p(m)),Power($p(w),$p(n)),$p(u,true))),
Condition(Times(CN1,FixSimplify(Times(u,Power(v,Plus(m,Times(CN1,C1)))))),And(And(And(And(RationalQ(m),Not(RationalQ(w))),FractionQ(n)),Less(n,C0)),ZeroQ(Plus(v,Power(w,Times(CN1,n))))))),
SetDelayed(FixSimplify(Times(Power($p(v),$p(m)),Power($p(w),$p(n,true)),$p(u,true))),
Condition(Times(Power(CN1,n),FixSimplify(Times(u,Power(v,Plus(m,n))))),And(And(And(RationalQ(m),Not(RationalQ(w))),IntegerQ(n)),ZeroQ(Plus(v,w))))),
SetDelayed(FixSimplify(Times(Power(Times(CN1,Power($p(v),$p(p,true))),$p(m)),Power($p(w),$p(n,true)),$p(u,true))),
Condition(Times(Power(CN1,Times(n,Power(p,CN1))),FixSimplify(Times(u,Power(Times(CN1,Power(v,p)),Plus(m,Times(n,Power(p,CN1))))))),And(And(And(RationalQ(m),Not(RationalQ(w))),IntegerQ(Times(n,Power(p,CN1)))),ZeroQ(Plus(v,Times(CN1,w)))))),
SetDelayed(FixSimplify(Times(Power(Times(CN1,Power($p(v),$p(p,true))),$p(m)),Power($p(w),$p(n,true)),$p(u,true))),
Condition(Times(Power(CN1,Plus(n,Times(n,Power(p,CN1)))),FixSimplify(Times(u,Power(Times(CN1,Power(v,p)),Plus(m,Times(n,Power(p,CN1))))))),And(And(And(RationalQ(m),Not(RationalQ(w))),IntegersQ(n,Times(n,Power(p,CN1)))),ZeroQ(Plus(v,w))))),
SetDelayed(FixSimplify(Times(Power(Plus(a,b),$p(m,true)),Power(Plus(a,Times(CN1,b)),$p(m,true)),$p(u,true))),
Condition(Times(u,Power(Plus(Power(a,C2),Times(CN1,Power(b,C2))),m)),IntegerQ(m))),
SetDelayed(FixSimplify(Times(Power(Plus(Times(CN1,e,Plus(Times(b,d),Times(CN1,a,e))),Times(c,Power(d,C2))),$p(m,true)),$p(u,true))),
Condition(Times(u,Power(Plus(Times(c,Power(d,C2)),Times(CN1,b,d,e),Times(a,Power(e,C2))),m)),RationalQ(m))),
SetDelayed(FixSimplify(Times(Power(Plus(Times(e,Plus(Times(CN1,b,d),Times(a,e))),Times(c,Power(d,C2))),$p(m,true)),$p(u,true))),
Condition(Times(u,Power(Plus(Times(c,Power(d,C2)),Times(CN1,b,d,e),Times(a,Power(e,C2))),m)),RationalQ(m))),
SetDelayed(FixSimplify($p(u)),
u),
SetDelayed(SimpFixFactor(Power(Plus(Times(Complex(C0,$p(c)),$p(a,true)),Times(Complex(C0,$p(d)),$p(b,true))),$p(p,true)),$p(x)),
Condition(Times(Power(CI,p),SimpFixFactor(Power(Plus(Times(a,c),Times(b,d)),p),x)),IntegerQ(p))),
SetDelayed(SimpFixFactor(Power(Plus(Times(Complex(C0,$p(d)),$p(a,true)),Times(Complex(C0,$p(e)),$p(b,true)),Times(Complex(C0,$p(f)),$p(c,true))),$p(p,true)),$p(x)),
Condition(Times(Power(CI,p),SimpFixFactor(Power(Plus(Times(a,d),Times(b,e),Times(c,f)),p),x)),IntegerQ(p))),
SetDelayed(SimpFixFactor(Power(Plus(Times(Power($p(c),$p(r)),$p(a,true)),Times(Power($p(x),$p(n,true)),$p(b,true))),$p(p,true)),$p(x)),
Condition(Times(Power(c,Times(r,p)),SimpFixFactor(Power(Plus(a,Times(b,Power(Power(c,r),CN1),Power(x,n))),p),x)),And(And(And(And(FreeQ(List(a,b,c),x),IntegersQ(n,p)),AtomQ(c)),RationalQ(r)),Less(r,C0)))),
SetDelayed(SimpFixFactor(Power(Plus(Times(Power($p(c),$p(r)),Power($p(x),$p(n,true)),$p(b,true)),$p(a,true)),$p(p,true)),$p(x)),
Condition(Times(Power(c,Times(r,p)),SimpFixFactor(Power(Plus(Times(a,Power(Power(c,r),CN1)),Times(b,Power(x,n))),p),x)),And(And(And(And(FreeQ(List(a,b,c),x),IntegersQ(n,p)),AtomQ(c)),RationalQ(r)),Less(r,C0)))),
SetDelayed(SimpFixFactor(Power(Plus(Times(Power($p(c),$p(s,true)),$p(a,true)),Times(Power($p(c),$p(r,true)),Power($p(x),$p(n,true)),$p(b,true))),$p(p,true)),$p(x)),
Condition(Times(Power(c,Times(s,p)),SimpFixFactor(Power(Plus(a,Times(b,Power(c,Plus(r,Times(CN1,s))),Power(x,n))),p),x)),And(And(And(And(FreeQ(List(a,b,c),x),IntegersQ(n,p)),RationalQ(s,r)),And(Less(C0,s),LessEqual(s,r))),UnsameQ(Power(c,Times(s,p)),CN1)))),
SetDelayed(SimpFixFactor(Power(Plus(Times(Power($p(c),$p(s,true)),$p(a,true)),Times(Power($p(c),$p(r,true)),Power($p(x),$p(n,true)),$p(b,true))),$p(p,true)),$p(x)),
Condition(Times(Power(c,Times(r,p)),SimpFixFactor(Power(Plus(Times(a,Power(c,Plus(s,Times(CN1,r)))),Times(b,Power(x,n))),p),x)),And(And(And(And(FreeQ(List(a,b,c),x),IntegersQ(n,p)),RationalQ(s,r)),Less(Less(C0,r),s)),UnsameQ(Power(c,Times(r,p)),CN1)))),
SetDelayed(SimpFixFactor($p(u),$p(x)),
u),
SetDelayed(FactorNumericGcd($p(u)),
If(And(PowerQ(u),RationalQ(Part(u,C2))),Power(FactorNumericGcd(Part(u,C1)),Part(u,C2)),If(ProductQ(u),Map($s("Integrate::FactorNumericGcd"),u),If(SumQ(u),Module(List(Set(g,Apply($s("GCD"),Map($s("Integrate::NumericFactor"),Apply($s("List"),u))))),Times(g,Map(Function(Times(Slot1,Power(g,CN1))),u))),u)))),
SetDelayed(MergeFactors($p(u),$p(v)),
If(ProductQ(u),MergeFactors(Rest(u),MergeFactors(First(u),v)),If(PowerQ(u),If(MergeableFactorQ(Part(u,C1),Part(u,C2),v),MergeFactor(Part(u,C1),Part(u,C2),v),If(And(And(RationalQ(Part(u,C2)),Less(Part(u,C2),CN1)),MergeableFactorQ(Part(u,C1),CN1,v)),MergeFactors(Power(Part(u,C1),Plus(Part(u,C2),C1)),MergeFactor(Part(u,C1),CN1,v)),Times(u,v))),If(MergeableFactorQ(u,C1,v),MergeFactor(u,C1,v),Times(u,v))))),
SetDelayed(MergeFactor($p("bas"),$p("deg"),$p(v)),
If(SameQ($s("bas"),v),Power($s("bas"),Plus($s("deg"),C1)),If(PowerQ(v),If(SameQ($s("bas"),Part(v,C1)),Power($s("bas"),Plus($s("deg"),Part(v,C2))),Power(MergeFactor($s("bas"),Times($s("deg"),Power(Part(v,C2),CN1)),Part(v,C1)),Part(v,C2))),If(ProductQ(v),If(MergeableFactorQ($s("bas"),$s("deg"),First(v)),Times(MergeFactor($s("bas"),$s("deg"),First(v)),Rest(v)),Times(First(v),MergeFactor($s("bas"),$s("deg"),Rest(v)))),Plus(MergeFactor($s("bas"),$s("deg"),First(v)),MergeFactor($s("bas"),$s("deg"),Rest(v))))))),
SetDelayed(MergeableFactorQ($p("bas"),$p("deg"),$p(v)),
If(SameQ($s("bas"),v),And(RationalQ(Plus($s("deg"),C1)),Or(GreaterEqual(Plus($s("deg"),C1),C0),And(RationalQ($s("deg")),Greater($s("deg"),C0)))),If(PowerQ(v),If(SameQ($s("bas"),Part(v,C1)),And(RationalQ(Plus($s("deg"),Part(v,C2))),Or(GreaterEqual(Plus($s("deg"),Part(v,C2)),C0),And(RationalQ($s("deg")),Greater($s("deg"),C0)))),And(And(And(SumQ(Part(v,C1)),IntegerQ(Part(v,C2))),Or(Not(IntegerQ($s("deg"))),IntegerQ(Times($s("deg"),Power(Part(v,C2),CN1))))),MergeableFactorQ($s("bas"),Times($s("deg"),Power(Part(v,C2),CN1)),Part(v,C1)))),If(ProductQ(v),Or(MergeableFactorQ($s("bas"),$s("deg"),First(v)),MergeableFactorQ($s("bas"),$s("deg"),Rest(v))),And(And(SumQ(v),MergeableFactorQ($s("bas"),$s("deg"),First(v))),MergeableFactorQ($s("bas"),$s("deg"),Rest(v))))))),
SetDelayed(TrigSimplifyQ($p(u)),
UnsameQ(ActivateTrig(u),TrigSimplify(u))),
SetDelayed(TrigSimplify($p(u)),
ActivateTrig(TrigSimplifyRecur(u))),
SetDelayed(TrigSimplifyRecur($p(u)),
If(AtomQ(u),u,If(SameQ(Head(u),$s("If")),u,TrigSimplifyAux(Map($s("Integrate::TrigSimplifyRecur"),u))))),
SetDelayed(TrigSimplifyAux(Times(Power(Plus(Times(Power($p(v),$p(m,true)),$p(a,true)),Times(Power($p(v),$p(n,true)),$p(b,true))),$p(p)),$p(u,true))),
Condition(Times(u,Power(v,Times(m,p)),Power(TrigSimplifyAux(Plus(a,Times(b,Power(v,Plus(n,Times(CN1,m)))))),p)),And(And(And(InertTrigQ(v),IntegerQ(p)),RationalQ(m,n)),Less(m,n)))),
SetDelayed(TrigSimplifyAux(Plus(Times(Power($($s("§cos"),$p(u)),C2),$p(a,true)),Times(Power($($s("§sin"),$p(u)),C2),$p(b,true)),$p(v,true))),
Condition(Plus(a,v),SameQ(a,b))),
SetDelayed(TrigSimplifyAux(Plus(Times(Power($($s("§sec"),$p(u)),C2),$p(a,true)),Times(Power($($s("§tan"),$p(u)),C2),$p(b,true)),$p(v,true))),
Condition(Plus(a,v),SameQ(a,Times(CN1,b)))),
SetDelayed(TrigSimplifyAux(Plus(Times(Power($($s("§csc"),$p(u)),C2),$p(a,true)),Times(Power($($s("§cot"),$p(u)),C2),$p(b,true)),$p(v,true))),
Condition(Plus(a,v),SameQ(a,Times(CN1,b)))),
SetDelayed(TrigSimplifyAux(Power(Plus(Times(Power($($s("§cos"),$p(u)),C2),$p(a,true)),Times(Power($($s("§sin"),$p(u)),C2),$p(b,true)),$p(v,true)),$p(n))),
Power(Plus(Times(Plus(b,Times(CN1,a)),Power(Sin(u),C2)),a,v),n)),
SetDelayed(TrigSimplifyAux(Plus(Times(Power($($s("§sin"),$p(z)),C2),$p(v,true)),$p(u),$p(w,true))),
Condition(Plus(Times(u,Power(Cos(z),C2)),w),SameQ(u,Times(CN1,v)))),
SetDelayed(TrigSimplifyAux(Plus(Times(Power($($s("§cos"),$p(z)),C2),$p(v,true)),$p(u),$p(w,true))),
Condition(Plus(Times(u,Power(Sin(z),C2)),w),SameQ(u,Times(CN1,v)))),
SetDelayed(TrigSimplifyAux(Plus(Times(Power($($s("§tan"),$p(z)),C2),$p(v,true)),$p(u),$p(w,true))),
Condition(Plus(Times(u,Power(Sec(z),C2)),w),SameQ(u,v))),
SetDelayed(TrigSimplifyAux(Plus(Times(Power($($s("§cot"),$p(z)),C2),$p(v,true)),$p(u),$p(w,true))),
Condition(Plus(Times(u,Power(Csc(z),C2)),w),SameQ(u,v))),
SetDelayed(TrigSimplifyAux(Plus(Times(Power($($s("§sec"),$p(z)),C2),$p(v,true)),$p(u),$p(w,true))),
Condition(Plus(Times(v,Power(Tan(z),C2)),w),SameQ(u,Times(CN1,v)))),
SetDelayed(TrigSimplifyAux(Plus(Times(Power($($s("§csc"),$p(z)),C2),$p(v,true)),$p(u),$p(w,true))),
Condition(Plus(Times(v,Power(Cot(z),C2)),w),SameQ(u,Times(CN1,v)))),
SetDelayed(TrigSimplifyAux(Times(Power(Plus(Times($($s("§cos"),$p(v)),$p(b,true)),$p(a)),CN1),Power($($s("§sin"),$p(v)),C2),$p(u,true))),
Condition(Times(u,Plus(Power(a,CN1),Times(CN1,Cos(v),Power(b,CN1)))),ZeroQ(Plus(Power(a,C2),Times(CN1,Power(b,C2)))))),
SetDelayed(TrigSimplifyAux(Times(Power(Plus(Times($($s("§sin"),$p(v)),$p(b,true)),$p(a)),CN1),Power($($s("§cos"),$p(v)),C2),$p(u,true))),
Condition(Times(u,Plus(Power(a,CN1),Times(CN1,Sin(v),Power(b,CN1)))),ZeroQ(Plus(Power(a,C2),Times(CN1,Power(b,C2)))))),
SetDelayed(TrigSimplifyAux(Times(Power(Plus(Times(Power($($s("§tan"),$p(v)),$p(n,true)),$p(b,true)),$p(a)),CN1),Power($($s("§tan"),$p(v)),$p(n,true)),$p(u,true))),
Condition(Times(u,Power(Plus(b,Times(a,Power(Cot(v),n))),CN1)),And(PositiveIntegerQ(n),NonsumQ(a)))),
SetDelayed(TrigSimplifyAux(Times(Power(Plus(Times(Power($($s("§cot"),$p(v)),$p(n,true)),$p(b,true)),$p(a)),CN1),Power($($s("§cot"),$p(v)),$p(n,true)),$p(u,true))),
Condition(Times(u,Power(Plus(b,Times(a,Power(Tan(v),n))),CN1)),And(PositiveIntegerQ(n),NonsumQ(a)))),
SetDelayed(TrigSimplifyAux(Times(Power(Plus(Times(Power($($s("§sec"),$p(v)),$p(n,true)),$p(b,true)),$p(a)),CN1),Power($($s("§sec"),$p(v)),$p(n,true)),$p(u,true))),
Condition(Times(u,Power(Plus(b,Times(a,Power(Cos(v),n))),CN1)),And(PositiveIntegerQ(n),NonsumQ(a)))),
SetDelayed(TrigSimplifyAux(Times(Power(Plus(Times(Power($($s("§csc"),$p(v)),$p(n,true)),$p(b,true)),$p(a)),CN1),Power($($s("§csc"),$p(v)),$p(n,true)),$p(u,true))),
Condition(Times(u,Power(Plus(b,Times(a,Power(Sin(v),n))),CN1)),And(PositiveIntegerQ(n),NonsumQ(a)))),
SetDelayed(TrigSimplifyAux(Times(Power(Plus(Times(Power($($s("§sec"),$p(v)),$p(n,true)),$p(b,true)),$p(a)),CN1),Power($($s("§tan"),$p(v)),$p(n,true)),$p(u,true))),
Condition(Times(u,Power(Sin(v),n),Power(Plus(b,Times(a,Power(Cos(v),n))),CN1)),And(PositiveIntegerQ(n),NonsumQ(a)))),
SetDelayed(TrigSimplifyAux(Times(Power(Plus(Times(Power($($s("§csc"),$p(v)),$p(n,true)),$p(b,true)),$p(a)),CN1),Power($($s("§cot"),$p(v)),$p(n,true)),$p(u,true))),
Condition(Times(u,Power(Cos(v),n),Power(Plus(b,Times(a,Power(Sin(v),n))),CN1)),And(PositiveIntegerQ(n),NonsumQ(a)))),
SetDelayed(TrigSimplifyAux(Times(Power(Plus(Times(Power($($s("§sec"),$p(v)),$p(n,true)),$p(a,true)),Times(Power($($s("§tan"),$p(v)),$p(n,true)),$p(b,true))),$p(p,true)),$p(u,true))),
Condition(Times(u,Power(Sec(v),Times(n,p)),Power(Plus(a,Times(b,Power(Sin(v),n))),p)),IntegersQ(n,p)))
);
}
Ads help maintain this website.