Fixpoint RepresentableHalf1 (n : nat) : naryFunc n -> Formula -> Prop :=
  match n return (naryFunc n -> Formula -> Prop) with
  | O =>
      fun (f : naryFunc 0) (A : Formula) =>
      SysPrf T (impH A (equal (var 0) (natToTerm f)))
  | S m =>
      fun (f : naryFunc (S m)) (A : Formula) =>
      forall a : nat,
      RepresentableHalf1 m (f a)
        (substituteFormula LNN A (S m) (natToTerm a))
  end.Fixpoint RepresentableHalf2 (n : nat) : naryFunc n -> Formula -> Prop :=
  match n return (naryFunc n -> Formula -> Prop) with
  | O =>
      fun (f : naryFunc 0) (A : Formula) =>
      SysPrf T (impH (equal (var 0) (natToTerm f)) A)
  | S m =>
      fun (f : naryFunc (S m)) (A : Formula) =>
      forall a : nat,
      RepresentableHalf2 m (f a)
        (substituteFormula LNN A (S m) (natToTerm a))
  end.

(* Specifications: *)
Lemma RepresentableHalf1Alternate : forall (n : nat) (f : naryFunc n) (A B : Formula), SysPrf T (impH A B) -> RepresentableHalf1 n f B -> RepresentableHalf1 n f A.
Lemma RepresentableHalf2Alternate : forall (n : nat) (f : naryFunc n) (A B : Formula), SysPrf T (impH A B) -> RepresentableHalf2 n f A -> RepresentableHalf2 n f B.