<?xml version="1.0"?>
<!-- $Id: hypergeon2.tfb,v 1.4 2003/11/30 13:21:28 taka Exp $ -->
<CD>
<CDName> hypergeon2 </CDName>
<CDURL> http://www.math.kobe-u.ac.jp/OCD/hypergeon2.tfb </CDURL>
<CDReviewDate> 2003-08-07 </CDReviewDate>
<CDStatus> experimental </CDStatus>
<CDDate> 2002-08-07, 2003-11-30 </CDDate>
<CDVersion> 1 </CDVersion>
<CDRevision> 1 </CDRevision>
<CDUses>
 <!-- private cd's -->
  <CDName>hypergeo1</CDName>
  <CDName>hypergeon0</CDName>
 <!-- official cd's  -->
  <CDName>arith1</CDName>
  <CDName>fns1</CDName>
  <CDName>interval1</CDName>
  <CDName>linalg1</CDName>
  <CDName>linalg4</CDName>
  <CDName>relation1</CDName>
  <CDName>set1</CDName>
</CDUses>

<Description> 
This CD defines symbols for classical hypergeometric series
of several variables, which include Appell functions and Lauricella
functions.
</Description>

<CDDefinition>
<Name> multi_pochhammer </Name>
<Description>
  multi_pochhammer is a product of pochhammer symbols.
</Description>

<CMP>
  $ (a)_n = \prod_{i=1}^{m} (a_{i})_{n_{i}} $
</CMP>

<FMP>
<tfb>
  multi_pochhammer(a,n) ~relation1.eq~
   arith1.product(  interval1.integer_interval(1,linalg4.columnsize(n))
                  OMLBIND(OMBVAR(i),
           hypergeo0.pochhammer(linalg1.vector_selector(i,a),
                                 linalg1.vector_selector(i,n))));
</tfb>
</FMP>

</CDDefinition>


<CDDefinition>
<Name> appel_F1 </Name>
<Description>
  Appell's hypergeometric series F_1
 reference:
    authors: "Appel, Kampe de Feriet"
    title: "Les Fonctions Hypergeometriques de Plusieurs Variables et
            Polynome d'Hermite"
    pages: 14
</Description>

