Initialization

Needs["Theorema`"]

SetGlobals[TraceLevel->0];

SetGlobals[JuxtapositionForTimes->True];

Use[⟨Built–in["Numbers"],Built–in["Operators"],Built–in["Complex Numbers"],Built–in["Quantifiers"],Built–in["Tuples"],Built–in["Connectives"],Built–in["Sets"]⟩]

SetOptions[FlattenKB,ExpandFunctors->"replace"];

Off[General::"spell1"];

Unprotect[Or];ClearAll[Or];Protect[Or];

Off[Unset::"write"]

DeclareAsIdentifiers[(OverTilde[\[Placeholder]])]

Number Domains

Natural Numbers

Definition["ℕ",ℕ=NaturalNumbers[]]

Definition["Natural Numbers" ,any[],
NaturalNumbers[]=Functor[N,any[x,y],
	({{𝕤=⟨⟩}, {({{
(Underscript[∈, N])[x]⟺is–natural[x]}, {x(Underscript[>, N])y⇔x>y}, {(Underscript[⬚, N])=0}, {x(Underscript[*, N])y=x+y}})}})
	]]

Mma Auxiliary Functions

Clear[mymult];

Begin["System`"];

mymult[x_,y_]:=x*y;

End[];

Built–in["Mult",
™MyMult->mymult]

Clear[myminus];

Begin["System`"];

myminus[x_,y_]:=x-y;

End[];

Built–in["Minus",
™MyMinus->myminus]

Clear[isnumber];

Begin["System`"];

isnumber[™D|L|R|A|B|⌈x__⌉|x|(x^(m_))]:=False;

isnumber[™Times[™D,m__]|™Times[L,m__]|™Times[R,m__]|™Times[A,m__]|™Times[B,m__]|™Times[™Ceiling[m__],y___]|™Times[x,y___]]:=False;

isnumber[x_]:=(x/.{™I->I,™E->E,™Times->Times,™Plus->Plus,™Minus->Minus,™Divide->Divide,™Power->Power})∈Complexes;

End[];

Built–in["IsNumber",
™IsNumber->isnumber]

Definition["Mma Auxiliary Functions" ,any[],
MmaAuxF[]=Functor[N,any[x,y],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, N])[x]⟺™IsNumber[x]}, {x(Underscript[·, N])y=™MyMult[x,y]}, {x(Underscript[-, N])y=™MyMinus[x,y]}})}})
	]]

Reduction Field

Definition["Reduction Field" ,any[D],
ReductionField[D]=Functor[⟨N,extends[D]⟩,any[x,y],
	({{𝕤=⟨⟩}, {({{
(Underscript[∈, N])[x]⇔(Underscript[∈, D])[x]}, {(Underscript[0, N])=(Underscript[0, D])}, {(Underscript[1, N])=(Underscript[1, D])}, {x(Underscript[+, N])y=x(Underscript[+, D])y}, {(Underscript[-, N])x=(Underscript[-, D])x}, {x(Underscript[-, N])y=x(Underscript[-, D])y}, {x(Underscript[*, N])y=x(Underscript[*, D])y}, {x(Underscript[/, N])y=x(Underscript[/, D])y}, {x(Underscript[>, N])y⇔x(Underscript[>, D])y}, {x(Underscript[≻, N])y⇔((x≠(Underscript[0, D]))∧(y=(Underscript[0, D])))}, {(Underscript[rdm, N])[x,y]  (* the reduction multiplier of x modulo y  *) ={({{x(Underscript[/, D])y, ⇐, x≠(Underscript[0, D])∧y≠(Underscript[0, D])}, {(Underscript[0, D]), ⇐, otherwise}})} }, {(Underscript[lcrd, N])[x,y] (* the least common reducible of x and y  *) ={({{(Underscript[1, D]), ⇐, x≠(Underscript[0, D])∧y≠(Underscript[0, D])}, {(Underscript[0, D]), ⇐, otherwise}})}}})}})
	]]

Rational Number Field

Definition["ℚ",ℚ=RationalNumberField[]]

Definition["Rational Number Field" ,any[],
RationalNumberField[]=Functor[N,any[x,y],
	({{𝕤=⟨⟩}, {({{
(Underscript[∈, N])[x]⟺is–rational[x]}, {x(Underscript[>, N])y⇔x>y}, {(Underscript[0, N])=0}, {(Underscript[1, N])=1}, {x(Underscript[+, N])y=x+y}, {(Underscript[-, N])x=-x}, {x(Underscript[-, N])y=x-y}, {x(Underscript[*, N])y=x*y}, {(Underscript[∇, N])x=1/x}, {x(Underscript[/, N])y=x/y}, {(Underscript[power, N])[x,0]=(Underscript[1, N])}, {(Underscript[power, N])[x,y]=x(Underscript[*, N])(Underscript[power, N])[x,y-1]}})}})
	]]

Complex Numbers

IsComplex

Clear[IsComplex];

Begin["System`"];

IsComplex[x_]:=(x/.{™I->I,™E->E})∈Complexes;

End[];

Built–in["IsComplex",
™IsComplex->IsComplex]

$TmaOperatorTranslations=DeleteCases[$TmaOperatorTranslations,tr_/;MemberQ[tr,™E|™I,∞]];

ComplexLt

Clear[ComplexLt];

Begin["System`"];

ComplexLt[x_,x_]:=False;

ComplexLt[x_,y_]:=OrderedQ[{x,y}/.{™I->I,™E->E}] ;

End[];

Built–in["ComplexLt",
™ComplexLt->ComplexLt]

ComplexNumberField

Definition["ℂ",ℂ=ComplexNumberField[]]

Definition["Complex Number Field" ,any[],
ComplexNumberField[]=Functor[N,any[x,y,z],
	({{𝕤=⟨⟩}, {({{
(Underscript[∈, N])[x]⟺™IsComplex[x]}, {x(Underscript[>, N])y⇔™ComplexLt[y,x]}, {(Underscript[0, N])=0}, {(Underscript[1, N])=1}, {x(Underscript[+, N])y=x+y}, {x(Underscript[*, N])y=(Underscript[simplify, N])[x*y]}, {x(Underscript[*, N])y(Underscript[*, N])z=(x(Underscript[*, N])y)(Underscript[*, N])z}, {(Underscript[-, N])x=-x}, {x(Underscript[-, N])y=x-y}, {(Underscript[∇, N])x=1/x}, {x(Underscript[/, N])y=x/y}, {(Underscript[power, N])[x,y]=Power[x,y]}, {(Underscript[exp, N])[x]=Exp[x]}, {(Underscript[simplify, N])[x]=mma–simplify[x]}})}})
	]]

ComplexNumbersMonoid

Definition["ℂM",ℂM=ComplexNumbers[]]

Definition["Complex Numbers" ,any[],
ComplexNumbers[]=Functor[N,any[x,y],
	({{𝕤=⟨⟩}, {({{
(Underscript[∈, N])[x]⟺™IsComplex[x]}, {x(Underscript[>, N])y⇔™ComplexLt[y,x]}, {(Underscript[⬚, N])=0}, {x(Underscript[*, N])y=x+y}})}})
	]]

Word Monoids

Finite Chain

Definition["Finite Chain",any[L],
FinChain[L]=Functor[C,any[x,y],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, C])[x]⟺(x∈L)}, {x(Underscript[>, C])y⇔(Underscript[∃, i=1,…,\[LeftBracketingBar]L\[RightBracketingBar]])(Underscript[∃, j=i+1,…,\[LeftBracketingBar]L\[RightBracketingBar]])((x=(Subscript[L, i]))∧(y=(Subscript[L, j])))}})}})]]

Word Monoids

Definition["Word Monoid",any[L],
LexWords[L]=Functor[W,any[u,v,w,ξ,η,(OverBar[ξ]),(OverBar[η]),(OverBar[ζ])],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, W])[w]⟺(∧{({{is–tuple[w]}, {(Underscript[∀, i=1,…,\[LeftBracketingBar]w\[RightBracketingBar]])(Underscript[∈, L])[(Subscript[w, i])]}})})}, {(Underscript[⬚, W])(* empty word *)=⟨⟩}, {v(Underscript[*, W])w(* multiplication of two words *)=v≍w}, {u(Underscript[*, W])v(Underscript[*, W])w(* multiplication of three words *)=(u(Underscript[*, W])v)(Underscript[*, W])w}, {(⟨(OverBar[η])⟩(Underscript[∣, W])⟨(OverBar[ζ]),(OverBar[η]),(OverBar[ξ])⟩)(* middle divisibility *)⇔True}, {(⟨(OverBar[η])⟩(Underscript[∣, W])⟨(OverBar[ξ])⟩)⇔False}, {(Underscript[rquot, W])[⟨⟩,v](* right quotient *)=(Underscript[⬚, W])}, {(Underscript[rquot, W])[⟨(OverBar[ξ]),(OverBar[η])⟩,⟨(OverBar[η])⟩]=(Underscript[⬚, W])}, {(Underscript[rquot, W])[w,v]=(Underscript[rquot, W])[⟨(Subscript[w, i])(Underscript[|, i=1,…,\[LeftBracketingBar]w\[RightBracketingBar]-1])⟩,v]⌢(Subscript[w, \[LeftBracketingBar]w\[RightBracketingBar]])}, {(Underscript[lquot, W])[w,v](* left quotient *)=⟨(Subscript[w, i])(Underscript[|, i=1,…,\[LeftBracketingBar]w\[RightBracketingBar]-\[LeftBracketingBar]v\[RightBracketingBar]-\[LeftBracketingBar](Underscript[rquot, W])[w,v]\[RightBracketingBar]])⟩ }, {(Underscript[suffix, W])[w,v](* suffix quotient *)=⟨(Subscript[w, i])(Underscript[|, i=\[LeftBracketingBar]v\[RightBracketingBar]+1,…,\[LeftBracketingBar]w\[RightBracketingBar]])⟩ }, {(Underscript[prefix, W])[w,v](* prefix quotient *)=⟨(Subscript[w, i])(Underscript[|, i=1,…,\[LeftBracketingBar]w\[RightBracketingBar]-\[LeftBracketingBar]v\[RightBracketingBar]])⟩ }, {(⟨η,(OverBar[η])⟩(Underscript[>, W])⟨⟩)(* lexicographic ordering *)⇔True}, {(⟨⟩(Underscript[>, W])⟨(OverBar[η])⟩)⇔False}, {(⟨η,(OverBar[η])⟩(Underscript[>, W])⟨ξ,(OverBar[ξ])⟩)⇔(∨{({{(η=ξ) ∧⟨(OverBar[η])⟩(Underscript[>, W])⟨(OverBar[ξ])⟩}, {η(Underscript[>, L])ξ}})} )}})}})]]

Definition["Word Monoid with Degree Ordering",any[L],
DegWords[L]=where[B=LexWords[L],
Functor[W,any[u,v,w,η,(OverBar[η])],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, W])[w]⟺(Underscript[∈, B])[w]}, {(Underscript[⬚, W])=(Underscript[⬚, B])}, {v(Underscript[*, W])w=v(Underscript[*, B])w}, {u(Underscript[*, W])v(Underscript[*, W])w=u(Underscript[*, B])v(Underscript[*, B])w}, {(v(Underscript[∣, W])w)⇔(v(Underscript[∣, B])w)}, {(Underscript[rquot, W])[w,v]=(Underscript[rquot, B])[w,v]}, {(Underscript[lquot, W])[w,v]=(Underscript[lquot, B])[w,v] }, {(Underscript[suffix, W])[w,v]=(Underscript[suffix, B])[w,v] }, {(Underscript[prefix, W])[w,v]=(Underscript[prefix, B])[w,v] }, {(⟨η,(OverBar[η])⟩(Underscript[>, W])⟨⟩)(* degree ordering *)⇔True}, {(⟨⟩(Underscript[>, W])⟨(OverBar[η])⟩)⇔False}, {(v(Underscript[>, W])w)⇔(∨{({{\[LeftBracketingBar]v\[RightBracketingBar]>\[LeftBracketingBar]w\[RightBracketingBar]}, {∧{({{\[LeftBracketingBar]v\[RightBracketingBar]=\[LeftBracketingBar]w\[RightBracketingBar]}, {v(Underscript[>, B])w}})} }})} )}})}})]]]

Cartesian Product

Definition["Cartesian Product",any[(OverBar[D]),A,B],
({{CartesianProduct[(OverBar[D])]=Functor[N,any[X,Y],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, N])[X]⟺(is–tuple[X]∧(\[LeftBracketingBar]⟨(OverBar[D])⟩\[RightBracketingBar]=\[LeftBracketingBar]X\[RightBracketingBar])∧(Underscript[∀, i=1,…,\[LeftBracketingBar]⟨(OverBar[D])⟩\[RightBracketingBar]])(Underscript[∈, (Subscript[⟨(OverBar[D])⟩, i])])[(Subscript[X, i])])}, {(Underscript[⬚, N])=⟨(Underscript[⬚, (Subscript[⟨(OverBar[D])⟩, i])])(Underscript[|, i=1,…,\[LeftBracketingBar]⟨(OverBar[D])⟩\[RightBracketingBar]])⟩}, {X(Underscript[>, N])Y⇔((Underscript[∃, i=1,…,\[LeftBracketingBar]⟨(OverBar[D])⟩\[RightBracketingBar]])(∧{({{(Subscript[X, i])(Underscript[>, (Subscript[⟨(OverBar[D])⟩, i])])(Subscript[Y, i])}, {(Underscript[∀, j=1,…,i-1])((Subscript[X, j])=(Subscript[Y, j]))}})}))}, {X(Underscript[*, N])Y=⟨(Subscript[X, i])(Underscript[*, (Subscript[⟨(OverBar[D])⟩, i])])(Subscript[Y, i])(Underscript[|, i=1,…,\[LeftBracketingBar]⟨(OverBar[D])⟩\[RightBracketingBar]])⟩}})}})
	]}, {A\[Cross]B=CartesianProduct[A,B]}})]

Free Vector Space

Definition["Free Vector Space",any[K,B],
FreeVecSpc[K,B]=Functor[V,any[c,d,x,y,ξ,η,(OverBar[x]),(OverBar[y])],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, V])[x]⟺(∧{({{is–tuple[x]}, {(Underscript[∀, i=1,…,\[LeftBracketingBar]x\[RightBracketingBar]])(∧{({{is–tuple[(Subscript[x, i])]}, {\[LeftBracketingBar](Subscript[x, i])\[RightBracketingBar]=2}, {(Underscript[is–coeff, V])[(Subscript[((Subscript[x, i])), 1])]}, {(Underscript[is–bvec, V])[(Subscript[((Subscript[x, i])), 2])]}})})}, {(Underscript[∀, i=1,…,\[LeftBracketingBar]x\[RightBracketingBar]-1])(Subscript[((Subscript[x, i])), 2])(Underscript[>, B])(Subscript[((Subscript[x, i+1])), 2])}})})}, {(Underscript[is–bvec, V])[ξ]⇔(Underscript[∈, B])[ξ]}, {(Underscript[is–coeff, V])[c]⇔((Underscript[∈, K])[c]∧c≠(Underscript[0, K]))}, {(Underscript[bvec, V])[ξ]=⟨⟨(Underscript[1, K]),ξ⟩⟩}, {(Underscript[0, V])=⟨⟩}, {⟨⟩(Underscript[+, V])y=y}, {x(Underscript[+, V])⟨⟩=x}, {⟨⟨c,ξ⟩,(OverBar[x])⟩(Underscript[+, V])⟨⟨d,η⟩,(OverBar[y])⟩={({{⟨c,ξ⟩⌣(⟨(OverBar[x])⟩(Underscript[+, V])⟨⟨d,η⟩,(OverBar[y])⟩), ⇐, ξ(Underscript[>, B])η}, {⟨d,η⟩⌣(⟨⟨c,ξ⟩,(OverBar[x])⟩(Underscript[+, V])⟨(OverBar[y])⟩), ⇐, η(Underscript[>, B])ξ}, {⟨c(Underscript[+, K])d,ξ⟩⌣(⟨(OverBar[x])⟩(Underscript[+, V])⟨(OverBar[y])⟩), ⇐, (ξ=η)∧c(Underscript[+, K])d≠(Underscript[0, K])}, {⟨(OverBar[x])⟩(Underscript[+, V])⟨(OverBar[y])⟩, ⇐, otherwise}})} }, {V[+][x,(OverBar[x])]=x(Underscript[+, V])V[+][(OverBar[x])]}, {(Underscript[-, V])⟨⟩=⟨⟩}, {(Underscript[-, V])⟨⟨c,ξ⟩,(OverBar[x])⟩=⟨(Underscript[-, K])c,ξ⟩⌣((Underscript[-, V])⟨(OverBar[x])⟩)}, {x(Underscript[-, V])y=x(Underscript[+, V])((Underscript[-, V])y)}, {0(Underscript[·, V])y(* scalar multiplication *)=⟨⟩}, {c(Underscript[·, V])⟨⟩=⟨⟩}, {c(Underscript[·, V])⟨⟨d,η⟩,(OverBar[y])⟩=⟨c(Underscript[*, K])d,η⟩⌣c(Underscript[·, V])⟨(OverBar[y])⟩}, {y(Underscript[·, V])0=⟨⟩}, {⟨⟩(Underscript[·, V])c=⟨⟩}, {⟨⟨c,ξ⟩,(OverBar[x])⟩(Underscript[·, V])d=⟨c(Underscript[*, K])d,ξ⟩⌣⟨(OverBar[x])⟩(Underscript[·, V])d}, {(Underscript[coord, V])[⟨⟩,x](* coordinate wrt a basis *)=⟨⟩}, {(Underscript[coord, V])[⟨⟨c,ξ⟩,(OverBar[x])⟩,ξ]=c}, {(Underscript[coord, V])[⟨⟨c,ξ⟩,x,(OverBar[x])⟩,η]=(Underscript[coord, V])[⟨x,(OverBar[x])⟩,η]}, {(Underscript[coord, V])[⟨⟨c,ξ⟩⟩,η]=(Underscript[0, K])}})}})]]

Monoid Algebra

Definition["Monoid Algebra",any[K,W],
MonoidAlgebra[K,W]=where[V=FreeVecSpc[K,W],
Functor[P,any[c,d,f,g,ξ,η,(OverBar[f]),(OverBar[m]),(OverBar[n])],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, P])[f]⟺(Underscript[∈, V])[f]}, {(Underscript[is–bvec, P])[ξ]⇔(Underscript[is–bvec, V])[ξ]}, {(Underscript[is–coeff, P])[c]⇔(Underscript[is–coeff, V])[c]}, {(Underscript[0, P])=(Underscript[0, V])}, {P[+][(OverBar[f])]=V[+][(OverBar[f])]}, {(Underscript[-, P])f=(Underscript[-, V])f}, {f(Underscript[-, P])g=f(Underscript[-, V])g}, {(Underscript[ew, P])[ξ]=(Underscript[bvec, V])[ξ]}, {c(Underscript[·, P])f=c(Underscript[·, V])f}, {(Underscript[coord, P])[f,ξ]=(Underscript[coord, V])[f,ξ]}, {(Underscript[1, P])=⟨⟨(Underscript[1, K]),(Underscript[⬚, W])⟩⟩}, {⟨⟩(Underscript[*, P])g(* multiplication of two polynomials *)=⟨⟩}, {f(Underscript[*, P])⟨⟩=⟨⟩}, {⟨⟨c,ξ⟩,(OverBar[m])⟩(Underscript[*, P])⟨⟨d,η⟩,(OverBar[n])⟩=(⟨⟨c(Underscript[*, K])d,ξ(Underscript[*, W])η⟩⟩(Underscript[+, P])⟨⟨c,ξ⟩⟩(Underscript[*, P])⟨(OverBar[n])⟩)(Underscript[+, P])⟨(OverBar[m])⟩(Underscript[*, P])⟨⟨d,η⟩,(OverBar[n])⟩}, {P[*][f,(OverBar[f])]=f(Underscript[*, P])P[*][(OverBar[f])]}, {(⟨⟩(Underscript[>, P])g)(* ordering *)⇔False}, {(⟨⟨c,ξ⟩,(OverBar[m])⟩(Underscript[>, P])⟨⟩)⇔True}, {(⟨⟨c,ξ⟩,(OverBar[m])⟩(Underscript[>, P])⟨⟨d,η⟩,(OverBar[n])⟩)⇔(∨{({{ξ(Underscript[>, W])η}, {∧{({{ξ=η}, {c(Underscript[>, K])d}})} }, {∧{({{ξ=η}, {c=d}, {⟨(OverBar[m])⟩(Underscript[>, P])⟨(OverBar[n])⟩}})} }})} )}, {(Underscript[rrdm, P])[⟨⟩,g](* right reduction multiplier *)=(Underscript[0, P])}, {(Underscript[rrdm, P])[⟨⟨c,ξ⟩,(OverBar[m])⟩,⟨⟩]=(Underscript[0, P])}, {(Underscript[rrdm, P])[⟨⟨c,ξ⟩,(OverBar[m])⟩,⟨⟨d,η⟩,(OverBar[n])⟩]={({{⟨⟨(Underscript[rdm, K])[c,d],(Underscript[rquot, W])[ξ,η]⟩⟩, ⇐, (Underscript[rdm, K])[c,d]≠(Underscript[0, K])∧η(Underscript[∣, W])ξ}, {(Underscript[0, P]), ⇐, otherwise}})}}, {(Underscript[lrdm, P])[⟨⟩,f](* left reduction multiplier *)=(Underscript[0, P])}, {(Underscript[lrdm, P])[⟨⟨c,ξ⟩,(OverBar[m])⟩,⟨⟩]=(Underscript[0, P])}, {(Underscript[lrdm, P])[⟨⟨c,ξ⟩,(OverBar[m])⟩,⟨⟨d,η⟩,(OverBar[n])⟩]={({{⟨⟨(Underscript[1, K]),(Underscript[lquot, W])[ξ,η]⟩⟩, ⇐, (Underscript[rdm, K])[c,d]≠(Underscript[0, K])∧η(Underscript[∣, W])ξ}, {(Underscript[0, P]), ⇐, otherwise}})}}, {(Underscript[lcrd, P])[⟨⟨c,ξ⟩,(OverBar[m])⟩,⟨⟨d,η⟩,(OverBar[n])⟩](* least common reducible *)=⟨⟨(Underscript[lcrd, K])[c,d],(Underscript[lcm, W])[ξ,η]⟩⟩}})}})
]]]

