package org.matheclipse.core.integrate.rubi;


import static org.matheclipse.core.expression.F.*;
import static org.matheclipse.core.integrate.rubi.UtilityFunctionCtors.*;
import static org.matheclipse.core.integrate.rubi.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 UtilityFunctions0 { 
  public static IAST RULES = List( 
SetDelayed(MakeList($p(n,IntegerHead),$p(u)),
    If(Equal(n,C0),List(),Append(MakeList(Plus(n,Times(CN1,C1)),u),u))),
SetDelayed(Second($p(u)),
    Part(u,C2)),
SetDelayed(Map2($p("func"),$p("lst1"),$p("lst2")),
    ReapList(Do(Sow($($s("func"),Part($s("lst1"),i),Part($s("lst2"),i))),List(i,Length($s("lst1")))))),
SetDelayed(ReapList($p(u)),
    Module(List(Set($s("lst"),Part(Reap(u),C2))),If(SameQ($s("lst"),List()),$s("lst"),Part($s("lst"),C1)))),
SetDelayed(MapAnd($p(f),$p("lst")),
    Catch(CompoundExpression(Scan(Function(If($(f,Slot1),Null,Throw(False))),$s("lst")),True))),
SetDelayed(MapAnd($p(f),$p("lst"),$p(x)),
    Catch(CompoundExpression(Scan(Function(If($(f,Slot1,x),Null,Throw(False))),$s("lst")),True))),
SetDelayed(MapOr($p(f),$p("lst")),
    Catch(CompoundExpression(Scan(Function(If($(f,Slot1),Throw(True),Null)),$s("lst")),False))),
SetDelayed(NotIntegrableQ($p(u),$p(x,SymbolHead)),
    Or(MatchQ(u,Condition(Times(Power(x,$p(m)),Power(Log(Plus($p(a),Times($p(b,true),x))),$p(n))),And(And(And(FreeQ(List(a,b),x),IntIntegerQ(List(m,n))),Less(m,C0)),Less(n,C0)))),MatchQ(u,Condition($($p(f),Times(Power(x,$p(m,true)),Log(Plus($p(a,true),Times($p(b,true),x))))),And(And(FreeQ(List(a,b),x),IntIntegerQ(m)),Or(TrigQ(f),HyperbolicQ(f))))))),
SetDelayed(ZeroQ($p(u)),
    PossibleZeroQ(u)),
SetDelayed(NonzeroQ($p(u)),
    Not(PossibleZeroQ(u))),
SetDelayed(RealNumericQ($p(u)),
    And(NumericQ(u),PossibleZeroQ(Im(N(u))))),
SetDelayed(ImaginaryNumericQ($p(u)),
    And(And(NumericQ(u),PossibleZeroQ(Re(N(u)))),Not(PossibleZeroQ(Im(N(u)))))),
SetDelayed(PositiveQ($p(u)),
    Module(List(Set(v,Simplify(u))),And(RealNumericQ(v),Greater(Re(N(v)),C0)))),
SetDelayed(PositiveOrZeroQ($p(u)),
    Module(List(Set(v,Simplify(u))),And(RealNumericQ(v),GreaterEqual(Re(N(v)),C0)))),
SetDelayed(NegativeQ($p(u)),
    Module(List(Set(v,Simplify(u))),And(RealNumericQ(v),Less(Re(N(v)),C0)))),
SetDelayed(NegativeOrZeroQ($p(u)),
    Module(List(Set(v,Simplify(u))),And(RealNumericQ(v),LessEqual(Re(N(v)),C0)))),
SetDelayed(FractionQ($p(u)),
    If(ListQ(u),MapAnd($s("Integrate::FractionQ"),u),SameQ(Head(u),$s("Rational")))),
SetDelayed(RationalQ(Plus(Times(Plus($p(n),$p(v)),$p(m)),$p(u))),
    And(And(RationalQ(m),RationalQ(n)),RationalQ(Plus(u,Times(m,v))))),
SetDelayed(RationalQ($p(u)),
    If(ListQ(u),MapAnd($s("Integrate::RationalQ"),u),Or(IntIntegerQ(u),SameQ(Head(u),$s("Rational"))))),
SetDelayed(HalfIntegerQ($p(u)),
    If(ListQ(u),MapAnd($s("Integrate::HalfIntegerQ"),u),And(FractionQ(u),Equal(Denominator(u),C2)))),
SetDelayed(FractionOrNegativeQ($p(u)),
    If(ListQ(u),MapAnd($s("Integrate::FractionOrNegativeQ"),u),Or(FractionQ(u),And(IntIntegerQ(u),Less(u,C0))))),
SetDelayed(SqrtNumberQ(Power($p(m),$p(n))),
    Or(And(IntIntegerQ(n),SqrtNumberQ(m)),And(HalfIntegerQ(n),RationalQ(m)))),
SetDelayed(SqrtNumberQ(Times($p(u),$p(v))),
    And(SqrtNumberQ(u),SqrtNumberQ(v))),
SetDelayed(SqrtNumberQ($p(u)),
    Or(RationalQ(u),SameQ(u,CI))),
SetDelayed(SqrtNumberSumQ($p(u)),
    And(And(SumQ(u),SqrtNumberQ(First(u))),SqrtNumberQ(Rest(u)))),
SetDelayed(FalseQ($p(u)),
    SameQ(u,False)),
SetDelayed(NotFalseQ($p(u)),
    UnsameQ(u,False)),
SetDelayed(SumQ($p(u)),
    SameQ(Head(u),$s("Plus"))),
SetDelayed(NonsumQ($p(u)),
    UnsameQ(Head(u),$s("Plus"))),
SetDelayed(ProductQ($p(u)),
    SameQ(Head(u),$s("Times"))),
SetDelayed(PowerQ($p(u)),
    SameQ(Head(u),$s("Power"))),
SetDelayed(IntegerPowerQ($p(u)),
    And(PowerQ(u),IntIntegerQ(Part(u,C2)))),
SetDelayed(PositiveIntegerPowerQ($p(u)),
    And(And(PowerQ(u),IntIntegerQ(Part(u,C2))),Greater(Part(u,C2),C0))),
SetDelayed(FractionalPowerQ($p(u)),
    And(PowerQ(u),FractionQ(Part(u,C2)))),
SetDelayed(RationalPowerQ($p(u)),
    And(PowerQ(u),RationalQ(Part(u,C2)))),
SetDelayed(SqrtQ($p(u)),
    And(PowerQ(u),SameQ(Part(u,C2),C1D2))),
SetDelayed(ExpQ($p(u)),
    And(PowerQ(u),SameQ(Part(u,C1),E))),
SetDelayed(ImaginaryQ($p(u)),
    And(SameQ(Head(u),$s("Complex")),SameQ(Re(u),C0))),
SetDelayed(FractionalPowerFreeQ($p(u)),
    If(AtomQ(u),True,If(And(FractionalPowerQ(u),Not(AtomQ(Part(u,C1)))),False,Catch(CompoundExpression(Scan(Function(If(FractionalPowerFreeQ(Slot1),Null,Throw(False))),u),True))))),
SetDelayed(ComplexFreeQ($p(u)),
    If(AtomQ(u),UnsameQ(Head(u),$s("Complex")),Catch(CompoundExpression(Scan(Function(If(ComplexFreeQ(Slot1),Null,Throw(False))),u),True)))),
SetDelayed(LogQ($p(u)),
    SameQ(Head(u),$s("Log"))),
SetDelayed(ProductLogQ($p(u)),
    SameQ(Head(u),$s("ProductLog"))),
SetDelayed(SinQ($p(u)),
    SameQ(Head(u),$s("Sin"))),
SetDelayed(CosQ($p(u)),
    SameQ(Head(u),$s("Cos"))),
SetDelayed(TanQ($p(u)),
    SameQ(Head(u),$s("Tan"))),
SetDelayed(CotQ($p(u)),
    SameQ(Head(u),$s("Cot"))),
SetDelayed(SecQ($p(u)),
    SameQ(Head(u),$s("Sec"))),
SetDelayed(CscQ($p(u)),
    SameQ(Head(u),$s("Csc"))),
SetDelayed(SinhQ($p(u)),
    SameQ(Head(u),$s("Sinh"))),
SetDelayed(CoshQ($p(u)),
    SameQ(Head(u),$s("Cosh"))),
SetDelayed(TanhQ($p(u)),
    SameQ(Head(u),$s("Tanh"))),
SetDelayed(CothQ($p(u)),
    SameQ(Head(u),$s("Coth"))),
SetDelayed(SechQ($p(u)),
    SameQ(Head(u),$s("Sech"))),
SetDelayed(CschQ($p(u)),
    SameQ(Head(u),$s("Csch"))),
SetDelayed(TrigQ($p(u)),
    MemberQ(List($s("Sin"),$s("Cos"),$s("Tan"),$s("Cot"),$s("Sec"),$s("Csc")),If(AtomQ(u),u,Head(u)))),
SetDelayed(InverseTrigQ($p(u)),
    MemberQ(List($s("ArcSin"),$s("ArcCos"),$s("ArcTan"),$s("ArcCot"),$s("ArcSec"),$s("ArcCsc")),If(AtomQ(u),u,Head(u)))),
SetDelayed(HyperbolicQ($p(u)),
    MemberQ(List($s("Sinh"),$s("Cosh"),$s("Tanh"),$s("Coth"),$s("Sech"),$s("Csch")),If(AtomQ(u),u,Head(u)))),
SetDelayed(InverseHyperbolicQ($p(u)),
    MemberQ(List($s("ArcSinh"),$s("ArcCosh"),$s("ArcTanh"),$s("ArcCoth"),$s("ArcSech"),$s("ArcCsch")),If(AtomQ(u),u,Head(u)))),
SetDelayed(SinCosQ($p(f)),
    MemberQ(List($s("Sin"),$s("Cos"),$s("Sec"),$s("Csc")),f)),
SetDelayed(SinhCoshQ($p(f)),
    MemberQ(List($s("Sinh"),$s("Cosh"),$s("Sech"),$s("Csch")),f)),
SetDelayed(CalculusQ($p(u)),
    MemberQ(List($s("D"),$s("Integrate"),$s("Sum"),$s("Product"),$s("Int"),$s("Dif"),$s("Integrate::Subst")),Head(u))),
SetDelayed(CalculusFreeQ($p(u),$p(x)),
    If(AtomQ(u),True,If(Or(Or(And(CalculusQ(u),SameQ(Part(u,C2),x)),SameQ(Head(u),$s("Pattern"))),SameQ(Head(u),$s("Defer"))),False,Catch(CompoundExpression(Scan(Function(If(CalculusFreeQ(Slot1,x),Null,Throw(False))),u),True))))),
SetDelayed(SubstQ($p(u)),
    SameQ(Head(u),$s("Integrate::Subst"))),
SetDelayed(InverseFunctionQ($p(u)),
    Or(Or(Or(LogQ(u),InverseTrigQ(u)),InverseHyperbolicQ(u)),SameQ(Head(u),$s("Integrate::Mods")))),
SetDelayed(TrigHyperbolicFreeQ($p(u),$p(x,SymbolHead)),
    If(AtomQ(u),True,If(Or(Or(TrigQ(u),HyperbolicQ(u)),CalculusQ(u)),FreeQ(u,x),Catch(CompoundExpression(Scan(Function(If(TrigHyperbolicFreeQ(Slot1,x),Null,Throw(False))),u),True))))),
SetDelayed(InverseFunctionFreeQ($p(u),$p(x,SymbolHead)),
    If(AtomQ(u),True,If(Or(InverseFunctionQ(u),CalculusQ(u)),FreeQ(u,x),Catch(CompoundExpression(Scan(Function(If(InverseFunctionFreeQ(Slot1,x),Null,Throw(False))),u),True))))),
SetDelayed(NegativeCoefficientQ($p(u)),
    If(SumQ(u),NegativeCoefficientQ(First(u)),MatchQ(u,Condition(Times($p(m),$p(v,true)),And(RationalQ(m),Less(m,C0)))))),
SetDelayed(RealQ($p(u)),
    Condition(MapAnd($s("Integrate::RealQ"),u),ListQ(u))),
SetDelayed(RealQ($p(u)),
    Condition(PossibleZeroQ(Im(N(u))),NumericQ(u))),
SetDelayed(RealQ(Power($p(u),$p(v))),
    And(And(RealQ(u),RealQ(v)),Or(IntIntegerQ(v),PositiveOrZeroQ(u)))),
SetDelayed(RealQ(Times($p(u),$p(v))),
    And(RealQ(u),RealQ(v))),
SetDelayed(RealQ(Plus($p(u),$p(v))),
    And(RealQ(u),RealQ(v))),
SetDelayed(RealQ($($p(f),$p(u))),
    If(MemberQ(List($s("Sin"),$s("Cos"),$s("Tan"),$s("Cot"),$s("Sec"),$s("Csc"),$s("ArcTan"),$s("ArcCot"),$s("Erf")),f),RealQ(u),If(MemberQ(List($s("ArcSin"),$s("ArcCos")),f),LE(CN1,u,C1),If(SameQ(f,$s("Log")),PositiveOrZeroQ(u),False)))),
SetDelayed(RealQ($p(u)),
    False),
SetDelayed(PosQ($p(u)),
    If(PossibleZeroQ(u),False,If(NumericQ(u),If(NumberQ(u),If(PossibleZeroQ(Re(u)),Greater(Im(u),C0),Greater(Re(u),C0)),Module(List(Set(v,N(u))),If(PossibleZeroQ(Re(v)),Greater(Im(v),C0),Greater(Re(v),C0)))),Module(List(Set(v,Simplify(u))),If(NumericQ(v),PosQ(v),If(And(PowerQ(v),IntIntegerQ(Part(v,C2))),PosQ(Part(v,C1)),If(ProductQ(v),If(RationalQ(First(v)),If(Greater(First(v),C0),PosQ(Rest(v)),NegQ(Rest(v))),PosQ(First(v))),If(SumQ(v),PosQ(First(v)),Not(MatchQ(v,Times(CN1,$p((ISymbol)null)))))))))))),
SetDelayed(NegQ($p(u)),
    If(PossibleZeroQ(u),False,Not(PosQ(u)))),
SetDelayed(LeadTerm($p(u)),
    If(SumQ(u),First(u),u)),
SetDelayed(RemainingTerms($p(u)),
    If(SumQ(u),Rest(u),C0)),
SetDelayed(LeadFactor($p(u)),
    If(ProductQ(u),LeadFactor(First(u)),If(ImaginaryQ(u),If(SameQ(Im(u),C1),u,LeadFactor(Im(u))),u))),
SetDelayed(RemainingFactors($p(u)),
    If(ProductQ(u),Times(RemainingFactors(First(u)),Rest(u)),If(ImaginaryQ(u),If(SameQ(Im(u),C1),C1,Times(CI,RemainingFactors(Im(u)))),C1))),
SetDelayed(LeadBase($p(u)),
    Module(List(Set(v,LeadFactor(u))),If(PowerQ(v),Part(v,C1),v))),
SetDelayed(LeadDegree($p(u)),
    Module(List(Set(v,LeadFactor(u))),If(PowerQ(v),Part(v,C2),C1))),
SetDelayed(LT($p(u),$p(v)),
    And(And(RealNumericQ(u),RealNumericQ(v)),Less(Re(N(u)),Re(N(v))))),
SetDelayed(LT($p(u),$p(v),$p(w)),
    And(LT(u,v),LT(v,w))),
SetDelayed(LE($p(u),$p(v)),
    And(And(RealNumericQ(u),RealNumericQ(v)),LessEqual(Re(N(u)),Re(N(v))))),
SetDelayed(LE($p(u),$p(v),$p(w)),
    And(LE(u,v),LE(v,w))),
SetDelayed(GT($p(u),$p(v)),
    And(And(RealNumericQ(u),RealNumericQ(v)),Greater(Re(N(u)),Re(N(v))))),
SetDelayed(GT($p(u),$p(v),$p(w)),
    And(GT(u,v),GT(v,w))),
SetDelayed(GE($p(u),$p(v)),
    And(And(RealNumericQ(u),RealNumericQ(v)),GreaterEqual(Re(N(u)),Re(N(v)))))
  );
}

 

Ads help maintain this website.