<CMP>
  $ F_1(a,b,b',c;x,y) = \sum_{m,n=0}^{\infty}
           \frac{(a)_{m+n} (b)_m (b')_n}{(c)_{m+n} (1)_{m} (1)_{n}}x^{m}y^{n}$
</CMP>

<FMP>
<tfb>
  apple_F1(a,b1,b2,c,x,y) ~relation1.eq~
  arith1.sum(
    set1.cartesian_product(setname1.N, setname1.N),
    OMLBIND(OMBVAR(m),
     arith1.divide(hypergeo0.pochhammer(a,linalg1.vector_selector(1,m) ~arith1.plus~
                                          linalg1.vector_selector(2,m))
                  ~arith1.times~
                   hypergeo0.pochhammer(b1,linalg1.vector_selector(1,m))
                  ~arith1.times~
                   hypergeo0.pochhammer(b2,linalg1.vector_selector(2,m)),

                   hypergeo0.pochhammer(c,linalg1.vector_selector(1,m) ~arith1.plus~
                                          linalg1.vector_selector(2,m))
                  ~arith1.times~
                   hypergeo0.pochhammer(1,linalg1.vector_selector(1,m))
                  ~arith1.times~
                   hypergeo0.pochhammer(1,linalg1.vector_selector(2,m)))
     ~arith1.times~ ( arith1.power(x,vector_selector(1,m))
                     ~arith1.times~ 
                      arith1.power(y,vector_selector(2,m))
                    )));
</tfb>
</FMP>
</CDDefinition>

<CDDefinition>
<Name> appel_F2 </Name>
<Description>
  Appell's hypergeometric series F_2
  reference:
    authors: "Appel, Kampe de Feriet"
    title: "Les Fonctions Hypergeometriques de Plusieurs Variables et
            Polynome d'Hermite"
    pages: 14
</Description>

<CMP>
  $ F_2(a,b,b',c,c';x,y) = \sum_{m,n=0}^\infty
           \frac{(a)_{m+n} (b)_{m}(b')_{n}}
                {(c)_{m} (c')_{n} (1)_{m} (1)_{n}}x^{m}y^{n} $
</CMP>

<FMP>
<tfb>
  apple_F2(a,b1,b2,c1,c2,x,y) ~relation1.eq~
  arith1.sum(
    set1.cartesian_product(setname1.N, setname1.N),
    OMLBIND(OMBVAR(m),
     arith1.divide(hypergeo0.pochhammer(a,linalg1.vector_selector(1,m) ~arith1.plus~
                                          linalg1.vector_selector(2,m))
                  ~arith1.times~
                   hypergeo0.pochhammer(b1,linalg1.vector_selector(1,m))
                  ~arith1.times~
                   hypergeo0.pochhammer(b2,linalg1.vector_selector(2,m)),

                   hypergeo0.pochhammer(c1,linalg1.vector_selector(1,m))
                  ~arith1.times~
                   hypergeo0.pochhammer(c2,linalg1.vector_selector(2,m))
                  ~arith1.times~
                   hypergeo0.pochhammer(1,linalg1.vector_selector(1,m))
                  ~arith1.times~
                   hypergeo0.pochhammer(1,linalg1.vector_selector(2,m)))
     ~arith1.times~ ( arith1.power(x,vector_selector(1,m))
                     ~arith1.times~ 
                      arith1.power(y,vector_selector(2,m))
                    )));
</tfb>
</FMP>
</CDDefinition>

<CDDefinition>
<Name> appel_F3 </Name>
<Description>
  Appell's hypergeometric series F_3
 reference:
    authors: "Appel, Kampe de Feriet"
    title: "Les Fonctions Hypergeometriques de Plusieurs Variables et
            Polynome d'Hermite"
    pages: 14
</Description>

<CMP>
  $ F_3(a,a',b,b',c;x,y) = \sum_{m,n=0}^{\infty}
           \frac{(a)_{m}(a')_{n}(b)_{m}(b')_{n}}
                {(c)_{m+n}(1)_{m}(1)_{n}}x^{m}y^{n}$
</CMP>

<FMP>
<tfb>
  apple_F3(a1,a2,b1,b2,c,x,y) ~relation1.eq~
  arith1.sum(
    set1.cartesian_product(setname1.N, setname1.N),
    OMLBIND(OMBVAR(m),
     arith1.divide(hypergeo0.pochhammer(a1,linalg1.vector_selector(1,m))
                  ~arith1.times~
                   hypergeo0.pochhammer(a2,linalg1.vector_selector(1,m))
                  ~arith1.times~
                   hypergeo0.pochhammer(b1,linalg1.vector_selector(1,m))
                  ~arith1.times~
                   hypergeo0.pochhammer(b2,linalg1.vector_selector(2,m)),

                   hypergeo0.pochhammer(c,linalg1.vector_selector(1,m) ~arith1.plus~
                                          linalg1.vector_selector(2,m))
                  ~arith1.times~
                   hypergeo0.pochhammer(1,linalg1.vector_selector(1,m))
                  ~arith1.times~
                   hypergeo0.pochhammer(1,linalg1.vector_selector(2,m)))
     ~arith1.times~ ( arith1.power(x,vector_selector(1,m))
                     ~arith1.times~ 
                      arith1.power(y,vector_selector(2,m))
                    )));
</tfb>
</FMP>
</CDDefinition>

<CDDefinition>
<Name> appel_F4 </Name>
<Description>
  Appell's hypergeometric series F_4
  reference:
    authors: "Appel, Kampe de Feriet"
    title: "Les Fonctions Hypergeometriques de Plusieurs Variables et
            Polynome d'Hermite"
    pages: 14 
</Description>

<CMP>
  $ F_4(a,b,c,c';x,y) = \sum_{m,n=0}^{\infty}
           \frac{(a)_{m+n} (b)_{m+n}}{(c1)_{m}(c2)_{n}(1)_{m}(1)_{n}}x^{m}y^{n} $
</CMP>

<FMP>
<tfb>
  apple_F4(a,b,c1,c2,x,y) ~relation1.eq~
  arith1.sum(
    set1.cartesian_product(setname1.N, setname1.N),
    OMLBIND(OMBVAR(m),
     arith1.divide(hypergeo0.pochhammer(a,linalg1.vector_selector(1,m) 
                                          ~arith1.plus~
                                          linalg1.vector_selector(2,m))
                  ~arith1.times~
                   hypergeo0.pochhammer(b,linalg1.vector_selector(1,m) 
                                          ~arith1.plus~
                                          linalg1.vector_selector(2,m)),

                   hypergeo0.pochhammer(c1,linalg1.vector_selector(1,m))
                  ~arith1.times~
                   hypergeo0.pochhammer(c2,linalg1.vector_selector(2,m))
                  ~arith1.times~
                   hypergeo0.pochhammer(1,linalg1.vector_selector(1,m))
                  ~arith1.times~
                   hypergeo0.pochhammer(1,linalg1.vector_selector(2,m)))
     ~arith1.times~ ( arith1.power(x,vector_selector(1,m))
                     ~arith1.times~ 
                      arith1.power(y,vector_selector(2,m))
                    )));
</tfb>
</FMP>
</CDDefinition>

<CDDefinition>
<Name> lauricella_FA </Name>
<Description>
  Lauricella's hypergeometric series F_A of n variables.
  In case of one variables, it agrees with the Appel function F_2.
  reference:
    authors: "Appel, Kampe de Feriet"
    title: "Les Fonctions Hypergeometriques de Plusieurs Variables et
            Polynome d'Hermite"
    pages: 
</Description>

<CMP>
  $ F_A(a,b,c;x) = \sum_{k \in \N^n}^{\infty}
           \frac{(a)_{\sum k_i} \prod (b_i)_{k_i}}
                {\prod (c_i)_{k_i} \prod (1)_{k_i}} x^{k} $
</CMP>


<FMP>
<tfb>
 OMLBIND( OMBVAR(n),
  lauricella_FA(a,b,c,x) ~relation1.eq~
  arith1.sum(
    hypergeon0.cartesian_product_n(setname1.N, n),
    OMLBIND(OMBVAR(k),
     arith1.divide(hypergeo0.pochhammer(a,
                    arith1.sum(interval1.integer_interval(1,n),
                      OMLBIND(OMBVAR(i), vector_selector(i,k))))
                  ~arith1.times~
                   arith1.prod(interval1.integer_interval(1,n),
                      OMLBIND(OMBVAR(i),
                        hypergeo0.pochhammer(vector_selector(i,b),
                                             vector_selector(i,k)))),

                   arith1.prod(interval1.integer_interval(1,n),
                      OMLBIND(OMBVAR(i),
                        hypergeo0.pochhammer(vector_selector(i,c),
                                             vector_selector(i,k))))
                  ~arith1.times~
                   arith1.prod(interval1.integer_interval(1,n),
                      OMLBIND(OMBVAR(i),
                        hypergeo0.pochhammer(1,
                                             vector_selector(i,k)))))

     ~arith1.times~ hypergeon0.multi_power(x,k)
   )))
  ~hypergeon0.where~
  ( n ~relation1.eq~ linalg4.rowcount(b));
</tfb>
</FMP>
</CDDefinition>

<CDDefinition>
<Name> lauricella_FC </Name>
<Description>
  Lauricella's hypergeometric series F_C of n variables.
  In case of two variable, it agree with the Appel function F_4.
 reference:
    authors: "Appel, Kampe de Feriet"
    title: "Les Fonctions Hypergeometriques de Plusieurs Variables et
            Polynome d'Hermite"
    pages: 
</Description>

<CMP>
  $ F_C(a,b,c;x) = \sum_{k \in {\bf N}^n}^{\infty}
           \frac{(a)_{\sum k_i} (b)_{\sum k_i} }
                {\prod (c_i)_{k_i} \prod (1)_{k_i}} x^{k} $
</CMP>

<FMP>
<tfb>
 OMLBIND( OMBVAR(n),
  lauricella_FC(a,b,c,x) ~relation1.eq~
  arith1.sum(
    hypergeon0.cartesian_product_n(setname1.N, n),
    OMLBIND(OMBVAR(k),
     arith1.divide(hypergeo0.pochhammer(a,
                    arith1.sum(interval1.integer_interval(1,n),
                      OMLBIND(OMBVAR(i), vector_selector(i,k))))
                  ~arith1.times~
                   hypergeo0.pochhammer(b,
                    arith1.sum(interval1.integer_interval(1,n),
                      OMLBIND(OMBVAR(i), vector_selector(i,k)))),

                   arith1.prod(interval1.integer_interval(1,n),
                      OMLBIND(OMBVAR(i),
                        hypergeo0.pochhammer(vector_selector(i,c),
                                             vector_selector(i,k))))
                  ~arith1.times~
                   arith1.prod(interval1.integer_interval(1,n),
                      OMLBIND(OMBVAR(i),
                        hypergeo0.pochhammer(1,
                                             vector_selector(i,k)))))

     ~arith1.times~ hypergeon0.multi_power(x,k)
   )))
 ~hypergeon0.where~
  ( n ~relation1.eq~ linalg4.rowcount(b));
</tfb>
</FMP>
</CDDefinition>

<CDDefinition>
<Name> lauricella_FD </Name>
<Description>
  Lauricella's hypergeometric series F_D of n variables.
  In case of two variables, it agree with the Appell function F_1.
  reference:
    authors: "Appel, Kampe de Feriet"
    title: "Les Fonctions Hypergeometriques de Plusieurs Variables et
            Polynome d'Hermite"
    pages:
</Description>

<CMP>
  $ F_D(a,b,c;x) = \sum_{k \in {\bf N}^n}^{\infty}
           \frac{(a)_{\sum k_i} \prod (b_i)_{k_i}}
                {(c)_{\sum k_i} \prod (1)_{k_i}} x^{k} $
</CMP>

<FMP>
<tfb>
 OMLBIND( OMBVAR(n),
  lauricella_FD(a,b,c,x) ~relation1.eq~
  arith1.sum(
    hypergeon0.cartesian_product_n(setname1.N, n),
    OMLBIND(OMBVAR(k),
     arith1.divide(hypergeo0.pochhammer(a,
                    arith1.sum(interval1.integer_interval(1,n),
                      OMLBIND(OMBVAR(i), vector_selector(i,k))))
                  ~arith1.times~
                   arith1.prod(interval1.integer_interval(1,n),
                      OMLBIND(OMBVAR(i),
                        hypergeo0.pochhammer(vector_selector(i,b),
                                             vector_selector(i,k)))),
                   hypergeo0.pochhammer(c,
                    arith1.sum(interval1.integer_interval(1,n),
                      OMLBIND(OMBVAR(i), vector_selector(i,k))))
                  ~arith1.times~
                   arith1.prod(interval1.integer_interval(1,n),
                      OMLBIND(OMBVAR(i),
                        hypergeo0.pochhammer(1,
                                             vector_selector(i,k)))))

     ~arith1.times~ hypergeon0.multi_power(x,k)
   )))
 ~hypergeon0.where~
  ( n ~relation1.eq~ linalg4.rowcount(b));
</tfb>
</FMP>
</CDDefinition>


</CD>