Reduction

Definition["Groebner Extension",any[P],
GB[P]=Functor[⟨G,extends[P]⟩,any[c,f,g,k,l,r,t,ξ,(OverBar[f]),(OverBar[m]),S],
	({{𝕤=⟨⟩}, {({{f(Underscript[>, G])g⇔f(Underscript[>, P])g}, {(Underscript[0, G])=(Underscript[0, P])}, {(Underscript[1, G])=(Underscript[1, P])}, {G[*][f,(OverBar[f])]=P[*][f,(OverBar[f])]}, {(Underscript[hredp, G])[f,g](* head reduction modulo polynomial *)=f(Underscript[-, P])(Underscript[lrdm, P])[f,g](Underscript[*, P])g(Underscript[*, P])(Underscript[rrdm, P])[f,g]}, {(Underscript[hredp, G])[f,g,l,r]=f(Underscript[-, P])l(Underscript[*, P])g(Underscript[*, P])r}, {(Underscript[hred, G])[f,S](* head reduction modulo system *)=where[q=S[f],
(Underscript[hredp, G])[f,(Subscript[q, 2]),(Subscript[q, 1]),(Subscript[q, 3])]]}, {(Underscript[sred, G])[⟨⟩,S,t](* step reduction modulo system at given position *)=(Underscript[0, P])}, {(Underscript[sred, G])[⟨⟨c,ξ⟩,(OverBar[m])⟩,S,1]=(Underscript[hred, G])[⟨⟨c,ξ⟩,(OverBar[m])⟩,S]}, {(Underscript[sred, G])[⟨⟨c,ξ⟩,(OverBar[m])⟩,S,t]=⟨c,ξ⟩⌣(Underscript[sred, G])[⟨(OverBar[m])⟩,S,t-1]}, {(Underscript[sred, G])[f,S](* step reduction modulo system *)=(Underscript[cred, G])[f,S,1]}, {(Underscript[cred, G])[f,S,k](* complete reduction modulo system at given position *)=where[f1=(Underscript[sred, G])[f,S,k],
{({{(Underscript[cred, G])[f,S,k+1], ⇐, (f1=f)∧(k<\[LeftBracketingBar]f\[RightBracketingBar])}, {f1, ⇐, otherwise}})} ]}, {(Underscript[ tred, G])[f,S] (* total reduction modulo infinite system *)=where[q=(Underscript[sred, G])[f,S],
{({{(Underscript[tred, G])[q,S], ⇐, q≠f}, {f, ⇐, otherwise}})} ] }})}})]]

Integro-Diff Operators for ODEs

MakeBoxes&MakeExpressions (Formatting&Parsing)

MakeExpression[RowBox[{SubscriptBox["∂",Q_],p_}],StandardForm]:=
MakeExpression[RowBox[{RowBox[{Q,"[","™Der","]"}],"[",p,"]"}],StandardForm];

MakeExpression[RowBox[{SubscriptBox["∫",Q_],p_}],StandardForm]:=
MakeExpression[RowBox[{RowBox[{Q,"[","™Int","]"}],"[",p,"]"}],StandardForm];

MakeBoxes[Q_[™Der][p_],StandardForm]:=
RowBox[{SubscriptBox["∂",MakeBoxes[Q,StandardForm]],MakeBoxes[p,StandardForm]}];

MakeBoxes[Q_[™Int][p_],StandardForm]:=
RowBox[{SubscriptBox["∫",MakeBoxes[Q,StandardForm]],MakeBoxes[p,StandardForm]}];

MakeExpression[RowBox[{"⌈",x_,"⌉"}],StandardForm]:=MakeExpression[RowBox[{"™Ceiling","[",x,"]"}],StandardForm];

MakeBoxes[™Ceiling[x_],StandardForm]:=RowBox[{"⌈",MakeBoxes[x,StandardForm],"⌉"}];

MakeExpression[RowBox[{"⌊",x_,"⌋"}],StandardForm]:=MakeExpression[RowBox[{"™Floor","[",x,"]"}],StandardForm];

MakeBoxes[™Floor[x_],StandardForm]:=RowBox[{"⌊",MakeBoxes[x,StandardForm],"⌋"}];

Additional Mathematica Built-ins

mytimes

Clear[mytimes];

mytimes/:MakeBoxes[mytimes[x_],StandardForm]:=MakeBoxes[x,StandardForm];

mytimes/:MakeBoxes[mytimes[x_,y_],StandardForm]:=RowBox[{MakeBoxes[x,StandardForm],MakeBoxes[y,StandardForm]}];

mytimes/:MakeBoxes[mytimes[x_,y_,z__],StandardForm]:=RowBox[{MakeBoxes[x,StandardForm],MakeBoxes[y,StandardForm],MakeBoxes[mytimes[z],StandardForm]}];

mygrid

Clear[MakeCaseGrid];

MakeCaseGrid[{}]={};

MakeCaseGrid[{•mycase[e_,c_],others___•mycase}]:=Prepend[MakeCaseGrid[{others}],{MakeBoxes[e,StandardForm],"⇐",MakeBoxes[c,StandardForm]}];

MakeBoxes[™MyCaseDistinction[c__•mycase],StandardForm]:=RowBox[{RowBox[{StyleBox["{",SpanMaxSize->Infinity],GridBox[MakeCaseGrid[{c}],GridBoxAlignment->{"Columns"->{{Left}},"ColumnsIndexed"->{},"Rows"->{{Baseline}},"RowsIndexed"->{}}],StyleBox["}",ShowContents->False]}]," "}];

Printf

Clear[Printf];

Printf[p_]:=Compute[(Underscript[AsGreen, 𝕘])[p]];

printf

Clear[printf];

printf[p_]:=Compute[(Underscript[AsGreen, 𝕘𝕞])[p]];

CharRoots

Clear[CharacteristicRoots,MyRoots,MyList];

Unprotect[Power];(0^0)=1;

Begin["System`"];

Clear[Tma2Mma,Mma2Tma,Tma2MmaRules,Mma2TmaRules,MathematicaSimplify,MathematicaExpand,MathematicaFactor];

Tma2MmaRules=KBToRules[Built–in["Operators"]]~Join~{™E->E,™I->I,™Derivative->Derivative};

Tma2Mma[term_]:=
term/.Tma2MmaRules;

Mma2TmaRules={Derivative->™Derivative};

Mma2Tma[term_]:=
term/.Mma2TmaRules;

MathematicaSimplify[term_]:=
Mma2Tma[System`Simplify[Tma2Mma[term]]//TrigToExp];

MathematicaExpand[term_]:=
Mma2Tma[Expand[Tma2Mma[term]]//TrigToExp];

MathematicaFactor[term_]:=
Mma2Tma[Factor[Tma2Mma[term]]];

CharacteristicRoots[p_]:=
Module[{newP,newroots,a,l,m,n,r,A,translate,reduce},
newP=p/.{™Plus->Plus,™Power->Power,™Times->Times,™I->I,™E->E};
newroots=With[{eqn=MyRoots[newP]},
MathematicaSimplify/@MyList[eqn]
];
translate[l_]:=Map[™Tuple[#,1]&,l];
reduce[™Tuple[l___,™Tuple[a_,m_],™Tuple[a_,n_],r___]]:=reduce[™Tuple[l,™Tuple[a,m+n],r]];
reduce[A_]:=A;
reduce[translate[Sort[newroots]]]
]

End[];

MyRoots[S_]:=Module[{newS},
newS=S/.{™E->E,™I->I,™Plus->Plus,™Power->Power};
Roots[newS==0,™D]];

MyList[™D==S_]:=™Tuple[S];

MyList[™D==S_||T__]:=S⌣MyList[T];

MyList[™D==S_,T__]:=S⌣MyList[T];

Built–in["CharRoots",
™CharacteristicRoots->CharacteristicRoots]

lc, deg

Clear[lc,deg];

Begin["System`"];

lc[p_]:=Coefficient[p,™D,Exponent[p,™D]];

deg[p_]:=Exponent[p,™D];

End[];

Built–in["Leading Coefficient",
™lc->lc]

Built–in["Degree",
™deg->deg]

MyInverse

Clear[MyInverse];

Begin["System`"];

MyInverse[A_]:=MathematicaSimplify[Inverse[A/.{™Tuple->List}]/.List->™Tuple];

End[];

Built–in["Matrix Inverse",
™MatrixInverse->MyInverse]

MyTranspose, MyReduce

Clear[MyReduce,MyTranspose];

Begin["System`"];

MyReduce[U_,m_,n_]:=Module[{newU},
newU=U/.{™Tuple->List};
Transpose[RowReduce[Transpose[Join[Transpose[newU],Transpose[Join[Table[0,{i,m},{j,m}],IdentityMatrix[m]]],IdentityMatrix[n]]]]]]/.{List->™Tuple};

MyTranspose[A_]:=Transpose[A/.{™Tuple->List}]/.List->™Tuple;

End[];

Built–in["MyReduce",
™Reduce->MyReduce]

Built–in["MyTranspose",
™Transpose->MyTranspose]

MyRowReduce

Clear[MyRowReduce];

Begin["System`"];

MyRowReduce[A_]:=RowReduce[A/.™Tuple->List]/.List->™Tuple;

End[];

Built–in["Row Reduce",
™MyRowReduce->MyRowReduce]

Built–ins

Begin["System`"];

Clear[CoeffQ,Mon,Coeff,SplitPoly,FuncOrder];

CoeffQ[expr_]:=FreeQ[expr,x];

Mon[t1_,t2___]:=Mon[t1*t2];

Mon[Times[c_?CoeffQ,t__]]:=Mon[t];

Mon[Times[c_,t__]]:=Mon[c]*Mon[t];

Mon[Power[E,Plus[λ_?NumericQ,μ_]]]:=Power[E,μ];

Mon[c_?CoeffQ]:=1;

Mon[s_]:=s;

Coeff[t1_,t2___]:=Coeff[t1*t2];

Coeff[Times[c_,t__]]:=Coeff[c]*Coeff[t];

Coeff[(E^(Plus[λ_?NumericQ,μ_]))]:=(E^λ);

Coeff[s_?CoeffQ]:=s ;

Coeff[s_]:=1 ;

SplitPoly[c_?CoeffQ]:={{c,mma[1]}};

SplitPoly[Plus[t1_,t2___]]:=Join[SplitPoly[t1],Flatten[SplitPoly/@{t2},1]];

SplitPoly[0]:=™Tuple[];

SplitPoly[s_]:={{FullSimplify[Coeff[s]],mma[Mon[s]]}};

SplitPoly[t1_,t2___]:=SplitPoly/@{t1,t2};

MySplitPoly[A_]:=SplitPoly[Expand[A]]/.List->™Tuple;

FuncOrder[p_,p_]:=False;

FuncOrder[p_,q_]:=OrderedQ[{p,q}];

FuncQ[mma[t___]]:=True;

FuncQ[s_]:=False;

Clear[ToMma];

ToMma[⟨m_,r___⟩]:=Plus[ToMma[m],ToMma[r]];

ToMma[⟨c_,mma[m_]⟩]:=Times[c,m];

ToMma[t1_,t2__]:=Plus[ToMma[t1],ToMma[t2]];

ToMma[⟨⟩]:=0;

ToMma[]:=0;

ToMma[c_]:=c;

Clear[MmaPlus,MmaMinus,MmaTimes,MmaDif,MmaInt];

MmaPlus[p_,q_]:=MySplitPoly[ToMma[p]+ToMma[q]];

MmaMinus[p_]:=MySplitPoly[-ToMma[p]];

MmaMinus[p_,q_]:=MySplitPoly[ToMma[p]-ToMma[q]];

MmaTimes[p_,q_]:=MySplitPoly[ToMma[p]*ToMma[q]];

MmaDiff[p_]:=MySplitPoly[Expand[D[ToMma[p],x]]];

MmaInt[p_]:=MySplitPoly[Expand[TrigToExp[Integrate[ToMma[p],{x,0,x}]]]];

MmaSubs[p_,c_]:=Subs[ToMma[p],c];

Subs[p_,c_]:=p/.x->c;

MmaSimplify[p_]:=FullSimplify[p];

SetOptions[TransformResultFromMma,PlusNegativeAsMinus->True,TimesNegPowerAsFraction->False,PowerRationalAsRoot->False,NegPowerAsReciprocal->False];

TmaTRFM[p_]:=TransformResultFromMma[p/.{™Times->Times,™Plus->Plus,™Minus->Minus,™Power->Power}];

Clear[ToM,ToW,ToMon];

ToM[⟨m_,r___⟩]:=Plus[ToMon[m],ToM[⟨r⟩]];

ToM[⟨⟩]:=0;

ToM[t1_,t2__]:=Plus[ToMon[t1],ToMon[t2]];

ToM[]:=0;

ToMon[⟨c_,m_⟩]:=Times[c,ToW[m]];

ToMon[]:=0;

ToW[⟨"∂",r___⟩]:=Times[™D,ToW[⟨r⟩]];

ToW[⟨⟩]:=1;

End[];

Built–in["FuncOrder",
func–less->FuncOrder]

Built–in["FuncQ",
is–func->FuncQ]

Built–in["MmaDiff",
mma–diff->MmaDiff]

Built–in["MmaInt",
mma–int->MmaInt]

Built–in["ToMma",
™toMma->ToMma]

Built–in["ToM",
™ToM->ToM]

Built–in["MmaPlus",
mma–plus->MmaPlus]

Built–in["MmaMinus",
mma–minus->MmaMinus]

Built–in["MmaTimes",
mma–times->MmaTimes]

Built–in["MmaSubs",
mma–subs->MmaSubs]

Built–in["MmaSimplify",
mma–simplify->MmaSimplify]

Built–in["TmaTRFM",
tma–trfm->TmaTRFM]

Built–in["TmaSplit",
tma–split->MySplitPoly]

Wronskian Matrix & Determinants

Clear[WronMinTma,WronMat,WronDet,DiagMin];

Begin["System`"];

WronMat[f_List]:=
Module[{n},
n=Length[f];
Transpose[Table[D[#,{x,i}],{i,0,n-1}]&/@f]
];

WronDet[f_]:=Det[WronMat[f]]//FullSimplify;

LastMin[M_?MatrixQ,i_Integer]:=Drop[#,{i}]&/@Most[M];

WronMin[f_List]:=Module[{W,d,m,n},
W=WronMat[f];
d=Det[W]//FullSimplify;
n=Length[f];
m=Table[FullSimplify[(((-1))^(Length[W]+i))*Det[LastMin[W,i]]],{i,1,n}];
{MySplitPoly[1/d],MySplitPoly/@m}/.List->™Tuple];

ToMmaL[A_]:=ToMma/@A;

WronMinTma[A_]:=WronMin[ToMmaL[A]/.{AngleBracket->List,™Tuple->List}]/.List->™Tuple;

End[];

Built–in["WronMinTma",
tma–wronmin->WronMinTma]

Matrix Ops

Definition["Matrix Ops",any[𝒜],
MatOps[𝒜]=Functor[ℳ,any[l,m,p,α,(OverBar[m]),(OverBar[p]),(OverBar[α]),M,N],
	({{𝕤=⟨⟩}, {({{⟨⟩(Underscript[·, ℳ])l(* multiplication of matrix from K with vector from 𝒜 *)=⟨⟩}, {⟨⟨α,(OverBar[α])⟩,(OverBar[m])⟩(Underscript[·, ℳ])l=⟨(Subscript[⟨⟨α,(OverBar[α])⟩,(OverBar[m])⟩, i])(Underscript[·, ℳ])l(Underscript[|, i=1,…,\[LeftBracketingBar]⟨⟨α,(OverBar[α])⟩,(OverBar[m])⟩\[RightBracketingBar]])⟩}, {⟨(OverBar[α])⟩(Underscript[·, ℳ])⟨⟩(* multiplication of vector from K with vector from 𝒜 *)=⟨⟩}, {⟨α,(OverBar[α])⟩(Underscript[·, ℳ])⟨m,(OverBar[m])⟩=(Underscript[(Subscript[Ω, (Underscript[0, 𝒜])]^(Underscript[+, 𝒜])), i=1,…,\[LeftBracketingBar]⟨α,(OverBar[α])⟩\[RightBracketingBar]])((Subscript[⟨α,(OverBar[α])⟩, i])(Underscript[·, 𝒜])(Subscript[⟨m,(OverBar[m])⟩, i]))}, {⟨(OverBar[α])⟩(Underscript[*, ℳ])⟨⟩(* multiplication of two vectors from 𝒜 *)=(Underscript[0, 𝒜])}, {⟨α,(OverBar[α])⟩(Underscript[*, ℳ])⟨p,(OverBar[p])⟩=(Underscript[(Subscript[Ω, (Underscript[0, 𝒜])]^(Underscript[+, 𝒜])), i=1,…,\[LeftBracketingBar]⟨α,(OverBar[α])⟩\[RightBracketingBar]])((Subscript[⟨α,(OverBar[α])⟩, i])(Underscript[*, 𝒜])(Subscript[⟨p,(OverBar[p])⟩, i]))}, {⟨(OverBar[α])⟩(Underscript[\[Cross], ℳ])⟨⟩(* multiplication of two vectors from 𝒜 *)=(Underscript[0, 𝒜])}, {⟨α,(OverBar[α])⟩(Underscript[\[Cross], ℳ])p=⟨(Subscript[⟨α,(OverBar[α])⟩, i])(Underscript[*, 𝒜])p(Underscript[|, i=1,…,\[LeftBracketingBar]⟨α,(OverBar[α])⟩\[RightBracketingBar]])⟩}, {M(Underscript[⊗, ℳ])N(* multiplication of two matrices *)=⟨⟨(Underscript[(Subscript[Ω, (Underscript[0, 𝒜])]^(Underscript[+, 𝒜])), r=1,…,\[LeftBracketingBar]N\[RightBracketingBar]])((Subscript[M, i,r])(Underscript[*, 𝒜])(Subscript[N, r,j]))(Underscript[|, j=1,…,\[LeftBracketingBar](Subscript[N, 1])\[RightBracketingBar]])⟩(Underscript[|, i=1,…,\[LeftBracketingBar]M\[RightBracketingBar]])⟩}, {(Underscript[∇, ℳ])M(* inverse of a matrix *)=™MatrixInverse[M]}})}})]]

Sorting

Definition["Ordering",any[D],
MergeSort[D]=Functor[E,any[x,y,(OverBar[x]),(OverBar[y])],
	({{𝕤=⟨⟩}, {({{(Underscript[merge, E])[⟨(OverBar[x])⟩,⟨⟩]=⟨(OverBar[x])⟩}, {(Underscript[merge, E])[⟨⟩,⟨(OverBar[y])⟩]=⟨(OverBar[y])⟩}, {(Underscript[merge, E])[⟨x,(OverBar[x])⟩,⟨y,(OverBar[y])⟩]=
{({{x⌣(Underscript[merge, E])[⟨(OverBar[x])⟩,⟨y,(OverBar[y])⟩], ⇐, x(Underscript[>, D])y}, {y⌣(Underscript[merge, E])[⟨x,(OverBar[x])⟩,⟨(OverBar[y])⟩], ⇐, otherwise}})}}, {(Underscript[mergelim, E])[⟨(OverBar[x])⟩,⟨⟩]=⟨(OverBar[x])⟩}, {(Underscript[mergelim, E])[⟨⟩,⟨(OverBar[y])⟩]=⟨(OverBar[y])⟩}, {(Underscript[mergelim, E])[⟨x,(OverBar[x])⟩,⟨y,(OverBar[y])⟩]=
{({{x⌣(Underscript[mergelim, E])[⟨(OverBar[x])⟩,⟨(OverBar[y])⟩], ⇐, x=y}, {y⌣(Underscript[mergelim, E])[⟨x,(OverBar[x])⟩,⟨(OverBar[y])⟩], ⇐, otherwise}})}}, {(Underscript[splitlist, E])[x]={({{⟨⟨(Subscript[x, i])(Underscript[|, i=1,…,\[LeftBracketingBar]x\[RightBracketingBar]/2])⟩,⟨(Subscript[x, i])(Underscript[|, i=\[LeftBracketingBar]x\[RightBracketingBar]/2+1,…,\[LeftBracketingBar]x\[RightBracketingBar]])⟩⟩, ⇐, 2∣\[LeftBracketingBar]x\[RightBracketingBar]}, {⟨⟨(Subscript[x, i])(Underscript[|, i=1,…,(\[LeftBracketingBar]x\[RightBracketingBar]-1)/2])⟩,⟨(Subscript[x, i])(Underscript[|, i=(\[LeftBracketingBar]x\[RightBracketingBar]+1)/2,…,\[LeftBracketingBar]x\[RightBracketingBar]])⟩⟩, ⇐, otherwise}})}}, {(Underscript[sort, E])[⟨x⟩]=⟨x⟩}, {(Underscript[sort, E])[x]=where[split=(Underscript[splitlist, E])[x],
(Underscript[merge, E])[(Underscript[sort, E])[(Subscript[split, 1])],(Underscript[sort, E])[(Subscript[split, 2])]]]}, {(Underscript[elimred, E])[⟨x⟩]=⟨x⟩}, {(Underscript[elimred, E])[x]=where[split=(Underscript[splitlist, E])[x],
(Underscript[mergelim, E])[(Underscript[elimred, E])[(Subscript[split, 1])],(Underscript[elimred, E])[(Subscript[split, 2])]]]}})}})]]

Basis, Basis for Characters, Double Basis, ⥛

Definition["Basis",any[ℱ],
Basis[ℱ]=Functor[B,any[ξ,η],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, B])[⟨"⌈⌉",ξ⟩]⟺(Underscript[is–bvec, ℱ])[ξ]}, {⟨"⌈⌉",ξ⟩(Underscript[>, B])⟨"⌈⌉",η⟩⇔(Underscript[ew, ℱ])[ξ](Underscript[>, ℱ])(Underscript[ew, ℱ])[η]}})}})]]

