// Programma che raccoglie le funzioni ricorsive per la somma, la
// moltiplicazione di numeri naturali, scritte nella
// ipotesi di poter usare solo Succ e Pred 

#include <iostream.h>

int Succ (int x)
{ return x+1; }

int Pred(int x)
{ return x-1; }


/*
   si ricorda che il dominio dei naturali e'
   definito induttivamente come segue:

   0 e' un Nat;
   n+1 e' un Nat, se n e' un Nat
*/


/*
progettazione di somma:

caso base:          0 + m = m
caso induttivo: [n+1] + m = [(n + m)+1]
*/

int Somma(int n, int m)
{
  if (n == 0) return m;
  else return Succ(Somma(Pred(n),m));
}


/*
progettazione di molt:

caso base: 0 * m = 0
caso induttivo [n+1] * m = (n * m) + m
*/

int Molt(int n, int m)
{
  if (n == 0) return 0;
  else return Somma(m,Molt(Pred(n),m));
}

void main()
{ // istruzioni di test per le funzioni Somma, Molt
}




