# Data.Nat.Fact

Properties of factorial functions.

factAcc : Nat -> Nat -> Nat

  Tail-recursive accumulator for factItr.

factAccMult : (a : Nat) -> (b : Nat) -> (c : Nat) -> a * factAcc b c = factAcc b (a * c)

  Multiplication of the accumulator.

factAccPlus : (a : Nat) -> (b : Nat) -> (c : Nat) -> factAcc a b + factAcc a c = factAcc a (b + c)

  Addition of accumulators.

factItr : Nat -> Nat

  Iterative definition of factorial.

factRec : Nat -> Nat

  Recursive definition of factorial.

factRecItr : (n : Nat) -> factRec n = factItr n

  The recursive and iterative definitions are the equivalent.

multShuffle : (a : Nat) -> (b : Nat) -> (c : Nat) -> a * (b * c) = b * (a * c)

  Multiplicand-shuffling lemma.