Definition["Basis for Characters",any[K],
CharBasis[K]=Functor[C,any[c,d],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, C])[⟨"⌊⌋",c⟩]⟺((Underscript[∈, K])[c])}, {⟨"⌊⌋",c⟩(Underscript[>, C])⟨"⌊⌋",d⟩⇔c(Underscript[>, K])d}, {𝔼=⟨"⌊⌋",0⟩}})}})]]

Definition["Double Basis",any[B,C],
DoubleBasis[B,C]=Functor[D,any[d,e],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, D])[d]⟺(((Underscript[∈, B])[d])∨((Underscript[∈, C])[d]))}, {⟨"⌈⌉",d⟩(Underscript[>, D])⟨"⌈⌉",e⟩⇔⟨"⌈⌉",d⟩(Underscript[>, B])⟨"⌈⌉",e⟩}, {⟨"⌊⌋",d⟩(Underscript[>, D])⟨"⌊⌋",e⟩⇔⟨"⌊⌋",d⟩(Underscript[>, C])⟨"⌊⌋",e⟩}, {⟨"⌈⌉",d⟩(Underscript[>, D])⟨"⌊⌋",e⟩⇔True}, {⟨"⌊⌋",d⟩(Underscript[>, D])⟨"⌈⌉",e⟩⇔False}})}})]]

Definition["⥛",any[l,L],
l⥛L=Functor[E,any[x,y],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, E])[x]⟺((Underscript[∈, L])[x]∨(x=l))}, {l(Underscript[>, E])x⇔(l≠x)}, {y(Underscript[>, E])l⇔False}, {x(Underscript[>, E])y⇔x(Underscript[>, L])y}})}})]]

Green System, Quotient Algebra, Integro-Differential Algebra

The following functor encodes the Green's ideal.

({{fg -> f·g, ∂f -> ∂·f+f∂, ∫f∫ -> (∫·f)∫-∫(∫·f)}, {φψ -> ψ, ∂φ -> 0, ∫f∂ -> f-∫(∂·f)-(E·f)E}, {φf -> (φ·f)φ, ∂∫ -> 1, ∫fφ -> (∫·f)φ}})

Definition["Green System",any[ℱ,K],
GreenSystem[ℱ,K]=where[𝒜=FreeIntDiffOp[ℱ,K],
Functor[Gr,any[c,f,g,φ,ψ,ξ,(OverBar[q]),(OverBar[u]),(OverBar[v]),A],
	({{𝕤=⟨⟩}, {({{(Underscript[rule, Gr])[⟨(OverBar[u]),⟨"⌈⌉",f⟩,⟨"⌈⌉",g⟩,(OverBar[v])⟩]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨⟨"⌈⌉",f⟩,⟨"⌈⌉",g⟩⟩⟩⟩(Underscript[-, 𝒜])(Underscript[fun–to–op, 𝒜])[⟨⟨(Underscript[1, K]),f⟩⟩(Underscript[*, ℱ])⟨⟨(Underscript[1, K]),g⟩⟩],⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),⟨"⌊⌋",φ⟩,⟨"⌊⌋",ψ⟩,(OverBar[v])⟩]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨⟨"⌊⌋",φ⟩,⟨"⌊⌋",ψ⟩⟩⟩⟩(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨⟨"⌊⌋",ψ⟩⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),⟨"⌊⌋",φ⟩,⟨"⌈⌉",f⟩,(OverBar[v])⟩]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨⟨"⌊⌋",φ⟩,⟨"⌈⌉",f⟩⟩⟩⟩(Underscript[-, 𝒜])(⟨⟨"⌊⌋",φ⟩⟩(Underscript[⋄, 𝒜])⟨⟨(Underscript[1, K]),f⟩⟩)(Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨⟨"⌊⌋",φ⟩⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"∂",⟨"⌈⌉",f⟩,(OverBar[v])⟩]=⟨⟨(OverBar[u])⟩,(⟨⟨(Underscript[1, K]),⟨"∂",⟨"⌈⌉",f⟩⟩⟩⟩(Underscript[-, 𝒜])⟨"∂"⟩(Underscript[⋄, 𝒜])⟨⟨(Underscript[1, K]),f⟩⟩)(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨⟨"⌈⌉",f⟩,"∂"⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"∂",⟨"⌊⌋",φ⟩,(OverBar[v])⟩]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"∂",⟨"⌊⌋",φ⟩⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"∂","∫",(OverBar[v])⟩]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"∂","∫"⟩⟩⟩(Underscript[-, 𝒜])(Underscript[1, 𝒜]),⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"∫",⟨"⌈⌉",f⟩,"∫",(OverBar[v])⟩]=
⟨⟨(OverBar[u])⟩,(⟨⟨(Underscript[1, K]),⟨"∫",⟨"⌈⌉",f⟩,"∫"⟩⟩⟩(Underscript[-, 𝒜])⟨"∫"⟩(Underscript[⋄, 𝒜])⟨⟨(Underscript[1, K]),f⟩⟩(Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨"∫"⟩⟩⟩)(Underscript[+, 𝒜])⟨⟨(Underscript[1, K]),⟨"∫"⟩⟩⟩(Underscript[*, 𝒜])⟨"∫"⟩(Underscript[⋄, 𝒜])⟨⟨(Underscript[1, K]),f⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"∫",⟨"⌈⌉",f⟩,"∂",(OverBar[v])⟩]=
⟨⟨(OverBar[u])⟩,((⟨⟨(Underscript[1, K]),⟨"∫",⟨"⌈⌉",f⟩,"∂"⟩⟩⟩(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨⟨"⌈⌉",f⟩⟩⟩⟩)(Underscript[+, 𝒜])⟨⟨(Underscript[1, K]),⟨"∫"⟩⟩⟩(Underscript[*, 𝒜])⟨"∂"⟩(Underscript[⋄, 𝒜])⟨⟨(Underscript[1, K]),f⟩⟩)(Underscript[+, 𝒜])(⟨𝔼⟩(Underscript[⋄, 𝒜])⟨⟨(Underscript[1, K]),f⟩⟩)(Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨𝔼⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"∫",⟨"⌈⌉",f⟩,⟨"⌊⌋",φ⟩,(OverBar[v])⟩]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"∫",⟨"⌈⌉",f⟩,⟨"⌊⌋",φ⟩⟩⟩⟩(Underscript[-, 𝒜])⟨"∫"⟩(Underscript[⋄, 𝒜])⟨⟨(Underscript[1, K]),f⟩⟩(Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨⟨"⌊⌋",φ⟩⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"∫","∫",(OverBar[v])⟩]=⟨⟨(OverBar[u])⟩,(⟨⟨(Underscript[1, K]),⟨"∫","∫"⟩⟩⟩(Underscript[-, 𝒜])⟨"∫"⟩(Underscript[⋄, 𝒜])(Underscript[1, ℱ])(Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨"∫"⟩⟩⟩)(Underscript[+, 𝒜])⟨⟨(Underscript[1, K]),⟨"∫"⟩⟩⟩(Underscript[*, 𝒜])⟨"∫"⟩(Underscript[⋄, 𝒜])(Underscript[1, ℱ]),⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"∫","∂",(OverBar[v])⟩]=⟨⟨(OverBar[u])⟩,(⟨⟨(Underscript[1, K]),⟨"∫","∂"⟩⟩⟩(Underscript[-, 𝒜])(Underscript[1, 𝒜]))(Underscript[+, 𝒜])⟨⟨(Underscript[1, K]),⟨𝔼⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"∫",⟨"⌊⌋",φ⟩,(OverBar[v])⟩]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"∫",⟨"⌊⌋",φ⟩⟩⟩⟩(Underscript[-, 𝒜])(⟨"∫"⟩(Underscript[⋄, 𝒜])(Underscript[1, ℱ]))(Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨⟨"⌊⌋",φ⟩⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),𝔼,⟨"⌊⌋",φ⟩,(OverBar[v])⟩]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨𝔼,⟨"⌊⌋",φ⟩⟩⟩⟩(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨⟨"⌊⌋",φ⟩⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),⟨"⌊⌋",φ⟩,𝔼,(OverBar[v])⟩]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨⟨"⌊⌋",φ⟩,𝔼⟩⟩⟩(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨𝔼⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),𝔼,⟨"⌈⌉",f⟩,(OverBar[v])⟩]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨𝔼,⟨"⌈⌉",f⟩⟩⟩⟩(Underscript[-, 𝒜])(⟨𝔼⟩(Underscript[⋄, 𝒜])⟨⟨(Underscript[1, K]),f⟩⟩)(Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨𝔼⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"∂",𝔼,(OverBar[v])⟩]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"∂",𝔼⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"∫",⟨"⌈⌉",f⟩,𝔼,(OverBar[v])⟩]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"∫",⟨"⌈⌉",f⟩,𝔼⟩⟩⟩(Underscript[-, 𝒜])⟨"∫"⟩(Underscript[⋄, 𝒜])⟨⟨(Underscript[1, K]),f⟩⟩(Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨𝔼⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),𝔼,𝔼,(OverBar[v])⟩]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨𝔼,𝔼⟩⟩⟩(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨𝔼⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),𝔼,"∫",(OverBar[v])⟩]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨𝔼,"∫"⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[𝒢, Gr])[⟨⟨c,ξ⟩,(OverBar[q])⟩]=where[l=⟨⟨(Underscript[1, K]),(Subscript[((Underscript[rule, Gr])[ξ]), 1])⟩⟩,m=c(Underscript[·, 𝒜])(Subscript[((Underscript[rule, Gr])[ξ]), 2]),r=⟨⟨(Underscript[1, K]),(Subscript[((Underscript[rule, Gr])[ξ]), 3])⟩⟩,
{({{⟨l,m,r⟩, ⇐, m≠(Underscript[0, 𝒜])}, {⟨l,(Underscript[0, 𝒜]),r⟩, ⇐, otherwise}})}]}})}})]]]

Definition["Groebner Basis Normal Form",any[G,S],
GBNF[G,S]=Functor[C,any[a,b,c,(OverBar[a]),ℬ,F],
	({{𝕤=⟨⟩}, {({{(Underscript[NF, C])[a]=(Underscript[tred, G])[a,S]}, {(Underscript[0, C])=(Underscript[0, G])}, {(Underscript[1, C])=(Underscript[1, G])}, {C[+][(OverBar[a])]=G[+][(OverBar[a])]}, {(Underscript[-, C])a=(Underscript[-, G])a}, {a(Underscript[-, C])b=a(Underscript[-, G])b}, {C[*][(OverBar[a])]=G[*][(OverBar[a])]}, {c(Underscript[·, C])a=c(Underscript[·, G])a}, {(Underscript[ew, C])[a]=(Underscript[ew, G])[a]}, {(Underscript[EvalMat, C])[ℬ,F]=(Underscript[EvalMat, G])[ℬ,F]}})}})
]]

Definition["Quotient Algebra",any[G],
QuotAlg[G]=Functor[Q,any[a,b,c,(OverBar[a]),ℬ,F],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, Q])[a]⟺((Underscript[NF, G])[a]=a)}, {(Underscript[0, Q])=(Underscript[0, G])}, {(Underscript[1, Q])=(Underscript[1, G])}, {Q[+][(OverBar[a])]=(Underscript[NF, G])[G[+][(OverBar[a])]]}, {(Underscript[-, Q])a=(Underscript[NF, G])[(Underscript[-, G])a]}, {a(Underscript[-, Q])b=(Underscript[NF, G])[a(Underscript[-, G])b]}, {Q[*][(OverBar[a])]=(Underscript[NF, G])[G[*][(OverBar[a])]]}, {c(Underscript[·, Q])a=(Underscript[NF, G])[c(Underscript[·, G])a]}, {(Underscript[ew, Q])[a]=(Underscript[ew, G])[a]}, {(Underscript[EvalMat, Q])[ℬ,F]=(Underscript[EvalMat, G])[ℬ,F]}})}})
]]

Definition["IntDiffOp",any[ℱ,K],
IntDiffOp[ℱ,K]=where[𝒜=FreeIntDiffOp[ℱ,K],
QuotAlg[GBNF[GB[𝒜],(Underscript[𝒢, GreenSystem[ℱ,K]])]]]
]

Exponential Polynomials

Exponential Polynomials

Definition["Exp Polys",any[K],
ExpPolys[K]=where[P=MonoidAlgebra[K,ℕ\[Cross]ℂM],
Functor[E,any[c,d,m,p,q,λ,ξ,(OverBar[m]),(OverBar[n])],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, E])[p]⟺(Underscript[∈, P])[p]}, {(Underscript[0, E])=(Underscript[0, P])}, {(Underscript[1, E])=(Underscript[1, P])}, {p(Underscript[>, E])q⇔p(Underscript[>, P])q}, {p(Underscript[+, E])q=p(Underscript[+, P])q}, {(Underscript[-, E])p=(Underscript[-, P])q}, {p(Underscript[-, E])q=p(Underscript[-, P])q}, {c(Underscript[·, E])p=c(Underscript[·, P])p}, {p(Underscript[*, E])q=p(Underscript[*, P])q}, {(Underscript[ew, E])[p]=(Underscript[ew, P])[p]}, {(Underscript[coord, E])[p,ξ]=(Underscript[coord, P])[p,ξ]}, {(Underscript[is–bvec, E])[ξ]⇔(Underscript[is–bvec, P])[ξ]}, {(Underscript[is–coeff, E])[c]⇔(Underscript[is–coeff, P])[c]}, {(Underscript[is–scal, E])[⟨⟨c,(Underscript[⬚, ℕ\[Cross]ℂM])⟩⟩]⇔(Underscript[is–coeff, P])[c]}, {(Underscript[is–scal, E])[p]⇔False}, {(Underscript[to–scal, ℱ])[⟨⟩]=(Underscript[0, K])}, {(Underscript[to–scal, E])[⟨⟨c,(Underscript[⬚, ℕ\[Cross]ℂM])⟩⟩]=c}, {(Underscript[eval, E])[⟨⟩,d]=(Underscript[0, K])}, {(Underscript[eval, E])[⟨⟨c,⟨⟩⟩⟩,d]=c}, {(Underscript[eval, E])[⟨⟨c,⟨0,λ⟩⟩⟩,d]=c(Underscript[*, K])(Underscript[exp, K])[λ(Underscript[*, K])d]}, {(Underscript[eval, E])[⟨⟨c,⟨m,λ⟩⟩,(OverBar[m])⟩,d]=c(Underscript[*, K])(Underscript[power, K])[d,m](Underscript[*, K])(Underscript[exp, K])[λ(Underscript[*, K])d](Underscript[+, K])(Underscript[eval, E])[⟨(OverBar[m])⟩,d]}, {(∂_E)⟨⟩=(Underscript[0, P])}, {(∂_E)⟨⟨c,⟨⟩⟩⟩=(Underscript[0, P])}, {(∂_E)⟨⟨c,⟨0,λ⟩⟩,(OverBar[n])⟩=λ(Underscript[·, P])⟨⟨c,⟨0,λ⟩⟩⟩(Underscript[+, P])(∂_E)⟨(OverBar[n])⟩}, {(∂_E)⟨⟨c,⟨m,λ⟩⟩,(OverBar[n])⟩=⟨⟨c(Underscript[*, K])m,⟨m-1,λ⟩⟩⟩(Underscript[+, P])λ(Underscript[·, P])⟨⟨c,⟨m,λ⟩⟩⟩(Underscript[+, P])(∂_E)⟨(OverBar[n])⟩}, {(∫_E)⟨⟩=(Underscript[0, P])}, {(∫_E)⟨⟨c,⟨⟩⟩⟩=⟨⟨c,⟨1,0⟩⟩⟩}, {(∫_E)⟨⟨c,⟨m,0⟩⟩,(OverBar[n])⟩=⟨⟨c(Underscript[/, K])(m+1),⟨m+1,0⟩⟩⟩(Underscript[+, P])(∫_E)⟨(OverBar[n])⟩}, {(∫_E)⟨⟨c,⟨0,λ⟩⟩,(OverBar[n])⟩=(⟨⟨c(Underscript[/, K])λ,⟨0,λ⟩⟩⟩(Underscript[-, P])⟨⟨c(Underscript[/, K])λ,⟨0,0⟩⟩⟩)(Underscript[+, P])(∫_E)⟨(OverBar[n])⟩}, {(∫_E)⟨⟨c,⟨m,λ⟩⟩,(OverBar[n])⟩=(⟨⟨c(Underscript[/, K])λ,⟨m,λ⟩⟩⟩(Underscript[-, P])(∫_E)m(Underscript[·, P])⟨⟨c(Underscript[/, K])λ,⟨m-1,λ⟩⟩⟩)(Underscript[+, P])(∫_E)⟨(OverBar[n])⟩}})}})]]]

Free Integro-Differential Algebra

Definition["FreeIntDiffOp",any[ℱ,K],
FreeIntDiffOp[ℱ,K]=where[ℳ=MonoidAlgebra[K,DegWords["∂"⥛("∫"⥛(DoubleBasis[Basis[ℱ],CharBasis[K]]))]],
Functor[𝒜,any[b,c,f,g,ξ,(OverBar[f]),(OverBar[m]),(OverBar[w]),ℬ,F],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, 𝒜])[f]⟺(Underscript[∈, ℳ])[f]}, {(Underscript[0, 𝒜])=(Underscript[0, ℳ])}, {𝒜[+][(OverBar[f])]=ℳ[+][(OverBar[f])]}, {(Underscript[-, 𝒜])f=(Underscript[-, ℳ])f}, {f(Underscript[-, 𝒜])g=f(Underscript[-, ℳ])g}, {c(Underscript[·, 𝒜])f=c(Underscript[·, ℳ])f}, {𝒜[*][(OverBar[f])]=ℳ[*][(OverBar[f])]}, {(Underscript[ew, 𝒜])[f]=(Underscript[ew, ℳ])[f]}, {(Underscript[lrdm, 𝒜])[f,g]=(Underscript[lrdm, ℳ])[f,g]}, {(Underscript[rrdm, 𝒜])[f,g]=(Underscript[rrdm, ℳ])[f,g]}, {f(Underscript[>, 𝒜])g⇔f(Underscript[>, ℳ])g}, {(Underscript[1, 𝒜])=⟨⟨(Underscript[1, K]),⟨⟩⟩⟩}, {(Underscript[to–scal, 𝒜])[⟨⟩]=0}, {(Underscript[to–scal, 𝒜])[⟨⟨c,(Underscript[⬚, DegWords["∂"⥛("∫"⥛(DoubleBasis[Basis[ℱ],CharBasis[K]]))]])⟩⟩]=c}, {(Underscript[op–to–fun, 𝒜])[⟨⟩](* integro-diff operators to functions *)=⟨⟩}, {(Underscript[op–to–fun, 𝒜])[⟨⟨c,⟨⟩⟩⟩]=c(Underscript[·, ℱ])(Underscript[1, ℱ])}, {(Underscript[op–to–fun, 𝒜])[⟨⟨c,⟨⟨"⌈⌉",ξ⟩⟩⟩,(OverBar[m])⟩]=⟨c,ξ⟩⌣(Underscript[op–to–fun, 𝒜])[⟨(OverBar[m])⟩]}, {(Underscript[fun–to–op, 𝒜])[⟨⟩](* functions to integro-diff operators *)=⟨⟩}, {(Underscript[fun–to–op, 𝒜])[⟨⟨c,ξ⟩,(OverBar[m])⟩]={({{⟨⟨(Underscript[to–scal, ℱ])[⟨⟨c,ξ⟩⟩],⟨⟩⟩⟩(Underscript[+, ℳ])(Underscript[fun–to–op, 𝒜])[⟨(OverBar[m])⟩], ⇐, (Underscript[is–scal, ℱ])[⟨⟨c,ξ⟩⟩]}, {⟨⟨c,⟨⟨"⌈⌉",ξ⟩⟩⟩⟩(Underscript[+, ℳ])(Underscript[fun–to–op, 𝒜])[⟨(OverBar[m])⟩], ⇐, otherwise}})}}, {⟨⟩(Underscript[⋄, 𝒜])f(* the action of int-diff word on function *)=(Underscript[fun–to–op, 𝒜])[f]}, {⟨(OverBar[w]),"∂"⟩(Underscript[⋄, 𝒜])f=⟨(OverBar[w])⟩(Underscript[⋄, 𝒜])(∂_ℱ)f}, {⟨(OverBar[w]),"∫"⟩(Underscript[⋄, 𝒜])f=⟨(OverBar[w])⟩(Underscript[⋄, 𝒜])(∫_ℱ)f}, {⟨(OverBar[w]),⟨"⌊⌋",c⟩⟩(Underscript[⋄, 𝒜])f=(Underscript[eval, ℱ])[f,c](Underscript[·, ℱ])⟨(OverBar[w])⟩(Underscript[⋄, 𝒜])(Underscript[1, ℱ])}, {⟨(OverBar[w]),⟨"⌈⌉",b⟩⟩(Underscript[⋄, 𝒜])f=⟨(OverBar[w])⟩(Underscript[⋄, 𝒜])(⟨⟨(Underscript[1, K]),b⟩⟩(Underscript[*, ℱ])f)}, {⟨⟩(Underscript[⊙, 𝒜])f(* the action of int-diff op on function *)=⟨⟩}, {⟨⟨c,ξ⟩,(OverBar[m])⟩(Underscript[⊙, 𝒜])f=c(Underscript[·, 𝒜])ξ(Underscript[⋄, 𝒜])f(Underscript[+, 𝒜])⟨(OverBar[m])⟩(Underscript[⊙, 𝒜])f}, {(Underscript[EvalMat, 𝒜])[ℬ,F]=⟨⟨(Underscript[to–scal, 𝒜])[(Subscript[ℬ, i])(Underscript[⊙, 𝒜])(Underscript[op–to–fun, 𝒜])[(Subscript[F, j])]](Underscript[|, j=1,…,\[LeftBracketingBar]F\[RightBracketingBar]])⟩(Underscript[|, i=1,…,\[LeftBracketingBar]ℬ\[RightBracketingBar]])⟩}})}})]]]

Boundary Problems

Definition["Boundary Problems",any[ℱ,K],
BoundaryProblems[ℱ,K]=where[𝒜=IntDiffOp[ℱ,K],
Functor[P,any[p,r,λ,(OverBar[m]),ℬ,𝒟,F],
	({{𝕤=⟨⟩}, {({{(Underscript[CharRoots, P])[p]=where[𝓅=™ToM[p],
™CharacteristicRoots[𝓅]]}, {(Underscript[FundSys, P])[⟨⟩]=⟨⟩ }, {(Underscript[FundSys, P])[⟨⟨0,r⟩,(OverBar[m])⟩]=(Underscript[1, 𝒜])⌣⟨⟨⟨(Underscript[1, K]),⟨⟨"⌈⌉",⟨i,(Underscript[0, K])⟩⟩⟩⟩⟩(Underscript[|, i=1,…,r-1])⟩≍(Underscript[FundSys, P])[⟨(OverBar[m])⟩] }, {(Underscript[FundSys, P])[⟨⟨λ,r⟩,(OverBar[m])⟩]=⟨⟨⟨(Underscript[1, K]),⟨⟨"⌈⌉",⟨i,λ⟩⟩⟩⟩⟩(Underscript[|, i=0,…,r-1])⟩≍(Underscript[FundSys, P])[⟨(OverBar[m])⟩] }, {(Underscript[Proj, P])[ℬ,F]=F(Underscript[*, MatOps[𝒜]])((Underscript[∇, MatOps[K]])((Underscript[EvalMat, 𝒜])[ℬ,F])(Underscript[·, MatOps[𝒜]])ℬ)}, {(Underscript[RightInv, P])[⟨⟩]=(Underscript[1, 𝒜])}, {(Underscript[RightInv, P])[⟨⟨0,0⟩⟩]=(Underscript[1, 𝒜])}, {(Underscript[RightInv, P])[⟨⟨λ,r⟩,(OverBar[m])⟩]={({{⟨⟨(Underscript[1, K]),⟨"∫"⟩⟩⟩(Underscript[*, 𝒜])(Underscript[RightInv, P])[⟨⟨(Underscript[0, K]),r-1⟩,(OverBar[m])⟩], ⇐, λ=(Underscript[0, K])}, {(⟨⟨(Underscript[1, K]),⟨⟨"⌈⌉",⟨(Underscript[0, K]),λ⟩⟩⟩⟩⟩(Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨"∫"⟩⟩⟩(Underscript[*, 𝒜]) ⟨⟨(Underscript[1, K]),⟨⟨"⌈⌉",⟨(Underscript[0, K]),(Underscript[-, K])λ⟩⟩⟩⟩⟩)(Underscript[*, 𝒜])(Underscript[RightInv, P])[⟨(OverBar[m])⟩], ⇐, True}})}}, {(Underscript[FundRightInv, P])[𝒟]=where[γ=(Underscript[CharRoots, P])[𝒟],𝒹=™ToM[𝒟],
((Underscript[1, K])(Underscript[/, K])™lc[𝒹])(Underscript[·, 𝒜])(Underscript[RightInv, P])[γ]]}, {(Underscript[GreensOp, P])[𝒟,ℬ]=where[𝒸=(Underscript[CharRoots, P])[𝒟],𝒻=(Underscript[FundSys, P])[𝒸],
((Underscript[1, 𝒜])(Underscript[-, 𝒜])(Underscript[Proj, P])[ℬ,𝒻])(Underscript[*, 𝒜])(Underscript[FundRightInv, P])[𝒟]]}})}})]]]

Boundary Conditions

Definition["Boundary Conditions",any[ℱ,K],
BoundCond[ℱ,K]=where[𝒜=IntDiffOp[ℱ,K],
Functor[D,any[b,c,p,r,(OverBar[b]),T],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, D])[b]⟺(∧{({{is–tuple[b]}, {(Underscript[∀, i=1,…,\[LeftBracketingBar]b\[RightBracketingBar]])(Underscript[∈, ℱ])[(Subscript[b, i])]}, {(Underscript[∀, i=1,…,\[LeftBracketingBar]b\[RightBracketingBar]-1])(Subscript[b, i])(Underscript[>, ℱ])(Subscript[b, i+1])}})})}, {(Underscript[0, D])=(Underscript[0, 𝒜])}, {(Underscript[1, D])=(Underscript[1, 𝒜])}, {b(Underscript[+, D])c=where[𝒮=MergeSort[FreeIntDiffOp[ℱ,K]],
(Underscript[normalize, D])[(Underscript[sort, 𝒮])[b≍c]]]}, {⟨⟩(Underscript[*, D])T=(Underscript[0, D])}, {⟨b,(OverBar[b])⟩(Underscript[*, D])T={({{b(Underscript[*, 𝒜])T⌣⟨(OverBar[b])⟩(Underscript[*, D])T, ⇐, b(Underscript[*, 𝒜])T≠(Underscript[0, 𝒜])}, {⟨(OverBar[b])⟩(Underscript[*, D])T, ⇐, True}})}}, {(Underscript[gen, D])[⟨⟩]=⟨⟩}, {(Underscript[gen, D])[⟨b,(OverBar[b])⟩]=where[𝒮=MergeSort[DegWords["∂"⥛("∫"⥛(DoubleBasis[Basis[ℱ],CharBasis[K]]))]],
(Underscript[elimred, 𝒮])[(Underscript[sort, 𝒮])[⟨(Subscript[b, i,2])(Underscript[|, i=1,…,\[LeftBracketingBar]b\[RightBracketingBar]])⟩≍(Underscript[gen, D])[⟨(OverBar[b])⟩]]]]}, {(Underscript[coords, D])[p,r]=⟨(Underscript[coord, ℱ])[p,(Subscript[r, i])](Underscript[|, i=1,…,\[LeftBracketingBar]r\[RightBracketingBar]])⟩}, {(Underscript[normalize, D])[p]=where[q=(Underscript[gen, D])[p],
(Underscript[matrix, D])[p](Underscript[·, MatOps[𝒜]])⟨⟨⟨(Underscript[1, K]),(Subscript[q, i])⟩⟩(Underscript[|, i=1,…,\[LeftBracketingBar]q\[RightBracketingBar]])⟩]}, {(Underscript[matrix, D])[p]=where[q=(Underscript[gen, D])[p],
™MyRowReduce[⟨(Underscript[coords, D])[(Subscript[p, i]),q](Underscript[|, i=1,…,\[LeftBracketingBar]p\[RightBracketingBar]])⟩]]}})}})]]]

Boundary Problem Monoid

Definition["Boundary Problem Monoid",any[ℱ,K],
BPMonoid[ℱ,K]=where[ℬ=BoundCond[ℱ,K],
Functor[D,any[b,B,B2,S,T,T1,T2,(OverTilde[B]),(OverTilde[T])],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, D])[b]⟺(∧{({{is–tuple[b]}, {(Underscript[∈, IntDiffOp[ℱ,K]])[(Subscript[b, 1])]}, {(Underscript[∀, i=1,…,\[LeftBracketingBar](Subscript[b, 2])\[RightBracketingBar]])(Underscript[∈, ℬ])[(Subscript[((Subscript[b, 2])), i])]}})})}, {⟨T,B⟩(Underscript[*, D])⟨(OverTilde[T]),(OverTilde[B])⟩=⟨T(Underscript[*, IntDiffOp[ℱ,K]])(OverTilde[T]),B(Underscript[*, ℬ])(OverTilde[T])(Underscript[+, ℬ])(OverTilde[B])⟩}, {(Underscript[Fact, D])[T1,T2,B,B2]=where[B1=(Underscript[normalize, ℬ])[B(Underscript[*, ℬ])(Underscript[GreensOp, BoundaryProblems[ℱ,K]])[T2,B2]],
⟨T1,B1⟩]}, {(Underscript[Factorize, D])[T1,T2,B,S]=where[𝓉1=™ToM[T1],𝓉2=™ToM[T2],m=™deg[𝓉1],n=™deg[𝓉2],C=™Reduce[(Underscript[EvalMat, FreeIntDiffOp[ℱ,K]])[B,S],m,m+n],
D=™Transpose[⟨(Subscript[C, i])(Underscript[|, i=m+n+1,…,\[LeftBracketingBar]C\[RightBracketingBar]])⟩](Underscript[·, MatOps[IntDiffOp[ℱ,K]]])B,
⟨(Underscript[normalize, ℬ])[⟨(Subscript[D, i])(Underscript[|, i=m+1,…,m+n])⟩(Underscript[*, ℬ])(Underscript[GreensOp, BoundaryProblems[ℱ,K]])[T2,⟨(Subscript[D, i])(Underscript[|, i=1,…,m])⟩]],(Underscript[normalize, ℬ])[⟨(Subscript[D, i])(Underscript[|, i=1,…,m])⟩]⟩]}})}})]]]

Postprocessing

Translation to Green's Polynomials:

Definition["GreensAlg",any[ℱ,K,a,b],
GreensAlg[ℱ,K,⟨a,b⟩]=where[ℳ=MonoidAlgebra[K,DegWords["D"⥛("B"⥛("A"⥛("R"⥛("L"⥛DoubleBasis[Basis[ℱ],CharBasis[K]]))))]],
Functor[P,any[c,m,n,p,r,w,λ,η,(OverBar[η]),(OverBar[ξ])],
	({{𝕤=⟨⟩}, {({{(Underscript[PostprocW, P])[⟨"∂",(OverBar[η])⟩]=⟨⟨(Underscript[1, K]),⟨"D"⟩⟩⟩(Underscript[*, ℳ])(Underscript[PostprocW, P])[⟨(OverBar[η])⟩]}, {(Underscript[PostprocW, P])[⟨"∫",(OverBar[η])⟩]=⟨⟨(Underscript[1, K]),⟨"A"⟩⟩⟩(Underscript[*, ℳ])(Underscript[PostprocW, P])[⟨(OverBar[η])⟩]}, {(Underscript[PostprocW, P])[⟨⟨"⌊⌋",b⟩,"∫",(OverBar[η])⟩]=⟨⟨(Underscript[1, K]),⟨"A"⟩⟩,⟨(Underscript[1, K]),⟨"B"⟩⟩⟩(Underscript[*, ℳ])(Underscript[PostprocW, P])[⟨(OverBar[η])⟩]}, {(Underscript[PostprocW, P])[⟨⟨"⌊⌋",a⟩,(OverBar[η])⟩]=⟨⟨(Underscript[1, K]),⟨"L"⟩⟩⟩(Underscript[*, ℳ])(Underscript[PostprocW, P])[⟨(OverBar[η])⟩]}, {(Underscript[PostprocW, P])[⟨⟨"⌊⌋",b⟩,(OverBar[η])⟩]=⟨⟨(Underscript[1, K]),⟨"R"⟩⟩⟩(Underscript[*, ℳ])(Underscript[PostprocW, P])[⟨(OverBar[η])⟩]}, {(Underscript[PostprocW, P])[⟨⟨"⌈⌉",⟨m,n⟩⟩,(OverBar[η])⟩]=⟨⟨(Underscript[1, K]),⟨⟨"⌈⌉",⟨m,n⟩⟩⟩⟩⟩(Underscript[*, ℳ])(Underscript[PostprocW, P])[⟨(OverBar[η])⟩]}, {(Underscript[PostprocW, P])[⟨⟩]=(Underscript[1, ℳ])}, {(Underscript[PostprocW, P])[r]=⟨⟨(Underscript[1, K]),r⟩⟩}, {(Underscript[Postproc, P])[⟨⟨⟨⟨c,η⟩,(OverBar[ξ])⟩⟩,(OverBar[η])⟩]=⟨(Underscript[Postproc, P])[(Subscript[⟨⟨⟨⟨c,η⟩,(OverBar[ξ])⟩⟩,(OverBar[η])⟩, i])](Underscript[|, i=1,…,\[LeftBracketingBar]⟨⟨⟨⟨c,η⟩,(OverBar[ξ])⟩⟩,(OverBar[η])⟩\[RightBracketingBar]])⟩}, {(Underscript[Postproc, P])[⟨⟨⟨⟨c,η⟩⟩,(OverBar[ξ])⟩,(OverBar[η])⟩]=⟨(Underscript[Postproc, P])[(Subscript[⟨⟨⟨⟨c,η⟩⟩,(OverBar[ξ])⟩,(OverBar[η])⟩, i])](Underscript[|, i=1,…,\[LeftBracketingBar]⟨⟨⟨⟨c,η⟩⟩,(OverBar[ξ])⟩,(OverBar[η])⟩\[RightBracketingBar]])⟩}, {(Underscript[Postproc, P])[⟨⟨⟨c,η⟩,(OverBar[ξ])⟩,(OverBar[η])⟩]=⟨(Underscript[Postproc, P])[(Subscript[⟨⟨⟨c,η⟩,(OverBar[ξ])⟩,(OverBar[η])⟩, i])](Underscript[|, i=1,…,\[LeftBracketingBar]⟨⟨⟨c,η⟩,(OverBar[ξ])⟩,(OverBar[η])⟩\[RightBracketingBar]])⟩}, {(Underscript[Postproc, P])[p]=(Underscript[PostprocPoly, P])[p]}, {(Underscript[PostprocPoly, P])[⟨⟨c,η⟩,(OverBar[η])⟩]=c(Underscript[·, ℳ])(Underscript[PostprocW, P])[η](Underscript[+, ℳ])(Underscript[PostprocPoly, P])[⟨(OverBar[η])⟩]}, {(Underscript[PostprocPoly, P])[⟨⟩]=(Underscript[0, ℳ])}, {(Underscript[PrettyPrintW, P])[⟨⟩]=1}, {(Underscript[PrettyPrintW, P])[⟨λ,η,(OverBar[η])⟩]={({{™Times[(λ^2),(Underscript[PrettyPrintW, P])[⟨(OverBar[η])⟩]], ⇐, λ=η}, {mytimes[(Underscript[PrettyPrintL, P])[λ],(Underscript[PrettyPrintW, P])[⟨η,(OverBar[η])⟩]], ⇐, otherwise}})} }, {(Underscript[PrettyPrintW, P])[⟨η⟩]=(Underscript[PrettyPrintL, P])[η]}, {(Underscript[PrettyPrintL, P])[⟨"⌈⌉",⟨m,λ⟩⟩]=™Times[(x^m),(E^(λ x))]}, {(Underscript[PrettyPrintL, P])["D"]=D}, {(Underscript[PrettyPrintL, P])["A"]=A}, {(Underscript[PrettyPrintL, P])["B"]=B}, {(Underscript[PrettyPrintL, P])["L"]=L}, {(Underscript[PrettyPrintL, P])["R"]=R}, {(Underscript[PrettyPrintL, P])[η]=η}, {(Underscript[PrettyPrintM, P])[⟨c,w⟩]=™Times[c,(Underscript[PrettyPrintW, P])[w]]}, {(Underscript[PrettyPrint, P])[⟨⟨⟨c,η⟩,(OverBar[ξ])⟩,(OverBar[η])⟩]=⟨(Underscript[PrettyPrint, P])[(Subscript[⟨⟨⟨c,η⟩,(OverBar[ξ])⟩,(OverBar[η])⟩, i])](Underscript[|, i=1,…,\[LeftBracketingBar]⟨⟨⟨c,η⟩,(OverBar[ξ])⟩,(OverBar[η])⟩\[RightBracketingBar]])⟩}, {(Underscript[PrettyPrint, P])[p]=™Plus[(Underscript[PrettyPrintM, P])[(Subscript[p, i])](Underscript[|, i=1,…,\[LeftBracketingBar]p\[RightBracketingBar]])]}, {(Underscript[PrettyPrint, P])[⟨m⟩]=(Underscript[PrettyPrintM, P])[m]}, {(Underscript[PrettyPrint, P])[⟨⟩]=0}, {(Underscript[AsGreen, P])[p]=(Underscript[PrettyPrint, P])[(Underscript[Postproc, P])[p]]}})}})]]]

Definition["Green Function",any[H],
GreenFun[H]=Functor[P,any[c,m,n,p,w,λ,ν,(OverBar[pre]),(OverBar[post])],
	({{𝕤=⟨⟩}, {({{(Underscript[GreensFct, P])[p]=where[q=(Underscript[PostprocPoly, H])[p],
™MyCaseDistinction[•mycase[(Underscript[GreenA, P])[q],™LessEqual[ξ,x]],•mycase[(Underscript[GreenB, P])[q],™Less[x,ξ]]]]}, {(Underscript[GreenA, P])[p]=™Plus[(Underscript[GreenMA, P])[(Subscript[p, i])](Underscript[|, i=1,…,\[LeftBracketingBar]p\[RightBracketingBar]])]}, {(Underscript[GreenA, P])[⟨m⟩]=(Underscript[GreenMA, P])[m]}, {(Underscript[GreenMA, P])[⟨c,w⟩]=™Times[c,(Underscript[GreenWA, P])[w]]}, {(Underscript[GreenWA, P])[⟨⟨"⌈⌉",⟨m,n⟩⟩,"A",⟨"⌈⌉",⟨λ,ν⟩⟩⟩]=™Times[(x^m),(E^(n x)),(ξ^λ),(E^(ν ξ))]}, {(Underscript[GreenWA, P])[⟨⟨"⌈⌉",⟨m,0⟩⟩,"A"⟩]=(x^m)}, {(Underscript[GreenWA, P])[⟨"A",⟨"⌈⌉",⟨λ,0⟩⟩⟩]=(ξ^λ)}, {(Underscript[GreenWA, P])[⟨⟨"⌈⌉",⟨m,0⟩⟩⟩]=(x^m)}, {(Underscript[GreenWA, P])[⟨c⟩]=c }, {(Underscript[GreenWA, P])[⟨(OverBar[pre]),"B",(OverBar[post])⟩]=0}, {(Underscript[GreenB, P])[p]=™Plus[(Underscript[GreenMB, P])[(Subscript[p, i])](Underscript[|, i=1,…,\[LeftBracketingBar]p\[RightBracketingBar]])]}, {(Underscript[GreenB, P])[⟨m⟩]=(Underscript[GreenMB, P])[m]}, {(Underscript[GreenMB, P])[⟨c,w⟩]=™Times[c,(Underscript[GreenWB, P])[w]]}, {(Underscript[GreenWB, P])[⟨⟨"⌈⌉",⟨m,n⟩⟩,"B",⟨"⌈⌉",⟨λ,ν⟩⟩⟩]=™Times[(x^m),(E^(n x)),(ξ^λ),(E^(ν ξ))]}, {(Underscript[GreenWB, P])[⟨⟨"⌈⌉",⟨m,0⟩⟩,"B"⟩]=(x^m)}, {(Underscript[GreenWB, P])[⟨"B",⟨"⌈⌉",⟨λ,0⟩⟩⟩]=(ξ^λ)}, {(Underscript[GreenWB, P])[⟨⟨"⌈⌉",⟨m,0⟩⟩⟩]=(x^m)}, {(Underscript[GreenWB, P])[⟨c⟩]=c}, {(Underscript[GreenWB, P])[⟨(OverBar[pre]),"A",(OverBar[post])⟩]=0}})}})]]

Mathematica Functions

Mathematica Functions

Definition["Mma Functions",any[K],
MmaFct[K]=Functor[E,any[c,d,l,p,q,ξ],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, E])[p]⟺(∧{({{is–tuple[p]}, {(Underscript[∀, i=1,…,\[LeftBracketingBar]p\[RightBracketingBar]])(∧{({{is–tuple[(Subscript[p, i])]}, {\[LeftBracketingBar](Subscript[p, i])\[RightBracketingBar]=2}, {(Underscript[is–coeff, E])[(Subscript[((Subscript[p, i])), 1])]}, {(Underscript[is–bvec, E])[(Subscript[((Subscript[p, i])), 2])]}})})}, {(Underscript[∀, i=1,…,\[LeftBracketingBar]p\[RightBracketingBar]-1])func–less[(Subscript[((Subscript[p, i+1])), 2]),(Subscript[((Subscript[p, i])), 2])]}})})}, {(Underscript[0, E])=⟨⟩}, {(Underscript[1, E])=⟨⟨1,mma[1]⟩⟩}, {p(Underscript[>, E])q⇔func–less[q,p]}, {p(Underscript[+, E])q=mma–plus[p,q]}, {(Underscript[-, E])p=mma–minus[p]}, {p(Underscript[-, E])q=mma–minus[p,q]}, {c(Underscript[·, E])q=mma–times[c,q]}, {p(Underscript[*, E])q=mma–times[p,q]}, {(Underscript[is–bvec, E])[ξ]⇔is–func[ξ]}, {(Underscript[is–coeff, E])[c]⇔((Underscript[∈, K])[c]∧c≠(Underscript[0, K]))}, {(Underscript[is–scal, E])[⟨⟨c,mma[1]⟩⟩]⇔(Underscript[is–coeff, E])[c]}, {(Underscript[is–scal, E])[p]⇔False}, {(Underscript[to–scal, E])[⟨⟩]=(Underscript[0, K])}, {(Underscript[to–scal, E])[⟨⟨c,mma[1]⟩⟩]=c}, {(Underscript[eval, E])[p,d]=mma–subs[p,d]}, {(∂_E)p=mma–diff[p]}, {(∫_E)p=mma–int[p]}, {(Underscript[wronmin, E])[l]=tma–wronmin[l]}, {(Underscript[simplify, E])[p]=mma–simplify[p]}})}})]]

Free Integro-Differential Algebra

Definition["FreeIntDiffOpM",any[ℱ,K],
FreeIntDiffOp[ℱ,K]=where[ℳ=MonoidAlgebra[K,DegWords["∂"⥛("∫"⥛(DoubleBasis[Basis[ℱ],CharBasis[K]]))]],
Functor[𝒜,any[b,c,f,g,m,p,ξ,(OverBar[f]),(OverBar[m]),(OverBar[w]),ℬ,F],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, 𝒜])[f]⟺(Underscript[∈, ℳ])[f]}, {(Underscript[0, 𝒜])=(Underscript[0, ℳ])}, {𝒜[+][(OverBar[f])]=ℳ[+][(OverBar[f])]}, {(Underscript[-, 𝒜])f=(Underscript[-, ℳ])f}, {f(Underscript[-, 𝒜])g=f(Underscript[-, ℳ])g}, {c(Underscript[·, 𝒜])f=c(Underscript[·, ℳ])f}, {𝒜[*][(OverBar[f])]=ℳ[*][(OverBar[f])]}, {(Underscript[lrdm, 𝒜])[f,g]=(Underscript[lrdm, ℳ])[f,g]}, {(Underscript[rrdm, 𝒜])[f,g]=(Underscript[rrdm, ℳ])[f,g]}, {f(Underscript[>, 𝒜])g⇔f(Underscript[>, ℳ])g}, {(Underscript[1, 𝒜])=⟨⟨(Underscript[1, K]),⟨⟩⟩⟩}, {(Underscript[ew, 𝒜])[⟨⟩]=⟨⟩}, {(Underscript[ew, 𝒜])[⟨⟨c,mma[1]⟩⟩]=⟨⟨c,⟨⟩⟩⟩}, {(Underscript[ew, 𝒜])[⟨⟨c,mma[m]⟩,(OverBar[m])⟩]=⟨⟨c,⟨⟨"⌈⌉",mma[m]⟩⟩⟩⟩(Underscript[+, 𝒜])(Underscript[ew, 𝒜])[⟨(OverBar[m])⟩]}, {(Underscript[ew, 𝒜])[p]=⟨(Underscript[ew, 𝒜])[(Subscript[p, i])](Underscript[|, i=1,…,\[LeftBracketingBar]p\[RightBracketingBar]])⟩}, {(Underscript[to–scal, 𝒜])[⟨⟩]=0}, {(Underscript[to–scal, 𝒜])[⟨⟨c,(Underscript[⬚, DegWords["∂"⥛("∫"⥛(DoubleBasis[Basis[ℱ],CharBasis[K]]))]])⟩⟩]=c}, {(Underscript[op–to–fun, 𝒜])[⟨⟩](* integro-diff operators to functions *)=⟨⟩}, {(Underscript[op–to–fun, 𝒜])[⟨⟨c,⟨⟩⟩⟩]=c(Underscript[·, ℱ])(Underscript[1, ℱ])}, {(Underscript[op–to–fun, 𝒜])[⟨⟨c,⟨⟨"⌈⌉",ξ⟩⟩⟩,(OverBar[m])⟩]=⟨c,ξ⟩⌣(Underscript[op–to–fun, 𝒜])[⟨(OverBar[m])⟩]}, {(Underscript[fun–to–op, 𝒜])[⟨⟩](* functions to integro-diff operators *)=⟨⟩}, {(Underscript[fun–to–op, 𝒜])[⟨⟨c,ξ⟩,(OverBar[m])⟩]={({{⟨⟨(Underscript[to–scal, ℱ])[⟨⟨c,ξ⟩⟩],⟨⟩⟩⟩(Underscript[+, ℳ])(Underscript[fun–to–op, 𝒜])[⟨(OverBar[m])⟩], ⇐, (Underscript[is–scal, ℱ])[⟨⟨c,ξ⟩⟩]}, {⟨⟨c,⟨⟨"⌈⌉",ξ⟩⟩⟩⟩(Underscript[+, ℳ])(Underscript[fun–to–op, 𝒜])[⟨(OverBar[m])⟩], ⇐, otherwise}})}}, {⟨⟩(Underscript[⋄, 𝒜])f(* the action of int-diff word on function *)=(Underscript[fun–to–op, 𝒜])[f]}, {⟨(OverBar[w]),"∂"⟩(Underscript[⋄, 𝒜])f=⟨(OverBar[w])⟩(Underscript[⋄, 𝒜])(∂_ℱ)f}, {⟨(OverBar[w]),"∫"⟩(Underscript[⋄, 𝒜])f=⟨(OverBar[w])⟩(Underscript[⋄, 𝒜])(∫_ℱ)f}, {⟨(OverBar[w]),⟨"⌊⌋",c⟩⟩(Underscript[⋄, 𝒜])f=(Underscript[eval, ℱ])[f,c](Underscript[·, 𝒜])⟨(OverBar[w])⟩(Underscript[⋄, 𝒜])(Underscript[1, ℱ])}, {⟨(OverBar[w]),⟨"⌈⌉",b⟩⟩(Underscript[⋄, 𝒜])f=⟨(OverBar[w])⟩(Underscript[⋄, 𝒜])(⟨⟨(Underscript[1, K]),b⟩⟩(Underscript[*, ℱ])f)}, {⟨⟩(Underscript[⊙, 𝒜])f(* the action of int-diff op on function *)=⟨⟩}, {⟨⟨c,ξ⟩,(OverBar[m])⟩(Underscript[⊙, 𝒜])f=c(Underscript[·, 𝒜])ξ(Underscript[⋄, 𝒜])f(Underscript[+, 𝒜])⟨(OverBar[m])⟩(Underscript[⊙, 𝒜])f}, {(Underscript[EvalMat, 𝒜])[ℬ,F]=⟨⟨(Underscript[to–scal, 𝒜])[(Subscript[ℬ, i])(Underscript[⊙, 𝒜])(Underscript[op–to–fun, 𝒜])[(Subscript[F, j])]](Underscript[|, j=1,…,\[LeftBracketingBar]F\[RightBracketingBar]])⟩(Underscript[|, i=1,…,\[LeftBracketingBar]ℬ\[RightBracketingBar]])⟩}})}})]]]

Boundary Problems

Definition["Boundary Problems with Mma Functions",any[ℱ,K],
BoundaryProblemsM[ℱ,K]=where[𝒜=IntDiffOp[ℱ,K],
Functor[P,any[ℬ,F],
	({{𝕤=⟨⟩}, {({{(Underscript[Proj, P])[ℬ,F]=where[𝒻𝓈=(Underscript[ew, 𝒜])[F],
𝒻𝓈(Underscript[*, MatOps[𝒜]])((Underscript[∇, MatOps[K]])((Underscript[EvalMat, 𝒜])[ℬ,𝒻𝓈])(Underscript[·, MatOps[𝒜]])ℬ)]}, {(Underscript[RightInv, P])[F]=where[𝒻=(Underscript[wronmin, ℱ])[F],r=(Subscript[𝒻, 1]),d=(Subscript[𝒻, 2]),
(Underscript[(Subscript[Ω, (Underscript[0, 𝒜])]^(Underscript[+, 𝒜])), j=1,…,\[LeftBracketingBar]F\[RightBracketingBar]])((Underscript[ew, 𝒜])[(Subscript[F, j])](Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨"∫"⟩⟩⟩(Underscript[*, 𝒜])(Underscript[ew, 𝒜])[(Subscript[d, j])](Underscript[*, 𝒜])(Underscript[ew, 𝒜])[r])]}, {(Underscript[GreensOp, P])[F,ℬ]=((Underscript[1, 𝒜])(Underscript[-, 𝒜])(Underscript[Proj, P])[ℬ,F])(Underscript[*, 𝒜])(Underscript[RightInv, P])[F]}})}})]]]

Postprocessing

Definition["GreensAlgM",any[ℱ,K,a,b],
GreensAlgM[ℱ,K,⟨a,b⟩]=where[ℳ=MonoidAlgebra[K,DegWords["D"⥛("B"⥛("A"⥛("R"⥛("L"⥛DoubleBasis[Basis[ℱ],CharBasis[K]]))))]],
Functor[P,any[c,m,p,r,w,λ,η,(OverBar[η])],
	({{𝕤=⟨⟩}, {({{(Underscript[PostprocW, P])[⟨"∂",(OverBar[η])⟩]=⟨⟨(Underscript[1, K]),⟨"D"⟩⟩⟩(Underscript[*, ℳ])(Underscript[PostprocW, P])[⟨(OverBar[η])⟩]}, {(Underscript[PostprocW, P])[⟨"∫",(OverBar[η])⟩]=⟨⟨(Underscript[1, K]),⟨"A"⟩⟩⟩(Underscript[*, ℳ])(Underscript[PostprocW, P])[⟨(OverBar[η])⟩]}, {(Underscript[PostprocW, P])[⟨⟨"⌊⌋",b⟩,"∫",(OverBar[η])⟩]=⟨⟨(Underscript[1, K]),⟨"A"⟩⟩,⟨(Underscript[1, K]),⟨"B"⟩⟩⟩(Underscript[*, ℳ])(Underscript[PostprocW, P])[⟨(OverBar[η])⟩]}, {(Underscript[PostprocW, P])[⟨⟨"⌊⌋",a⟩,(OverBar[η])⟩]=⟨⟨(Underscript[1, K]),⟨"L"⟩⟩⟩(Underscript[*, ℳ])(Underscript[PostprocW, P])[⟨(OverBar[η])⟩]}, {(Underscript[PostprocW, P])[⟨⟨"⌊⌋",b⟩,(OverBar[η])⟩]=⟨⟨(Underscript[1, K]),⟨"R"⟩⟩⟩(Underscript[*, ℳ])(Underscript[PostprocW, P])[⟨(OverBar[η])⟩]}, {(Underscript[PostprocW, P])[⟨⟨"⌈⌉",mma[m]⟩,(OverBar[η])⟩]=⟨⟨(Underscript[1, K]),⟨⟨"⌈⌉",mma[m]⟩⟩⟩⟩(Underscript[*, ℳ])(Underscript[PostprocW, P])[⟨(OverBar[η])⟩]}, {(Underscript[PostprocW, P])[⟨⟩]=(Underscript[1, ℳ])}, {(Underscript[PostprocW, P])[r]=⟨⟨(Underscript[1, K]),r⟩⟩}, {(Underscript[PostprocPoly, P])[⟨⟨c,η⟩,(OverBar[η])⟩]=c(Underscript[·, ℳ])(Underscript[PostprocW, P])[η](Underscript[+, ℳ])(Underscript[PostprocPoly, P])[⟨(OverBar[η])⟩]}, {(Underscript[PostprocPoly, P])[⟨⟩]=(Underscript[0, ℳ])}, {(Underscript[PrettyPrintW, P])[⟨⟩]=1}, {(Underscript[PrettyPrintW, P])[⟨λ,η,(OverBar[η])⟩]={({{™Times[(λ^2),(Underscript[PrettyPrintW, P])[⟨(OverBar[η])⟩]], ⇐, λ=η}, {mytimes[(Underscript[PrettyPrintL, P])[λ],(Underscript[PrettyPrintW, P])[⟨η,(OverBar[η])⟩]], ⇐, otherwise}})} }, {(Underscript[PrettyPrintW, P])[⟨η⟩]=(Underscript[PrettyPrintL, P])[η]}, {(Underscript[PrettyPrintL, P])[⟨"⌈⌉",mma[m]⟩]=⌈m⌉}, {(Underscript[PrettyPrintL, P])["D"]=D}, {(Underscript[PrettyPrintL, P])["A"]=A}, {(Underscript[PrettyPrintL, P])["B"]=B}, {(Underscript[PrettyPrintL, P])["L"]=L}, {(Underscript[PrettyPrintL, P])["R"]=R}, {(Underscript[PrettyPrintL, P])[η]=η}, {(Underscript[PrettyPrintM, P])[⟨c,w⟩]=™Times[c,(Underscript[PrettyPrintW, P])[w]]}, {(Underscript[PrettyPrint, P])[p]=™Plus[(Underscript[PrettyPrintM, P])[(Subscript[p, i])](Underscript[|, i=1,…,\[LeftBracketingBar]p\[RightBracketingBar]])]}, {(Underscript[PrettyPrint, P])[⟨m⟩]=(Underscript[PrettyPrintM, P])[m]}, {(Underscript[PrettyPrint, P])[⟨⟩]=0}, {(Underscript[AsGreen, P])[p]=(Underscript[PrettyPrint, P])[(Underscript[PostprocPoly, P])[p]]}})}})]]]

Definition["Green FunctionM",any[H],
GreenFunM[H]=Functor[P,any[c,m,n,p,w,(OverBar[pre]),(OverBar[post])],
	({{𝕤=⟨⟩}, {({{(Underscript[GreensFct, P])[p]=where[q=(Underscript[PostprocPoly, H])[p],
™MyCaseDistinction[•mycase[mma–simplify[(Underscript[GreenA, P])[q]],™LessEqual[ξ,x]],•mycase[mma–simplify[(Underscript[GreenB, P])[q]],™Less[x,ξ]]]]}, {(Underscript[GreenA, P])[p]=™Plus[(Underscript[GreenMA, P])[(Subscript[p, i])](Underscript[|, i=1,…,\[LeftBracketingBar]p\[RightBracketingBar]])]}, {(Underscript[GreenA, P])[⟨m⟩]=(Underscript[GreenMA, P])[m]}, {(Underscript[GreenMA, P])[⟨c,w⟩]=™Times[c,(Underscript[GreenWA, P])[w]]}, {(Underscript[GreenWA, P])[⟨⟨"⌈⌉",mma[m]⟩,"A",⟨"⌈⌉",mma[n]⟩⟩]=™Times[m,mma–subs[n,ξ]]}, {(Underscript[GreenWA, P])[⟨⟨"⌈⌉",mma[m]⟩,"A"⟩]=m}, {(Underscript[GreenWA, P])[⟨"A",⟨"⌈⌉",mma[n]⟩⟩]=mma–subs[n,ξ]}, {(Underscript[GreenWA, P])[⟨c⟩]=c }, {(Underscript[GreenWA, P])[⟨(OverBar[pre]),"B",(OverBar[post])⟩]=0}, {(Underscript[GreenB, P])[p]=™Plus[(Underscript[GreenMB, P])[(Subscript[p, i])](Underscript[|, i=1,…,\[LeftBracketingBar]p\[RightBracketingBar]])]}, {(Underscript[GreenB, P])[⟨m⟩]=(Underscript[GreenMB, P])[m]}, {(Underscript[GreenMB, P])[⟨c,w⟩]=™Times[c,(Underscript[GreenWB, P])[w]]}, {(Underscript[GreenWB, P])[⟨⟨"⌈⌉",mma[m]⟩,"B",⟨"⌈⌉",mma[n]⟩⟩]=™Times[m,mma–subs[n,ξ]]}, {(Underscript[GreenWB, P])[⟨⟨"⌈⌉",mma[m]⟩,"B"⟩]=m}, {(Underscript[GreenWB, P])[⟨"B",mma[n]⟩]=mma–subs[n,ξ]}, {(Underscript[GreenWB, P])[⟨c⟩]=c}, {(Underscript[GreenWB, P])[⟨(OverBar[pre]),"A",(OverBar[post])⟩]=0}})}})]]

Integro-Diff Operators for PDEs

Basis

Definition["Basis for PDE",any[ℱ],
Basis[ℱ]=Functor[B,any[a,b,c,d,ξ,η,A],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, B])[⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩]⟺((Underscript[∀, ({{i=1,…,2}, {j=1,…,2}})])(∧{({{(Underscript[∈, ℱ])[(Subscript[⟨⟨a,b⟩,⟨c,d⟩⟩, i,j])]}, {a*d-b*c≠0}})}))}, {(Underscript[∈, B])[A]⟺False}, {ξ(Underscript[>, B])η⇔ξ(Underscript[>, ℱ])η}})}})]]

Definition["⥛",any[l,L],
l⥛L=Functor[E,any[x,y],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, E])[x]⟺((Underscript[∈, L])[x]∨(x=l))}, {l(Underscript[>, E])x⇔(l≠x)}, {y(Underscript[>, E])l⇔False}, {x(Underscript[>, E])y⇔x(Underscript[>, L])y}})}})]]

Free Integro-Differential Algebra

Definition["FreeIntDiffOp for PDE",any[K],
FreeIntDiffOp[K]=where[ℳ=MonoidAlgebra[K,LexWords["D1"⥛("A1"⥛("L1"⥛("D2"⥛("A2"⥛("L2"⥛Basis[K])))))]],
Functor[𝒜,any[c,f,g,(OverBar[f])],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, 𝒜])[f]⟺(Underscript[∈, ℳ])[f]}, {(Underscript[0, 𝒜])=(Underscript[0, ℳ])}, {𝒜[+][(OverBar[f])]=ℳ[+][(OverBar[f])]}, {(Underscript[-, 𝒜])f=(Underscript[-, ℳ])f}, {f(Underscript[-, 𝒜])g=f(Underscript[-, ℳ])g}, {c(Underscript[·, 𝒜])f=c(Underscript[·, ℳ])f}, {⟨⟨1,⟨⟨"mat",⟨⟨1,0⟩,⟨0,1⟩⟩⟩⟩⟩⟩(Underscript[*, 𝒜])f=f}, {f(Underscript[*, 𝒜])⟨⟨1,⟨⟨"mat",⟨⟨1,0⟩,⟨0,1⟩⟩⟩⟩⟩⟩=f}, {𝒜[*][(OverBar[f])]=ℳ[*][(OverBar[f])]}, {(Underscript[lrdm, 𝒜])[f,g]=(Underscript[lrdm, ℳ])[f,g]}, {(Underscript[rrdm, 𝒜])[f,g]=(Underscript[rrdm, ℳ])[f,g]}, {f(Underscript[>, 𝒜])g⇔f(Underscript[>, ℳ])g}, {(Underscript[1, 𝒜])=⟨⟨(Underscript[1, K]),⟨⟩⟩⟩}})}})]]]

Green's System

Definition["Green System for PDE",any[K],
GreenSystem[K]=where[𝒜=FreeIntDiffOp[K],
Functor[Gr,any[a,b,c,d,λ,k,κ,μ,ν,f,g,ξ,(OverBar[q]),(OverBar[u]),(OverBar[v]),A],
	({{𝕤=⟨⟩}, {({{(Underscript[rule, Gr])[⟨(OverBar[u]),"D1",⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩,(OverBar[v])⟩,1]=
⟨⟨(OverBar[u])⟩,(⟨⟨(Underscript[1, K]),⟨"D1",⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩⟩⟩⟩(Underscript[-, 𝒜])a(Underscript[·, 𝒜])(⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩⟩⟩⟩(Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨"D1"⟩⟩⟩))(Underscript[-, 𝒜])c(Underscript[·, 𝒜])(⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩⟩⟩⟩(Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨"D2"⟩⟩⟩),⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,1]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),⟨"mat",⟨⟨1,0⟩,⟨0,1⟩⟩⟩,(OverBar[v])⟩,2]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨1,0⟩,⟨0,1⟩⟩⟩⟩⟩⟩(Underscript[-, 𝒜])(Underscript[1, 𝒜]),⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,2]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"L1","A1",(OverBar[v])⟩,3]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"L1","A1"⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,3]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"L2","A2",(OverBar[v])⟩,4]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"L2","A2"⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,4]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),⟨"mat",⟨⟨λ,κ⟩,⟨ν,μ⟩⟩⟩,⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩,(OverBar[v])⟩,5]=
⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨λ,κ⟩,⟨ν,μ⟩⟩⟩,⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩⟩⟩⟩(Underscript[-, 𝒜])⟨"mat",⟨⟨λ,κ⟩,⟨ν,μ⟩⟩⟩(Underscript[*, MatRing[K]])⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,5]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"D2",⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩,(OverBar[v])⟩,6]=
⟨⟨(OverBar[u])⟩,(⟨⟨(Underscript[1, K]),⟨"D2",⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩⟩⟩⟩(Underscript[-, 𝒜])b(Underscript[·, 𝒜])(⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩⟩⟩⟩(Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨"D1"⟩⟩⟩))(Underscript[-, 𝒜])d(Underscript[·, 𝒜])(⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩⟩⟩⟩(Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨"D2"⟩⟩⟩),⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,6]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"D1","A1",(OverBar[v])⟩,7]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"D1","A1"⟩⟩⟩(Underscript[-, 𝒜])(Underscript[1, 𝒜]),⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,7]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"D2","A2",(OverBar[v])⟩,8]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"D2","A2"⟩⟩⟩(Underscript[-, 𝒜])(Underscript[1, 𝒜]),⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,8]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"D1","A2",(OverBar[v])⟩,9]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"D1","A2"⟩⟩⟩(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨"A2","D1"⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,9]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"D2","A1",(OverBar[v])⟩,10]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"D2","A1"⟩⟩⟩(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨"A1","D2"⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,10]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"D1","L1",(OverBar[v])⟩,11]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"D1","L1"⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,11]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"D2","L2",(OverBar[v])⟩,12]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"D2","L2"⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,12]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"D1","L2",(OverBar[v])⟩,13]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"D1","L2"⟩⟩⟩(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨"L2","D1"⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,13]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"D2","L1",(OverBar[v])⟩,14]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"D2","L1"⟩⟩⟩(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨"L1","D2"⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,14]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"L1","L1",(OverBar[v])⟩,15]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"L1","L1"⟩⟩⟩(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨"L1"⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,15]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"L2","L2",(OverBar[v])⟩,16]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"L2","L2"⟩⟩⟩(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨"L2"⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,16]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"A1","D1",(OverBar[v])⟩,17]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"A1","D1"⟩⟩⟩(Underscript[-, 𝒜])((Underscript[1, 𝒜])(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨"L1"⟩⟩⟩),⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,17]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"A2","D2",(OverBar[v])⟩,18]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"A2","D2"⟩⟩⟩(Underscript[-, 𝒜])((Underscript[1, 𝒜])(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨"L2"⟩⟩⟩),⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,18]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"L1",⟨"mat",⟨⟨a,b⟩,⟨c,0⟩⟩⟩,(OverBar[v])⟩,19]=⟨⟨(OverBar[u])⟩,
⟨⟨(Underscript[1, K]),⟨"L1",⟨"mat",⟨⟨a,b⟩,⟨c,0⟩⟩⟩⟩⟩⟩(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨0,b⟩,⟨1,0⟩⟩⟩,"L2"⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,19]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"L1",⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩,(OverBar[v])⟩,20]=
{({{⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"L1",⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩⟩⟩⟩(Underscript[-, 𝒜])((⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨1,0⟩,⟨0,d⟩⟩⟩⟩⟩⟩(Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨"L1"⟩⟩⟩)(Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨1,b(Underscript[/, K])d⟩,⟨0,1⟩⟩⟩⟩⟩⟩),⟨(OverBar[v])⟩⟩, ⇐, (d≠0∧¬(Underscript[is–upper–triang, MatRing[K]])[⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩])}, {⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩, ⇐, True}})} }, {(Underscript[rule, Gr])[A,20]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"L2",⟨"mat",⟨⟨0,b⟩,⟨c,d⟩⟩⟩,(OverBar[v])⟩,21]=⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"L2",⟨"mat",⟨⟨0,b⟩,⟨c,d⟩⟩⟩⟩⟩⟩(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨0,1⟩,⟨c,0⟩⟩⟩,"L1"⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,21]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"L2",⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩,(OverBar[v])⟩,22]=
{({{⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"L2",⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩⟩⟩⟩(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨a,0⟩,⟨0,1⟩⟩⟩⟩⟩⟩(Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨"L2"⟩⟩⟩(Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨1,0⟩,⟨c(Underscript[/, K])a,1⟩⟩⟩⟩⟩⟩,⟨(OverBar[v])⟩⟩, ⇐, (a≠0∧d≠0∧¬(Underscript[is–lower–triang, MatRing[K]])[⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩])}, {⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩, ⇐, True}})} }, {(Underscript[rule, Gr])[A,22]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"A1",⟨"mat",⟨⟨0,b⟩,⟨c,d⟩⟩⟩,(OverBar[v])⟩,23]={({{⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"A1",⟨"mat",⟨⟨0,b⟩,⟨c,d⟩⟩⟩⟩⟩⟩(Underscript[-, 𝒜])1(Underscript[/, K])c(Underscript[·, 𝒜])(((Underscript[1, 𝒜])(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨"L1"⟩⟩⟩)(Underscript[*, 𝒜])(⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨0,b⟩,⟨c,d⟩⟩⟩,"A2"⟩⟩⟩)),⟨(OverBar[v])⟩⟩, ⇐, c≠0}, {⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩, ⇐, True}})}}, {(Underscript[rule, Gr])[A,23]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"A1",⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩,(OverBar[v])⟩,24]=
{({{⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"A1",⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩⟩⟩⟩(Underscript[-, 𝒜])1(Underscript[/, K])a(Underscript[·, 𝒜])(((Underscript[1, 𝒜])(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨"L1"⟩⟩⟩)(Underscript[*, 𝒜])(⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨a,b⟩,⟨0,(a(Underscript[*, K])d(Underscript[-, K])b(Underscript[*, K])c)(Underscript[/, K])a⟩⟩⟩⟩⟩⟩(Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨"A1"⟩⟩⟩(Underscript[*, 𝒜])⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨1,0⟩,⟨c(Underscript[/, K])a,1⟩⟩⟩⟩⟩⟩)),⟨(OverBar[v])⟩⟩, ⇐, (a≠0∧¬(Underscript[is–lower–triang, MatRing[K]])[⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩])}, {⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩, ⇐, True}})} }, {(Underscript[rule, Gr])[A,24]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"A2",⟨"mat",⟨⟨a,b⟩,⟨c,0⟩⟩⟩,(OverBar[v])⟩,25]=
⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"A2",⟨"mat",⟨⟨a,b⟩,⟨c,0⟩⟩⟩⟩⟩⟩(Underscript[-, 𝒜])1(Underscript[/, K])b(Underscript[·, 𝒜])(((Underscript[1, 𝒜])(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨"L2"⟩⟩⟩)(Underscript[*, 𝒜])(⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨a,b⟩,⟨c,0⟩⟩⟩,"A1"⟩⟩⟩)),⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,25]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"A2",⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩,(OverBar[v])⟩,26]={({{⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"A2",⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩⟩⟩⟩(Underscript[-, 𝒜])1(Underscript[/, K])d(Underscript[·, 𝒜])(((Underscript[1, 𝒜])(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨"L2"⟩⟩⟩)(Underscript[*, 𝒜])((⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨(a(Underscript[*, K])d(Underscript[-, K])b(Underscript[*, K])c)(Underscript[/, K])d,0⟩,⟨c,d⟩⟩⟩⟩⟩⟩(Underscript[*, 𝒜])⟨⟨1,⟨"A2"⟩⟩⟩)(Underscript[*, 𝒜])⟨⟨1,⟨⟨"mat",⟨⟨1,b(Underscript[/, K])d⟩,⟨0,1⟩⟩⟩⟩⟩⟩)),⟨(OverBar[v])⟩⟩, ⇐, (d≠0∧¬(Underscript[is–upper–triang, MatRing[K]])[⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩])}, {⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩, ⇐, True}})} }, {(Underscript[rule, Gr])[A,26]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[rule, Gr])[⟨(OverBar[u]),"L2","L1",(OverBar[v])⟩,27]=
⟨⟨(OverBar[u])⟩,⟨⟨(Underscript[1, K]),⟨"L2","L1"⟩⟩⟩(Underscript[-, 𝒜])⟨⟨(Underscript[1, K]),⟨"L1","L2"⟩⟩⟩,⟨(OverBar[v])⟩⟩}, {(Underscript[rule, Gr])[A,27]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[𝒢, Gr])[⟨⟨c,ξ⟩,(OverBar[q])⟩]=(Underscript[𝒢, Gr])[⟨⟨c,ξ⟩,(OverBar[q])⟩,1]}, {(Underscript[𝒢, Gr])[⟨⟨c,ξ⟩,(OverBar[q])⟩,28]=⟨(Underscript[0, 𝒜]),(Underscript[0, 𝒜]),(Underscript[0, 𝒜])⟩}, {(Underscript[𝒢, Gr])[⟨⟨c,ξ⟩,(OverBar[q])⟩,k]=where[l=⟨⟨(Underscript[1, K]),(Subscript[((Underscript[rule, Gr])[ξ,k]), 1])⟩⟩,m=c(Underscript[·, 𝒜])(Subscript[((Underscript[rule, Gr])[ξ,k]), 2]),r=⟨⟨(Underscript[1, K]),(Subscript[((Underscript[rule, Gr])[ξ,k]), 3])⟩⟩,
{({{⟨l,m,r⟩, ⇐, (m≠(Underscript[0, 𝒜]))∨(k>28)}, {(Underscript[𝒢, Gr])[⟨⟨c,ξ⟩,(OverBar[q])⟩,k+1], ⇐, otherwise}})}]}})}})]]]

Definition["Matrix Ring",any[K],
MatRing[K]=Functor[R,any[a,b,c,d,m,κ,λ,ν,μ],
	({{𝕤=⟨⟩}, {({{(Underscript[is–upper–triang, R])[⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩]⟺((a=1)∧(c=0)∧(d=1))}, {(Underscript[is–lower–triang, R])[⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩]⟺((a=1)∧(b=0)∧(d=1))}, {(Underscript[is–unit–mat, R])[⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩]⟺((a=1)∧(b=0)∧(c=0)∧(d=1))}, {(Underscript[dec–to–low, R])[⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩]={({{⟨⟨"mat",⟨⟨1,0⟩,⟨c(Underscript[/, K])a,1⟩⟩⟩,⟨"mat",⟨⟨a,b⟩,⟨0,(a(Underscript[*, K])d(Underscript[-, K])b(Underscript[*, K])c)(Underscript[/, K])a⟩⟩⟩⟩, ⇐, (a≠0)}, {⟨⟨"mat",⟨⟨b,0⟩,⟨d,c⟩⟩⟩,⟨"mat",⟨⟨0,1⟩,⟨1,0⟩⟩⟩⟩, ⇐, True}})}}, {(Underscript[dec–to–up, R])[⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩]={({{⟨⟨"mat",⟨⟨1,b(Underscript[/, K])d⟩,⟨0,1⟩⟩⟩,⟨"mat",⟨⟨(a(Underscript[*, K])d(Underscript[-, K])b(Underscript[*, K])c)(Underscript[/, K])d,0⟩,⟨c,d⟩⟩⟩⟩, ⇐, (d≠0)}, {⟨⟨"mat",⟨⟨b,a⟩,⟨0,c⟩⟩⟩,⟨"mat",⟨⟨0,1⟩,⟨1,0⟩⟩⟩⟩, ⇐, True}})}}, {⟨"mat",⟨⟨λ,κ⟩,⟨ν,μ⟩⟩⟩(Underscript[*, R])⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩=⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨a(Underscript[*, K])λ(Underscript[+, K])b(Underscript[*, K])ν,a(Underscript[*, K])κ(Underscript[+, K])b(Underscript[*, K])μ⟩,⟨c(Underscript[*, K])λ(Underscript[+, K])d(Underscript[*, K])ν,c(Underscript[*, K])κ(Underscript[+, K])d(Underscript[*, K])μ⟩⟩⟩⟩⟩⟩}})}})
]]

Definition["Groebner Basis Normal Form",any[G,S],
GBNF[G,S]=Functor[C,any[a,b,c,(OverBar[a]),ℬ,F],
	({{𝕤=⟨⟩}, {({{(Underscript[NF, C])[a]=(Underscript[tred, G])[a,S]}, {(Underscript[0, C])=(Underscript[0, G])}, {(Underscript[1, C])=(Underscript[1, G])}, {C[+][(OverBar[a])]=G[+][(OverBar[a])]}, {(Underscript[-, C])a=(Underscript[-, G])a}, {a(Underscript[-, C])b=a(Underscript[-, G])b}, {C[*][(OverBar[a])]=G[*][(OverBar[a])]}, {c(Underscript[·, C])a=c(Underscript[·, G])a}, {(Underscript[ew, C])[a]=(Underscript[ew, G])[a]}, {(Underscript[EvalMat, C])[ℬ,F]=(Underscript[EvalMat, G])[ℬ,F]}})}})
]]

Definition["Quotient Algebra",any[G],
QuotAlg[G]=Functor[Q,any[a,b,c,(OverBar[a]),ℬ,F],
	({{𝕤=⟨⟩}, {({{(Underscript[∈, Q])[a]⟺((Underscript[NF, G])[a]=a)}, {(Underscript[0, Q])=(Underscript[0, G])}, {(Underscript[1, Q])=(Underscript[1, G])}, {Q[+][(OverBar[a])]=(Underscript[NF, G])[G[+][(OverBar[a])]]}, {(Underscript[-, Q])a=(Underscript[NF, G])[(Underscript[-, G])a]}, {a(Underscript[-, Q])b=(Underscript[NF, G])[a(Underscript[-, G])b]}, {Q[*][(OverBar[a])]=(Underscript[NF, G])[G[*][(OverBar[a])]]}, {c(Underscript[·, Q])a=(Underscript[NF, G])[c(Underscript[·, G])a]}, {(Underscript[ew, Q])[a]=(Underscript[ew, G])[a]}, {(Underscript[EvalMat, Q])[ℬ,F]=(Underscript[EvalMat, G])[ℬ,F]}})}})
]]

IntDiffOp

Definition["IntDiffOp for PDE",any[K],
IntDiffOp[K]=where[𝒜=FreeIntDiffOp[K],
QuotAlg[GBNF[GB[𝒜],(Underscript[𝒢, GreenSystem[K]])]]]
]

Boundary Problems

Definition["Boundary Problems for PDE",any[K],
BoundaryProblemsPDE[K]=where[𝒜=IntDiffOp[K],
Functor[P,any[a,b,k],
	({{𝕤=⟨⟩}, {(Underscript[GreensOp, P])[a,b,k]=⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨1(Underscript[/, K])(a(Underscript[-, K])b(Underscript[*, K])k),(Underscript[-, K])(k(Underscript[/, K])(a(Underscript[-, K])b(Underscript[*, K])k))⟩,⟨(Underscript[-, K])(b(Underscript[/, K])((a^2)(Underscript[+, K])(b^2))),a(Underscript[/, K])((a^2)(Underscript[+, K])(b^2))⟩⟩⟩⟩⟩⟩(Underscript[*, 𝒜])⟨⟨1,⟨"A1"⟩⟩⟩(Underscript[*, 𝒜])
⟨⟨(Underscript[1, K]),⟨⟨"mat",⟨⟨a,((a^2)+(b^2))(Underscript[*, K])k(Underscript[/, K])(a(Underscript[-, K])b(Underscript[*, K])k)⟩,⟨b,((a^2)+(b^2))(Underscript[/, K])(a-b(Underscript[*, K])k)⟩⟩⟩⟩⟩⟩}})]]]

Translator

Translator Exponential Polynomials

Use[⟨Built–in["Tuples"],Built–in["Quantifiers"],Built–in["Connectives"],Built–in["Mult"],Built–in["Minus"],Built–in["IsNumber"]⟩]

Definition["Parsing",any[ℱ,a,b],
Parsing[ℱ,⟨a,b⟩]=Functor[P,any[c,m,n,r,λ,(OverBar[m]),(OverBar[n])],
	({{𝕤=⟨⟩}, {({{(Underscript[ParsePol, P])[]=⟨⟩}, {(Underscript[ParsePol, P])[0]=⟨⟩}, {(Underscript[ParsePol, P])[™Tuple[(OverBar[m])]]=⟨(Underscript[ParsePol, P])[(Subscript[⟨(OverBar[m])⟩, i])](Underscript[|, i=1,…,\[LeftBracketingBar]⟨(OverBar[m])⟩\[RightBracketingBar]])⟩}, {(Underscript[ParsePol, P])[™Plus[]]=⟨⟩}, {(Underscript[ParsePol, P])[™Plus[m,(OverBar[n])]]=(Underscript[ParsePol, P])[m]≍(Underscript[ParsePol, P])[™Plus[(OverBar[n])]]}, {(Underscript[ParsePol, P])[™Times[™Minus[c],(OverBar[m])]]=(Underscript[ParseTerm, P])[™Times[™Minus[c],(OverBar[m])]]}, {(Underscript[ParsePol, P])[™Times[c,(OverBar[m])]]=(Underscript[ParseTerm, P])[™Times[c,(OverBar[m])]]}, {(Underscript[ParsePol, P])[™Minus[™Times[™Minus[c],(OverBar[m])]]]=(Underscript[ParseTerm, P])[™Times[c,(OverBar[m])]]}, {(Underscript[ParsePol, P])[™Minus[™Times[c,(OverBar[m])]]]=(Underscript[ParseTerm, P])[™Times[™Minus[c],(OverBar[m])]]}, {(Underscript[ParsePol, P])[™Minus[m,n]]=(Underscript[ParsePol, P])[m]≍(Underscript[ParsePol, P])[™Minus[n]]}, {(Underscript[ParsePol, P])[™Minus[m,n,r,(OverBar[m])]]=(Underscript[ParsePol, P])[m]≍(Underscript[ParsePol, P])[™Minus[™Minus[n],r,(OverBar[m])]]}, {(Underscript[ParsePol, P])[™Minus[c]]={({{⟨⟨-c,⟨⟩⟩⟩, ⇐, ™IsNumber[c]}, {(Underscript[ParseTerm, P])[™Minus[c]], ⇐, otherwise}})}}, {(Underscript[ParsePol, P])[c]={({{⟨⟨c,⟨⟩⟩⟩, ⇐, ™IsNumber[c]}, {(Underscript[ParseTerm, P])[c], ⇐, otherwise}})}  }, {(Underscript[ParseTerm, P])[™Minus[c]]={({{⟨⟨-c,⟨⟩⟩⟩, ⇐, ™IsNumber[c]}, {-1(Underscript[·, ℱ])(Underscript[ParseMon, P])[c], ⇐, otherwise}})}  }, {(Underscript[ParseTerm, P])[™Times[™Times[(OverBar[m])]]]=(Underscript[ParseTerm, P])[™Times[(OverBar[m])]]}, {(Underscript[ParseTerm, P])[™Times[™Minus[c],(OverBar[m])]]={({{-c(Underscript[·, ℱ])(Underscript[ParseTerm, P])[™Times[(OverBar[m])]], ⇐, ™IsNumber[c]}, {-1(Underscript[·, ℱ])(Underscript[ParseTerm, P])[™Times[c,(OverBar[m])]], ⇐, otherwise}})}  }, {(Underscript[ParseTerm, P])[™Times[c,(OverBar[m])]]={({{c(Underscript[·, ℱ])(Underscript[ParseTerm, P])[™Times[(OverBar[m])]], ⇐, ™IsNumber[c]}, {(Underscript[ParseMon, P])[™Times[c,(OverBar[m])]], ⇐, otherwise}})}  }, {(Underscript[ParseTerm, P])[c]={({{⟨⟨c,⟨⟩⟩⟩, ⇐, ™IsNumber[c]}, {(Underscript[ParseMon, P])[c], ⇐, otherwise}})}  }, {(Underscript[ParseTerm, P])[™Times[]]=⟨⟩}, {(Underscript[ParseMon, P])[™Times[™Power[x,n],™Power[E,™Times[λ,x]]]]=⟨⟨1,⟨⟨"⌈⌉",⟨n,λ⟩⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[™Times[™Power[x,n],™Power[E,™Times[λ,x]]]]]=⟨⟨1,⟨⟨"⌈⌉",⟨n,λ⟩⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[™Power[x,n],™Power[E,x]]]=⟨⟨1,⟨⟨"⌈⌉",⟨n,1⟩⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[™Times[™Power[x,n],™Power[E,x]]]]=⟨⟨1,⟨⟨"⌈⌉",⟨n,1⟩⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[x,™Power[E,™Times[λ,x]]]]=⟨⟨1,⟨⟨"⌈⌉",⟨1,λ⟩⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[™Times[x,™Power[E,™Times[λ,x]]]]]=⟨⟨1,⟨⟨"⌈⌉",⟨1,λ⟩⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™Power[E,™Times[λ,x]]]=⟨⟨1,⟨⟨"⌈⌉",⟨0,λ⟩⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[™Power[E,™Times[λ,x]]]]=⟨⟨1,⟨⟨"⌈⌉",⟨0,λ⟩⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™Power[x,n]]=⟨⟨1,⟨⟨"⌈⌉",⟨n,0⟩⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[™Power[x,n]]]=⟨⟨1,⟨⟨"⌈⌉",⟨n,0⟩⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™Power[E,x]]=⟨⟨1,⟨⟨"⌈⌉",⟨0,1⟩⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[™Power[E,x]]]=⟨⟨1,⟨⟨"⌈⌉",⟨0,1⟩⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™Power[E,™Minus[x]]]=⟨⟨1,⟨⟨"⌈⌉",⟨0,-1⟩⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[™Power[E,™Minus[x]]]]=⟨⟨1,⟨⟨"⌈⌉",⟨0,-1⟩⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[x]=⟨⟨1,⟨⟨"⌈⌉",⟨1,0⟩⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[x]]=⟨⟨1,⟨⟨"⌈⌉",⟨1,0⟩⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™Floor[c]]=⟨⟨1,⟨⟨"⌊⌋",c⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[™Floor[c]]]=⟨⟨1,⟨⟨"⌊⌋",c⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[L]=⟨⟨1,⟨⟨"⌊⌋",a⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[L]]=⟨⟨1,⟨⟨"⌊⌋",a⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[R]=⟨⟨1,⟨⟨"⌊⌋",b⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[R]]=⟨⟨1,⟨⟨"⌊⌋",b⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™D]=⟨⟨1,⟨"∂"⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[™D]]=⟨⟨1,⟨"∂"⟩⟩⟩}, {(Underscript[ParseMon, P])[A]=⟨⟨1,⟨"∫"⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[A]]=⟨⟨1,⟨"∫"⟩⟩⟩}, {(Underscript[ParseMon, P])[B]=⟨⟨1,⟨⟨"⌊⌋",b⟩,"∫"⟩⟩,⟨-1,⟨"∫"⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[B]]=⟨⟨1,⟨⟨"⌊⌋",b⟩,"∫"⟩⟩,⟨-1,⟨"∫"⟩⟩⟩}, {(Underscript[ParseMon, P])[™Power[m,0]]=⟨⟩}, {(Underscript[ParseMon, P])[™Power[m,1]]=(Underscript[ParseMon, P])[m]}, {(Underscript[ParseMon, P])[™Power[m,n]]=(Underscript[ParseMon, P])[m](Underscript[*, ℱ])(Underscript[ParseMon, P])[™Power[m,n(Underscript[-, MmaAuxF[]])1]]}, {(Underscript[ParseMon, P])[™Times[™Power[m,n]]]=(Underscript[ParseMon, P])[™Power[m,n]]}, {(Underscript[ParseMon, P])[™Times[™Times[(OverBar[m])]]]=(Underscript[ParseMon, P])[™Times[(OverBar[m])]]}, {(Underscript[ParseMon, P])[™Times[m,n,(OverBar[n])]]=(Underscript[ParseMon, P])[m](Underscript[*, ℱ])(Underscript[ParseMon, P])[™Times[n,(OverBar[n])]]}, {(Underscript[ParseMon, P])[c]=⟨⟨c,⟨⟩⟩⟩}, {(Underscript[ParseMon, P])[]=⟨⟩}})}})]]

Definition["ParsingF",any[ℱ],
ParsingF[ℱ]=Functor[P,any[c,m,n,r,λ,(OverBar[m]),(OverBar[n])],
	({{𝕤=⟨⟩}, {({{(Underscript[ParsePolF, P])[]=⟨⟩}, {(Underscript[ParsePolF, P])[0]=⟨⟩}, {(Underscript[ParsePolF, P])[™Tuple[(OverBar[m])]]=⟨(Underscript[ParsePolF, P])[(Subscript[⟨(OverBar[m])⟩, i])](Underscript[|, i=1,…,\[LeftBracketingBar]⟨(OverBar[m])⟩\[RightBracketingBar]])⟩}, {(Underscript[ParsePolF, P])[™Plus[]]=⟨⟩}, {(Underscript[ParsePolF, P])[™Plus[m,(OverBar[n])]]=(Underscript[ParsePolF, P])[m]≍(Underscript[ParsePolF, P])[™Plus[(OverBar[n])]]}, {(Underscript[ParsePolF, P])[™Times[™Minus[c],(OverBar[m])]]=(Underscript[ParseTermF, P])[™Times[™Minus[c],(OverBar[m])]]}, {(Underscript[ParsePolF, P])[™Times[c,(OverBar[m])]]=(Underscript[ParseTermF, P])[™Times[c,(OverBar[m])]]}, {(Underscript[ParsePolF, P])[™Minus[™Times[™Minus[c],(OverBar[m])]]]=(Underscript[ParseTermF, P])[™Times[c,(OverBar[m])]]}, {(Underscript[ParsePolF, P])[™Minus[™Times[c,(OverBar[m])]]]=(Underscript[ParseTermF, P])[™Times[™Minus[c],(OverBar[m])]]}, {(Underscript[ParsePolF, P])[™Minus[m,n]]=(Underscript[ParsePolF, P])[m]≍(Underscript[ParsePolF, P])[™Minus[n]]}, {(Underscript[ParsePolF, P])[™Minus[m,n,r,(OverBar[m])]]=(Underscript[ParsePolF, P])[m]≍(Underscript[ParsePolF, P])[™Minus[™Minus[n],r,(OverBar[m])]]}, {(Underscript[ParsePolF, P])[™Minus[c]]={({{⟨⟨-c,⟨⟩⟩⟩, ⇐, ™IsNumber[c]}, {(Underscript[ParseTermF, P])[™Minus[c]], ⇐, otherwise}})}}, {(Underscript[ParsePolF, P])[c]={({{⟨⟨c,⟨⟩⟩⟩, ⇐, ™IsNumber[c]}, {(Underscript[ParseTermF, P])[c], ⇐, otherwise}})}  }, {(Underscript[ParseTermF, P])[™Minus[c]]={({{⟨⟨-c,⟨⟩⟩⟩, ⇐, ™IsNumber[c]}, {-1(Underscript[·, ℱ])(Underscript[ParseMonF, P])[c], ⇐, otherwise}})}  }, {(Underscript[ParseTermF, P])[™Times[™Times[(OverBar[m])]]]=(Underscript[ParseTermF, P])[™Times[(OverBar[m])]]}, {(Underscript[ParseTermF, P])[™Times[™Minus[c],(OverBar[m])]]={({{-c(Underscript[·, ℱ])(Underscript[ParseTermF, P])[™Times[(OverBar[m])]], ⇐, ™IsNumber[c]}, {-1(Underscript[·, ℱ])(Underscript[ParseTermF, P])[™Times[c,(OverBar[m])]], ⇐, otherwise}})}  }, {(Underscript[ParseTermF, P])[™Times[c,(OverBar[m])]]={({{c(Underscript[·, ℱ])(Underscript[ParseTermF, P])[™Times[(OverBar[m])]], ⇐, ™IsNumber[c]}, {(Underscript[ParseMonF, P])[™Times[c,(OverBar[m])]], ⇐, otherwise}})}  }, {(Underscript[ParseTermF, P])[c]={({{⟨⟨c,⟨⟩⟩⟩, ⇐, ™IsNumber[c]}, {(Underscript[ParseMonF, P])[c], ⇐, otherwise}})}  }, {(Underscript[ParseTermF, P])[™Times[]]=⟨⟩}, {(Underscript[ParseMonF, P])[™Times[™Power[x,m],™Power[E,™Times[λ,x]]]]=⟨⟨1,⟨m,λ⟩⟩⟩}, {(Underscript[ParseMonF, P])[™Times[™Power[E,™Times[λ,x]],™Power[x,m]]]=⟨⟨1,⟨m,λ⟩⟩⟩}, {(Underscript[ParseMonF, P])[™Times[™Power[x,m],™Power[E,x]]]=⟨⟨1,⟨m,1⟩⟩⟩}, {(Underscript[ParseMonF, P])[™Times[x,™Power[E,™Times[λ,x]]]]=⟨⟨1,⟨1,λ⟩⟩⟩}, {(Underscript[ParseMonF, P])[™Times[™Times[™Power[x,m],™Power[E,™Times[λ,x]]]]]=⟨⟨1,⟨m,λ⟩⟩⟩}, {(Underscript[ParseMonF, P])[™Times[™Times[™Power[E,™Times[λ,x]],™Power[x,m]]]]=⟨⟨1,⟨m,λ⟩⟩⟩}, {(Underscript[ParseMonF, P])[™Times[™Times[™Power[x,m],™Power[E,x]]]]=⟨⟨1,⟨m,1⟩⟩⟩}, {(Underscript[ParseMonF, P])[™Times[™Times[x,™Power[E,™Times[λ,x]]]]]=⟨⟨1,⟨1,λ⟩⟩⟩}, {(Underscript[ParseMonF, P])[™Power[x,m]]=⟨⟨1,⟨m,0⟩⟩⟩}, {(Underscript[ParseMonF, P])[™Times[™Power[x,m]]]=⟨⟨1,⟨m,0⟩⟩⟩}, {(Underscript[ParseMonF, P])[™Power[E,™Times[λ,x]]]=⟨⟨1,⟨0,λ⟩⟩⟩}, {(Underscript[ParseMonF, P])[™Times[™Power[E,™Times[λ,x]]]]=⟨⟨1,⟨0,λ⟩⟩⟩}, {(Underscript[ParseMonF, P])[x]=⟨⟨1,⟨1,0⟩⟩⟩}, {(Underscript[ParseMonF, P])[™Times[x]]=⟨⟨1,⟨1,0⟩⟩⟩}, {(Underscript[ParseMonF, P])[™Power[E,x]]=⟨⟨1,⟨0,1⟩⟩⟩}, {(Underscript[ParseMonF, P])[™Times[™Power[E,x]]]=⟨⟨1,⟨0,1⟩⟩⟩}, {(Underscript[ParseMonF, P])[]=⟨⟩}})}})]]

Theory for Integro-Diff Operators with Exponential Polynomials

Definition["Minimal Example",
({{𝕂=ReductionField[ℂ]}, {𝔼xp=ExpPolys[𝕂]}, {ℂ𝕙=CharBasis[𝕂]}, {𝔽=FreeIntDiffOp[𝔼xp,𝕂]}, {𝔾=GB[FreeIntDiffOp[𝔼xp,𝕂]]}, {𝕀=IntDiffOp[𝔼xp,𝕂]}, {𝔾𝕣=GreenSystem[𝔼xp,𝕂]}, {OpM=MatOps[𝕀]}, {𝔹=BoundaryProblems[𝔼xp,𝕂]}, {𝔹𝕞=BPMonoid[𝔼xp,𝕂]}, {𝕗=FundSys[𝔼xp,𝕂]}, {𝕡=Printing[𝔽]}, {𝕘=GreensAlg[𝔼xp,𝕂,⟨0,1⟩]}, {𝕘𝕗=GreenFun[𝕘]}, {𝕒=Parsing[𝔽,⟨0,1⟩]}})
]

Theory["Minimal Example",
({{Definition["Natural Numbers"]}, {Definition["ℕ"]}, {Definition["Rational Number Field"]}, {Definition["ℚ"]}, {Definition["Reduction Field"]}, {Definition["Complex Number Field"]}, {Definition["ℂ"]}, {Definition["Complex Numbers"]}, {Definition["ℂM"]}, {Definition["Finite Chain"]}, {Definition["Word Monoid"]}, {Definition["Word Monoid with Degree Ordering"]}, {Definition["Cartesian Product"]}, {Definition["Free Vector Space"]}, {Definition["Monoid Algebra"]}, {Definition["Groebner Extension"]}, {Definition["Exp Polys"]}, {Definition["Basis"]}, {Definition["Basis for Characters"]}, {Definition["⥛"]}, {Definition["FreeIntDiffOp"]}, {Definition["Quotient Algebra"]}, {Definition["Green System"]}, {Definition["Groebner Basis Normal Form"]}, {Definition["IntDiffOp"]}, {Definition["Double Basis"]}, {Definition["Matrix Ops"]}, {Definition["Ordering"]}, {Definition["GreensAlg"]}, {Definition["Green Function"]}, {Definition["Boundary Problems"]}, {Definition["Boundary Conditions"]}, {Definition["Boundary Problem Monoid"]}, {Definition["Minimal Example"]}, {Definition["Parsing"]}, {Definition["Mma Auxiliary Functions"]}, {Definition["ParsingF"]}})
]

Built–in["Minimal Example",
({{Built–in["Numbers"]}, {Built–in["Quantifiers"]}, {Built–in["Tuples"]}, {Built–in["Connectives"]}, {Built–in["Sets"]}, {Built–in["Operators"]}, {Built–in["CharRoots"]}, {Built–in["Matrix Inverse"]}, {Built–in["Leading Coefficient"]}, {Built–in["IsComplex"]}, {Built–in["ComplexLt"]}, {Built–in["MmaSimplify"]}, {Built–in["MyReduce"]}, {Built–in["Row Reduce"]}, {Built–in["MyTranspose"]}, {Built–in["Degree"]}, {Built–in["ToM"]}, {Built–in["TmaTRFM"]}, {Built–in["Mult"]}, {Built–in["Minus"]}, {Built–in["IsNumber"]}})
]

ParseP

AddFreshNameKeywords[{"ParseP","ParseF","Parse","ComputeP","FormatP","GreensOp","Mult","Fact","MultF","GreensFct","Act"}];

Clear[ParseP,ParseF,Parse,ComputeP,FormatP,GreensOp,Mult,Fact,MultF,GreensFct,Act];

Use[Theory["Minimal Example"]]

ParseP[p___]:=Compute[(Underscript[ParsePol, 𝕒])[p],built–in->⟨Built–in["Tuples"],Built–in["Quantifiers"],Built–in["Connectives"],Built–in["Mult"],Built–in["Minus"],Built–in["IsNumber"]⟩];

ParseF[f___]:=Compute[(Underscript[ParsePolF, ParsingF[𝔼xp]])[f],built–in->⟨Built–in["Tuples"],Built–in["Quantifiers"],Built–in["Connectives"],Built–in["Mult"],Built–in["Minus"],Built–in["IsNumber"]⟩];

ComputeP[p_]:=Compute[p,built–in->Built–in["Minimal Example"]];

FormatP[p_]:=Compute[(Underscript[AsGreen, 𝕘])[p],built–in->Built–in["Minimal Example"]];

Parse[p_]:=ParseP[p/.mytimes->™Times];

GreensOp[d_,l_]:=FormatP[ComputeP[(Underscript[GreensOp, 𝔹])[Parse[d],Parse[l]]]];

GreensFct[p_]:=ComputeP[(Underscript[GreensFct, 𝕘𝕗])[Parse[p]]];

Mult[p_,q_]:=FormatP[ComputeP[Parse[p](Underscript[*, 𝕀])Parse[q]]];

Fact[d1_,d2_,l1_,l2_]:=FormatP[ComputeP[(Underscript[Factorize, 𝔹𝕞])[Parse[d1],Parse[d2],Parse[l1],Parse[l2]]]];

MultF[p_,q_]:=FormatP[ComputeP[Parse[p](Underscript[*, 𝔹𝕞])Parse[q]]];

Act[g_,f_]:=FormatP[ComputeP[Parse[g](Underscript[⊙, 𝔽])ParseF[f]]]/.{™Times->Times,™Plus->Plus,™Minus->Minus,™Power->Power};

CharRoots[d_]:=Compute[(Underscript[CharRoots, 𝔹])[d],built–in->Built–in["Minimal Example"]];

EvalMat[l1_,l2_]:=Compute[(Underscript[EvalMat, 𝔽])[Parse[l1],(Underscript[FundSys, 𝔹])[(Underscript[CharRoots, 𝔹])[l2]]],built–in->Built–in["Minimal Example"]];

Translator Mathematica Functions

Definition["ParsingM",any[ℱ,a,b],
ParsingM[ℱ,⟨a,b⟩]=Functor[P,any[c,m,n,r,λ,(OverBar[m]),(OverBar[n])],
	({{𝕤=⟨⟩}, {({{(Underscript[ParsePolMfs, P])[™Tuple[(OverBar[m])]]=⟨(Underscript[ParsePolMfs, P])[(Subscript[⟨(OverBar[m])⟩, i])](Underscript[|, i=1,…,\[LeftBracketingBar]⟨(OverBar[m])⟩\[RightBracketingBar]])⟩}, {(Underscript[ParsePolMfs, P])[™Plus[m,(OverBar[m])]]=(Underscript[ParseTermMfs, P])[m]≍(Underscript[ParsePolMfs, P])[™Plus[(OverBar[m])]]}, {(Underscript[ParsePolMfs, P])[™Minus[m,n,(OverBar[m])]]=(Underscript[ParseTermMfs, P])[m]≍(Underscript[ParsePolMfs, P])[™Minus[n,(OverBar[m])]]}, {(Underscript[ParsePolMfs, P])[™Plus[]]=⟨⟩}, {(Underscript[ParsePolMfs, P])[m]=(Underscript[ParseTermMfs, P])[m]}, {(Underscript[ParseTermMfs, P])[™Ceiling[m]]=⟨⟨1,mma[m]⟩⟩}, {(Underscript[ParseTermMfs, P])[™Minus[™Ceiling[m]]]=⟨⟨-1,mma[m]⟩⟩}, {(Underscript[ParsePolM, P])[]=⟨⟩}, {(Underscript[ParsePolM, P])[0]=⟨⟩}, {(Underscript[ParsePolM, P])[™Tuple[(OverBar[m])]]=⟨(Underscript[ParsePolM, P])[(Subscript[⟨(OverBar[m])⟩, i])](Underscript[|, i=1,…,\[LeftBracketingBar]⟨(OverBar[m])⟩\[RightBracketingBar]])⟩}, {(Underscript[ParsePolM, P])[™Plus[]]=⟨⟩}, {(Underscript[ParsePolM, P])[™Plus[m,(OverBar[n])]]=(Underscript[ParsePolM, P])[m]≍(Underscript[ParsePolM, P])[™Plus[(OverBar[n])]]}, {(Underscript[ParsePolM, P])[™Times[™Minus[c],(OverBar[m])]]=(Underscript[ParseTermM, P])[™Times[™Minus[c],(OverBar[m])]]}, {(Underscript[ParsePolM, P])[™Times[c,(OverBar[m])]]=(Underscript[ParseTermM, P])[™Times[c,(OverBar[m])]]}, {(Underscript[ParsePolM, P])[™Minus[™Times[™Minus[c],(OverBar[m])]]]=(Underscript[ParseTermM, P])[™Times[c,(OverBar[m])]]}, {(Underscript[ParsePolM, P])[™Minus[™Times[c,(OverBar[m])]]]=(Underscript[ParseTermM, P])[™Times[™Minus[c],(OverBar[m])]]}, {(Underscript[ParsePolM, P])[™Minus[m,n]]=(Underscript[ParsePolM, P])[m]≍(Underscript[ParsePolM, P])[™Plus[™Minus[n]]]}, {(Underscript[ParsePolM, P])[™Minus[m,n,r,(OverBar[m])]]=(Underscript[ParsePolM, P])[m]≍(Underscript[ParsePolM, P])[™Minus[™Minus[n],r,(OverBar[m])]]}, {(Underscript[ParsePolM, P])[™Minus[c]]={({{⟨⟨-c,⟨⟩⟩⟩, ⇐, ™IsNumber[c]}, {(Underscript[ParseTermM, P])[™Minus[c]], ⇐, otherwise}})}}, {(Underscript[ParsePolM, P])[c]={({{⟨⟨c,⟨⟩⟩⟩, ⇐, ™IsNumber[c]}, {(Underscript[ParseTermM, P])[c], ⇐, otherwise}})}  }, {(Underscript[ParseTermM, P])[™Minus[c]]={({{⟨⟨-c,⟨⟩⟩⟩, ⇐, ™IsNumber[c]}, {-1(Underscript[·, ℱ])(Underscript[ParseMonM, P])[c], ⇐, otherwise}})}  }, {(Underscript[ParseTermM, P])[™Times[™Times[(OverBar[m])]]]=(Underscript[ParseTermM, P])[™Times[(OverBar[m])]]}, {(Underscript[ParseTermM, P])[™Times[™Minus[c],(OverBar[m])]]={({{-c(Underscript[·, ℱ])(Underscript[ParseTermM, P])[™Times[(OverBar[m])]], ⇐, ™IsNumber[c]}, {-1(Underscript[·, ℱ])(Underscript[ParseTermM, P])[™Times[c,(OverBar[m])]], ⇐, otherwise}})}  }, {(Underscript[ParseTermM, P])[™Times[c,(OverBar[m])]]={({{c(Underscript[·, ℱ])(Underscript[ParseTermM, P])[™Times[(OverBar[m])]], ⇐, ™IsNumber[c]}, {(Underscript[ParseMonM, P])[™Times[c,(OverBar[m])]], ⇐, otherwise}})}  }, {(Underscript[ParseTermM, P])[c]={({{⟨⟨c,⟨⟩⟩⟩, ⇐, ™IsNumber[c]}, {(Underscript[ParseMonM, P])[c], ⇐, otherwise}})}  }, {(Underscript[ParseTermM, P])[™Times[]]=⟨⟩}, {(Underscript[ParseMonM, P])[™Ceiling[(OverBar[m])]]=⟨⟨1,⟨⟨"⌈⌉",mma[(OverBar[m])]⟩⟩⟩⟩}, {(Underscript[ParseMonM, P])[™Times[™Ceiling[(OverBar[m])]]]=⟨⟨1,⟨⟨"⌈⌉",mma[(OverBar[m])]⟩⟩⟩⟩}, {(Underscript[ParseMonM, P])[™Floor[c]]=⟨⟨1,⟨⟨"⌊⌋",c⟩⟩⟩⟩}, {(Underscript[ParseMonM, P])[™Times[™Floor[c]]]=⟨⟨1,⟨⟨"⌊⌋",c⟩⟩⟩⟩}, {(Underscript[ParseMonM, P])[L]=⟨⟨1,⟨⟨"⌊⌋",a⟩⟩⟩⟩}, {(Underscript[ParseMonM, P])[™Times[L]]=⟨⟨1,⟨⟨"⌊⌋",a⟩⟩⟩⟩}, {(Underscript[ParseMonM, P])[R]=⟨⟨1,⟨⟨"⌊⌋",b⟩⟩⟩⟩}, {(Underscript[ParseMonM, P])[™Times[R]]=⟨⟨1,⟨⟨"⌊⌋",b⟩⟩⟩⟩}, {(Underscript[ParseMonM, P])[™D]=⟨⟨1,⟨"∂"⟩⟩⟩}, {(Underscript[ParseMonM, P])[™Times[™D]]=⟨⟨1,⟨"∂"⟩⟩⟩}, {(Underscript[ParseMonM, P])[A]=⟨⟨1,⟨"∫"⟩⟩⟩}, {(Underscript[ParseMonM, P])[™Times[A]]=⟨⟨1,⟨"∫"⟩⟩⟩}, {(Underscript[ParseMonM, P])[B]=⟨⟨1,⟨⟨"⌊⌋",b⟩,"∫"⟩⟩,⟨-1,⟨"∫"⟩⟩⟩}, {(Underscript[ParseMonM, P])[™Times[B]]=⟨⟨1,⟨⟨"⌊⌋",b⟩,"∫"⟩⟩,⟨-1,⟨"∫"⟩⟩⟩}, {(Underscript[ParseMonM, P])[™Power[m,0]]=⟨⟩}, {(Underscript[ParseMonM, P])[™Power[m,1]]=(Underscript[ParseMonM, P])[m]}, {(Underscript[ParseMonM, P])[™Power[m,n]]=(Underscript[ParseMonM, P])[m](Underscript[*, ℱ])(Underscript[ParseMonM, P])[™Power[m,n(Underscript[-, MmaAuxF[]])1]]}, {(Underscript[ParseMonM, P])[™Times[™Power[m,n]]]=(Underscript[ParseMonM, P])[™Power[m,n]]}, {(Underscript[ParseMonM, P])[™Times[™Times[(OverBar[m])]]]=(Underscript[ParseMonM, P])[™Times[(OverBar[m])]]}, {(Underscript[ParseMonM, P])[™Times[m,n,(OverBar[n])]]=(Underscript[ParseMonM, P])[m](Underscript[*, ℱ])(Underscript[ParseMonM, P])[™Times[n,(OverBar[n])]]}, {(Underscript[ParseMonM, P])[c]=⟨⟨c,⟨⟩⟩⟩}, {(Underscript[ParseMonM, P])[]=⟨⟩}})}})]]

Theory for Integro-Diff Operators with Mathematica Functions

Definition["Third-Order Example",
({{𝕂=ReductionField[ℂ]}, {𝕄=MmaFct[𝕂]}, {ℂ𝕙=CharBasis[𝕂]}, {𝔽𝕄=FreeIntDiffOp[𝕄,𝕂]}, {𝔾𝕄=GB[FreeIntDiffOp[𝕄,𝕂]]}, {𝕀𝕄=IntDiffOp[𝕄,𝕂]}, {𝔾𝕣𝕄=GreenSystem[𝕄,𝕂]}, {OpM𝕄=MatOps[𝕀𝕄]}, {𝔹𝕄=BoundaryProblemsM[𝕄,𝕂]}, {𝕗𝕞=FundSys[𝕄,𝕂]}, {𝕡𝕞=Printing[𝔽]}, {𝕘𝕞=GreensAlgM[𝕄,𝕂,⟨0,1⟩]}, {𝕘𝕗𝕞=GreenFunM[𝕘𝕞]}, {𝕒𝕞=ParsingM[𝔽𝕄,⟨0,1⟩]}})
]

Theory["Third-Order Example",
({{Definition["Natural Numbers"]}, {Definition["ℕ"]}, {Definition["Rational Number Field"]}, {Definition["ℚ"]}, {Definition["Reduction Field"]}, {Definition["Complex Number Field"]}, {Definition["ℂ"]}, {Definition["Complex Numbers"]}, {Definition["ℂM"]}, {Definition["Finite Chain"]}, {Definition["Word Monoid"]}, {Definition["Word Monoid with Degree Ordering"]}, {Definition["Cartesian Product"]}, {Definition["Free Vector Space"]}, {Definition["Monoid Algebra"]}, {Definition["Groebner Extension"]}, {Definition["Mma Functions"]}, {Definition["Basis"]}, {Definition["Basis for Characters"]}, {Definition["⥛"]}, {Definition["FreeIntDiffOpM"]}, {Definition["Quotient Algebra"]}, {Definition["Green System"]}, {Definition["Groebner Basis Normal Form"]}, {Definition["IntDiffOp"]}, {Definition["Double Basis"]}, {Definition["Boundary Problems with Mma Functions"]}, {Definition["Matrix Ops"]}, {Definition["Third-Order Example"]}, {Definition["GreensAlgM"]}, {Definition["Green FunctionM"]}, {Definition["ParsingM"]}, {Definition["Mma Auxiliary Functions"]}})
]

Built–in["Third-Order Example",
({{Built–in["Numbers"]}, {Built–in["Quantifiers"]}, {Built–in["Tuples"]}, {Built–in["Connectives"]}, {Built–in["Sets"]}, {Built–in["Operators"]}, {Built–in["CharRoots"]}, {Built–in["Matrix Inverse"]}, {Built–in["Leading Coefficient"]}, {Built–in["IsComplex"]}, {Built–in["ComplexLt"]}, {Built–in["FuncOrder"]}, {Built–in["FuncQ"]}, {Built–in["ToMma"]}, {Built–in["MmaPlus"]}, {Built–in["MmaMinus"]}, {Built–in["MmaTimes"]}, {Built–in["MmaDiff"]}, {Built–in["MmaInt"]}, {Built–in["MmaSubs"]}, {Built–in["WronMinTma"]}, {Built–in["MmaSimplify"]}, {Built–in["TmaTRFM"]}, {Built–in["Mult"]}, {Built–in["Minus"]}, {Built–in["IsNumber"]}})]

ParseM

AddFreshNameKeywords[{"ParseM","FormatM","ComputeM","GreensOpM","MultM","FactM","Parsem","ParseMfs","GreensFctM"}];

Clear[ParseM,FormatM,ComputeM,GreensOpM,MultM,FactM,Parsem,ParseMfs,GreensFctM];

Use[Theory["Third-Order Example"]]

ParseM[p___]:=Compute[(Underscript[ParsePolM, 𝕒𝕞])[p],built–in->⟨Built–in["Tuples"],Built–in["Quantifiers"],Built–in["Connectives"],Built–in["Mult"],Built–in["Minus"],Built–in["IsNumber"]⟩];

ParseMfs[p___]:=Compute[(Underscript[ParsePolMfs, 𝕒𝕞])[p],built–in->⟨Built–in["Tuples"],Built–in["Quantifiers"],Built–in["Connectives"],Built–in["Mult"],Built–in["Minus"],Built–in["IsNumber"]⟩];

ComputeM[p_]:=Compute[p,built–in->Built–in["Third-Order Example"]];

FormatM[p_]:=Compute[(Underscript[AsGreen, 𝕘𝕞])[p],built–in->Built–in["Third-Order Example"]];

Parsem[p_]:=ParseM[p/.mytimes->™Times];

GreensOpM[s_,l_]:=FormatM[ComputeM[(Underscript[GreensOp, 𝔹𝕄])[ParseMfs[s],Parsem[l]]]];

GreensFctM[p_]:=ComputeM[(Underscript[GreensFct, 𝕘𝕗𝕞])[Parsem[p]]];

MultM[p_,q_]:=FormatM[ComputeM[Parsem[p](Underscript[*, 𝕀𝕄])Parsem[q]]];

FactM[d1_,d2_,l1_,l2_]:=FormatM[ComputeM[(Underscript[Factorize, 𝔹𝕄])[Parsem[d1],Parsem[d2],Parsem[l1],Parsem[l2]]]];

PrettyPrinting

Definition["PrettyPrintPDE",any[ℱ,K],
PrettyPrintPDE[ℱ,K]=where[ℳ=MonoidAlgebra[K,LexWords["D1"⥛("A1"⥛("L1"⥛("D2"⥛("A2"⥛("L2"⥛Basis[K])))))]],
Functor[P,any[a,b,c,d,m,p,w,η,(OverBar[η]),(OverBar[ξ])],
	({{𝕤=⟨⟩}, {({{(Underscript[PrettyPrintW, P])[⟨⟩]=1}, {(Underscript[PrettyPrintW, P])[w]=mytimes[(Underscript[PrettyPrintL, P])[(Subscript[w, i])](Underscript[|, i=1,…,\[LeftBracketingBar]w\[RightBracketingBar]])]}, {(Underscript[PrettyPrintW, P])[⟨η⟩]=η}, {(Underscript[PrettyPrintL, P])[⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩]=⟨⟨a,b⟩,⟨c,d⟩⟩}, {(Underscript[PrettyPrintL, P])[η]=η}, {(Underscript[PrettyPrintM, P])[⟨c,w⟩]=™Times[c,(Underscript[PrettyPrintW, P])[w]]}, {(Underscript[PrettyPrint, P])[⟨⟨⟨c,η⟩,(OverBar[ξ])⟩,(OverBar[η])⟩]=⟨(Underscript[PrettyPrint, P])[(Subscript[⟨⟨⟨c,η⟩,(OverBar[ξ])⟩,(OverBar[η])⟩, i])](Underscript[|, i=1,…,\[LeftBracketingBar]⟨⟨⟨c,η⟩,(OverBar[ξ])⟩,(OverBar[η])⟩\[RightBracketingBar]])⟩}, {(Underscript[PrettyPrint, P])[p]=™Plus[(Underscript[PrettyPrintM, P])[(Subscript[p, i])](Underscript[|, i=1,…,\[LeftBracketingBar]p\[RightBracketingBar]])]}, {(Underscript[PrettyPrint, P])[⟨m⟩]=(Underscript[PrettyPrintM, P])[m]}, {(Underscript[PrettyPrint, P])[⟨⟩]=0}})}})]]]

Translator PDEs

Use[⟨Built–in["Tuples"],Built–in["Quantifiers"],Built–in["Connectives"],Built–in["Mult"],Built–in["Minus"],Built–in["IsNumber"]⟩]

Definition["ParsingPDE",any[ℱ],
ParsingPDE[ℱ]=Functor[P,any[a,b,c,d,m,n,r,λ,(OverBar[m]),(OverBar[n]),(OverBar[r]),(OverBar[s])],
	({{𝕤=⟨⟩}, {({{(Underscript[ParsePol, P])[]=⟨⟩}, {(Underscript[ParsePol, P])[0]=⟨⟩}, {(Underscript[ParsePol, P])[™Tuple[(OverBar[m])]]=⟨(Underscript[ParsePol, P])[(Subscript[⟨(OverBar[m])⟩, i])](Underscript[|, i=1,…,\[LeftBracketingBar]⟨(OverBar[m])⟩\[RightBracketingBar]])⟩}, {(Underscript[ParsePol, P])[™Plus[]]=⟨⟩}, {(Underscript[ParsePol, P])[™Plus[m,(OverBar[n])]]=(Underscript[ParsePol, P])[m]≍(Underscript[ParsePol, P])[™Plus[(OverBar[n])]]}, {(Underscript[ParsePol, P])[™Times[™Minus[c],(OverBar[m])]]=(Underscript[ParseTerm, P])[™Times[-c,(OverBar[m])]]}, {(Underscript[ParsePol, P])[™Times[c,(OverBar[m])]]=(Underscript[ParseTerm, P])[™Times[c,(OverBar[m])]]}, {(Underscript[ParsePol, P])[™Minus[™Times[™Minus[c],(OverBar[m])]]]=(Underscript[ParseTerm, P])[™Times[c,(OverBar[m])]]}, {(Underscript[ParsePol, P])[™Minus[™Times[c,(OverBar[m])]]]=(Underscript[ParseTerm, P])[™Times[-c,(OverBar[m])]]}, {(Underscript[ParsePol, P])[™Minus[™Times[c,(OverBar[m])],m,n,(OverBar[n])]]=(Underscript[ParsePol, P])[™Times[c,(OverBar[m])]]≍(Underscript[ParsePol, P])[™Plus[™Minus[m],™Minus[n,(OverBar[n])]]]}, {(Underscript[ParsePol, P])[™Minus[m,n,(OverBar[n])]]=(Underscript[ParsePol, P])[m]≍(Underscript[ParsePol, P])[™Minus[n,(OverBar[n])]]}, {(Underscript[ParsePol, P])[™Minus[c]]={({{⟨⟨-c,⟨⟩⟩⟩, ⇐, ™IsNumber[c]}, {(Underscript[ParseTerm, P])[™Minus[c]], ⇐, otherwise}})}}, {(Underscript[ParsePol, P])[c]={({{⟨⟨c,⟨⟩⟩⟩, ⇐, ™IsNumber[c]}, {(Underscript[ParseTerm, P])[c], ⇐, otherwise}})}  }, {(Underscript[ParseTerm, P])[™Minus[c]]={({{⟨⟨-c,⟨⟩⟩⟩, ⇐, ™IsNumber[c]}, {-1(Underscript[·, ℱ])(Underscript[ParseMon, P])[c], ⇐, otherwise}})}  }, {(Underscript[ParseTerm, P])[™Times[™Minus[c],(OverBar[m])]]={({{-c(Underscript[·, ℱ])(Underscript[ParseTerm, P])[™Times[(OverBar[m])]], ⇐, ™IsNumber[c]}, {-1(Underscript[·, ℱ])(Underscript[ParseTerm, P])[™Times[c,(OverBar[m])]], ⇐, otherwise}})}  }, {(Underscript[ParseTerm, P])[™Times[c,(OverBar[m])]]={({{c(Underscript[·, ℱ])(Underscript[ParseTerm, P])[™Times[(OverBar[m])]], ⇐, ™IsNumber[c]}, {(Underscript[ParseMon, P])[™Times[c,(OverBar[m])]], ⇐, otherwise}})}  }, {(Underscript[ParseTerm, P])[c]={({{⟨⟨c,⟨⟩⟩⟩, ⇐, ™IsNumber[c]}, {(Underscript[ParseMon, P])[c], ⇐, otherwise}})}  }, {(Underscript[ParseTerm, P])[™Times[]]=⟨⟩}, {(Underscript[ParseMon, P])[™Tuple[™Tuple[a,b],™Tuple[c,d]]]=⟨⟨1,⟨⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[™Tuple[™Tuple[a,b],™Tuple[c,d]]]]=⟨⟨1,⟨⟨"mat",⟨⟨a,b⟩,⟨c,d⟩⟩⟩⟩⟩⟩}, {(Underscript[ParseMon, P])[D1]=⟨⟨1,⟨"D1"⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[D1]]=⟨⟨1,⟨"D1"⟩⟩⟩}, {(Underscript[ParseMon, P])[D2]=⟨⟨1,⟨"D2"⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[D2]]=⟨⟨1,⟨"D2"⟩⟩⟩}, {(Underscript[ParseMon, P])[A1]=⟨⟨1,⟨"A1"⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[A1]]=⟨⟨1,⟨"A1"⟩⟩⟩}, {(Underscript[ParseMon, P])[A2]=⟨⟨1,⟨"A2"⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[A2]]=⟨⟨1,⟨"A2"⟩⟩⟩}, {(Underscript[ParseMon, P])[L1]=⟨⟨1,⟨"L1"⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[L1]]=⟨⟨1,⟨"L1"⟩⟩⟩}, {(Underscript[ParseMon, P])[L2]=⟨⟨1,⟨"L2"⟩⟩⟩}, {(Underscript[ParseMon, P])[™Times[L2]]=⟨⟨1,⟨"L2"⟩⟩⟩}, {(Underscript[ParseMon, P])[™Power[m,0]]=⟨⟩}, {(Underscript[ParseMon, P])[™Power[m,1]]=(Underscript[ParseMon, P])[m]}, {(Underscript[ParseMon, P])[™Power[m,n]]=(Underscript[ParseMon, P])[m](Underscript[*, ℱ])(Underscript[ParseMon, P])[™Power[m,n(Underscript[-, MmaAuxF[]])1]]}, {(Underscript[ParseMon, P])[™Times[m,n,(OverBar[n])]]=(Underscript[ParseMon, P])[m](Underscript[*, ℱ])(Underscript[ParseMon, P])[™Times[n,(OverBar[n])]]}, {(Underscript[ParseMon, P])[c]=⟨⟨c,⟨⟩⟩⟩}, {(Underscript[ParseMon, P])[]=⟨⟩}})}})]]

Theory for Integro-Diff Operators for PDEs

Definition["PDE",
({{𝕂=ReductionField[ℂ]}, {𝔽ℙ=FreeIntDiffOp[𝕂]}, {𝔾ℙ=GB[FreeIntDiffOp[𝕂]]}, {𝕀ℙ=IntDiffOp[𝕂]}, {𝔾𝕣ℙ=GreenSystem[𝕂]}, {𝔹ℙ=BoundaryProblemsPDE[𝕂]}, {𝕒𝕡=ParsingPDE[𝔽ℙ]}, {𝕡𝕡=PrettyPrintPDE[𝔽ℙ,𝕂]}})
]

Theory["PDE",
({{Definition["Natural Numbers"]}, {Definition["ℕ"]}, {Definition["Rational Number Field"]}, {Definition["ℚ"]}, {Definition["Reduction Field"]}, {Definition["Complex Number Field"]}, {Definition["ℂ"]}, {Definition["Complex Numbers"]}, {Definition["ℂM"]}, {Definition["Finite Chain"]}, {Definition["Word Monoid"]}, {Definition["Word Monoid with Degree Ordering"]}, {Definition["Cartesian Product"]}, {Definition["Free Vector Space"]}, {Definition["Monoid Algebra"]}, {Definition["Groebner Extension"]}, {Definition["Basis for PDE"]}, {Definition["⥛"]}, {Definition["FreeIntDiffOp for PDE"]}, {Definition["Quotient Algebra"]}, {Definition["Matrix Ring"]}, {Definition["Green System for PDE"]}, {Definition["Groebner Basis Normal Form"]}, {Definition["IntDiffOp for PDE"]}, {Definition["Boundary Problems for PDE"]}, {Definition["PDE"]}, {Definition["PrettyPrintPDE"]}, {Definition["ParsingPDE"]}, {Definition["Mma Auxiliary Functions"]}})
]

Built–in["PDE",
({{Built–in["Numbers"]}, {Built–in["Quantifiers"]}, {Built–in["Tuples"]}, {Built–in["Connectives"]}, {Built–in["Sets"]}, {Built–in["Operators"]}, {Built–in["IsComplex"]}, {Built–in["ComplexLt"]}, {Built–in["MmaSimplify"]}, {Built–in["Mult"]}, {Built–in["Minus"]}, {Built–in["IsNumber"]}})]

ParsePDE

AddFreshNameKeywords[{"ParsePDE","ParsePDEs","FormatPDE","ComputePDE","GreensOpPDE","MultPDE","FactPDE","MultFPDE"}];

Clear[ParsePDE,ComputePDE,FormatPDE];

Use[Theory["PDE"]]

ParsePDE[p___]:=Compute[(Underscript[ParsePol, 𝕒𝕡])[p],built–in->⟨Built–in["Tuples"],Built–in["Quantifiers"],Built–in["Connectives"],Built–in["Mult"],Built–in["Minus"],Built–in["IsNumber"]⟩];

ComputePDE[p_]:=Compute[p,built–in->Built–in["PDE"]];

FormatPDE[p_]:=Compute[(Underscript[PrettyPrint, 𝕡𝕡])[p],built–in->Built–in["PDE"]];

ParsePDEs[p_]:=ComputePDE[ParsePDE[p]];

GreensOpPDE[n1_,n2_,n3_]:=FormatPDE[ComputePDE[(Underscript[GreensOp, 𝔹ℙ])[n1,n2,n3]]];

MultPDE[p_,q_]:=FormatPDE[ComputePDE[ParsePDE[p](Underscript[*, 𝕀ℙ])ParsePDE[q]]];

Example Setting

The Minimal Example	({{u''=f}, {u(0)=u(1)=0}})

Use[Theory["Minimal Example"]]

Green's Operator without parsing

Clear[G0];

G0=Compute[(Underscript[GreensOp, 𝔹])[⟨⟨1,⟨"∂","∂"⟩⟩⟩,⟨⟨⟨1,⟨⟨"⌊⌋",0⟩⟩⟩⟩,⟨⟨1,⟨⟨"⌊⌋",1⟩⟩⟩⟩⟩],built–in->Built–in["Minimal Example"]]

Compute[(Underscript[GreensFct, 𝕘𝕗])[%],built–in->Built–in["Minimal Example"]]

Compute[⟨⟨1,⟨"∂","∂"⟩⟩⟩(Underscript[*, 𝕀])⟨⟨1,⟨⟨"⌈⌉",⟨1,0⟩⟩,⟨"⌊⌋",1⟩,"∫",⟨"⌈⌉",⟨1,0⟩⟩⟩⟩,⟨-1,⟨⟨"⌈⌉",⟨1,0⟩⟩,⟨"⌊⌋",1⟩,"∫"⟩⟩,⟨-1,⟨"∫",⟨"⌈⌉",⟨1,0⟩⟩⟩⟩,⟨1,⟨⟨"⌈⌉",⟨1,0⟩⟩,"∫"⟩⟩⟩,built–in->Built–in["Minimal Example"]]

Compute[⟨⟨1,⟨⟨"⌊⌋",0⟩⟩⟩⟩(Underscript[*, 𝕀])⟨⟨1,⟨⟨"⌈⌉",⟨1,0⟩⟩,⟨"⌊⌋",1⟩,"∫",⟨"⌈⌉",⟨1,0⟩⟩⟩⟩,⟨-1,⟨⟨"⌈⌉",⟨1,0⟩⟩,⟨"⌊⌋",1⟩,"∫"⟩⟩,⟨-1,⟨"∫",⟨"⌈⌉",⟨1,0⟩⟩⟩⟩,⟨1,⟨⟨"⌈⌉",⟨1,0⟩⟩,"∫"⟩⟩⟩,built–in->Built–in["Minimal Example"]]

Compute[⟨⟨1,⟨⟨"⌊⌋",1⟩⟩⟩⟩(Underscript[*, 𝕀])⟨⟨1,⟨⟨"⌈⌉",⟨1,0⟩⟩,⟨"⌊⌋",1⟩,"∫",⟨"⌈⌉",⟨1,0⟩⟩⟩⟩,⟨-1,⟨⟨"⌈⌉",⟨1,0⟩⟩,⟨"⌊⌋",1⟩,"∫"⟩⟩,⟨-1,⟨"∫",⟨"⌈⌉",⟨1,0⟩⟩⟩⟩,⟨1,⟨⟨"⌈⌉",⟨1,0⟩⟩,"∫"⟩⟩⟩,built–in->Built–in["Minimal Example"]]

Factorization

Fact[D,D,⟨L,R⟩,⟨R⟩]

MultF[⟨D,⟨R A⟩⟩,⟨D,⟨L⟩⟩]

The Third-Order Example	({{u'''-((e^x)+2)u''-u'+((e^x)+2)u=f}, {u(0)=u(1)=u'(1)=0}})

Use[Theory["Third-Order Example"]]

Clear[G2];

G2=GreensOpM[⟨⌈(E^x)⌉,⌈(E^(-x))⌉,⌈(E^(E^x))⌉-⌈(E^(E^x))(E^(-x))⌉⟩,⟨L,R,R D⟩]

GreensFctM[G2]

MultM[(D^3)-⌈(E^x)⌉(D^2)-2 (D^2)-D+(⌈(E^x)⌉+2),G2]

MultM[L,G2]

MultM[R,G2]

MultM[R D,G2]

The Fourth-Order Example	({{u''''+4=f}, {u(0)=u(1)=u'(0)=u'(1)=0}})

Use[Theory["Minimal Example"]]

Green's Operator

Clear[G3];

G3=GreensOp[(D^4)+4,⟨R D,L D,R,L⟩]

GreensFct[G3]

Mult[(D^4)+4,G3]

Mult[L,G3]

Mult[R,G3]

Mult[L D,G3]

Mult[R D,G3]

Factorization

Fact[(D^2)-2I,(D^2)+2 I,⟨L,R,L D,R D⟩,⟨(E^((-1+I)x)),(E^((1-I)x))⟩]

Checking:

MultF[⟨(D^2)-2 I,⟨A (E^((Complex[-1,1])x))+B (E^((Complex[-1,1])x)),A (E^((Complex[1,-1])x))+B (E^((Complex[1,-1])x))⟩⟩,⟨(D^2)+2I,⟨R,L⟩⟩]

The Wave Equation Example	({{(Subscript[u, tt])-(Subscript[u, xx])=f}, {u(x,0)=(Subscript[u, t])(x,0)=0}})

Use[Theory["PDE"]]

𝒫1

a=1,b=-1,c=0,k=0

GreensOpPDE[1,-1,0]

Check the differential equation:

MultPDE[D1-D2,⟨⟨1,0⟩,⟨1,1⟩⟩A1⟨⟨1,0⟩,⟨-1,1⟩⟩]

Check the boundary condition:

MultPDE[L1,⟨⟨1,0⟩,⟨1,1⟩⟩A1⟨⟨1,0⟩,⟨-1,1⟩⟩]

𝒫2

a=1,b=1,c=0,k=0

GreensOpPDE[1,1,0]

Check the differential equation:

MultPDE[D1+D2,⟨⟨1,0⟩,⟨-1,1⟩⟩A1⟨⟨1,0⟩,⟨1,1⟩⟩]

Check the boundary condition:

MultPDE[L1,⟨⟨1,0⟩,⟨-1,1⟩⟩A1⟨⟨1,0⟩,⟨1,1⟩⟩]

Wave Equation

MultPDE[⟨⟨1,0⟩,⟨-1,1⟩⟩A1⟨⟨1,0⟩,⟨1,1⟩⟩,⟨⟨1,0⟩,⟨1,1⟩⟩A1⟨⟨1,0⟩,⟨-1,1⟩⟩]

Check the differential equation:

MultPDE[(D1^2)-(D2^2),⟨⟨1,0⟩,⟨-1,1⟩⟩A1⟨⟨1,0⟩,⟨2,1⟩⟩A1⟨⟨1,0⟩,⟨-1,1⟩⟩]

Check the first boundary condition:

MultPDE[L1,⟨⟨1,0⟩,⟨-1,1⟩⟩A1⟨⟨1,0⟩,⟨2,1⟩⟩A1⟨⟨1,0⟩,⟨-1,1⟩⟩]

Check the second boundary condition:

MultPDE[D1 L1,⟨⟨1,0⟩,⟨-1,1⟩⟩A1⟨⟨1,0⟩,⟨2,1⟩⟩A1⟨⟨1,0⟩,⟨-1,1⟩⟩]