Definition Formula := Formula LNN.Definition Formulas := Formulas LNN.Definition System := System LNN.Definition Sentence := Sentence LNN.Definition Term := Term LNN.Definition Terms := Terms LNN.Definition var := var LNN.Definition equal := equal LNN.Definition impH := impH LNN.Definition notH := notH LNN.Definition iffH := iffH LNN.Definition forallH := forallH LNN.Definition orH := orH LNN.Definition andH := andH LNN.Definition existH := existH LNN.Definition ifThenElseH := ifThenElseH LNN.Definition SysPrf := SysPrf LNN.Definition Plus (x y : Term) : Term :=
  apply LNN Plus (Tcons LNN 1 x (Tcons LNN 0 y (Tnil LNN))).Definition Times (x y : Term) : Term :=
  apply LNN Times (Tcons LNN 1 x (Tcons LNN 0 y (Tnil LNN))).Definition Succ (x : Term) : Term :=
  apply LNN Succ (Tcons LNN 0 x (Tnil LNN)).Definition Zero : Term := apply LNN Zero (Tnil LNN).Definition LT (x y : Term) : Formula :=
  atomic LNN LT (Tcons LNN 1 x (Tcons LNN 0 y (Tnil LNN))).

(* Specifications: *)
Lemma LNN_dec : language_decideable LNN.
Lemma freeVarPlus : forall x y : Term, freeVarTerm LNN (Plus x y) = freeVarTerm LNN x ++ freeVarTerm LNN y.
Lemma freeVarTimes : forall x y : Term, freeVarTerm LNN (Times x y) = freeVarTerm LNN x ++ freeVarTerm LNN y.
Lemma freeVarSucc : forall x : Term, freeVarTerm LNN (Succ x) = freeVarTerm LNN x.
Lemma freeVarZero : freeVarTerm LNN Zero = nil.
Lemma freeVarLT : forall x y : Term, freeVarFormula LNN (LT x y) = freeVarTerm LNN x ++ freeVarTerm LNN y.
Lemma Axm : forall (T : System) (f : Formula), mem _ T f -> SysPrf T f.
Lemma sysExtend : forall (T U : System) (f : Formula), Included _ T U -> SysPrf T f -> SysPrf U f.
Lemma sysWeaken : forall (T : System) (f g : Formula), SysPrf T f -> SysPrf (Ensembles.Add _ T g) f.
Lemma impI : forall (T : System) (f g : Formula), SysPrf (Ensembles.Add _ T g) f -> SysPrf T (impH g f).
Lemma impE : forall (T : System) (f g : Formula), SysPrf T (impH g f) -> SysPrf T g -> SysPrf T f.
Lemma contradiction : forall (T : System) (f g : Formula), SysPrf T f -> SysPrf T (notH f) -> SysPrf T g.
Lemma nnE : forall (T : System) (f : Formula), SysPrf T (notH (notH f)) -> SysPrf T f.
Lemma noMiddle : forall (T : System) (f : Formula), SysPrf T (orH (notH f) f).
Lemma nnI : forall (T : System) (f : Formula), SysPrf T f -> SysPrf T (notH (notH f)).
Lemma cp1 : forall (T : System) (f g : Formula), SysPrf T (impH (notH f) (notH g)) -> SysPrf T (impH g f).
Lemma cp2 : forall (T : System) (f g : Formula), SysPrf T (impH g f) -> SysPrf T (impH (notH f) (notH g)).
Lemma orI1 : forall (T : System) (f g : Formula), SysPrf T f -> SysPrf T (orH f g).
Lemma orI2 : forall (T : System) (f g : Formula), SysPrf T g -> SysPrf T (orH f g).
Lemma orE : forall (T : System) (f g h : Formula), SysPrf T (orH f g) -> SysPrf T (impH f h) -> SysPrf T (impH g h) -> SysPrf T h.
Lemma orSys : forall (T : System) (f g h : Formula), SysPrf (Ensembles.Add _ T f) h -> SysPrf (Ensembles.Add _ T g) h -> SysPrf (Ensembles.Add _ T (orH f g)) h.
Lemma andI : forall (T : System) (f g : Formula), SysPrf T f -> SysPrf T g -> SysPrf T (andH f g).
Lemma andE1 : forall (T : System) (f g : Formula), SysPrf T (andH f g) -> SysPrf T f.
Lemma andE2 : forall (T : System) (f g : Formula), SysPrf T (andH f g) -> SysPrf T g.
Lemma iffI : forall (T : System) (f g : Formula), SysPrf T (impH f g) -> SysPrf T (impH g f) -> SysPrf T (iffH f g).
Lemma iffE1 : forall (T : System) (f g : Formula), SysPrf T (iffH f g) -> SysPrf T (impH f g).
Lemma iffE2 : forall (T : System) (f g : Formula), SysPrf T (iffH f g) -> SysPrf T (impH g f).
Lemma forallI : forall (T : System) (f : Formula) (v : nat), ~ In_freeVarSys LNN v T -> SysPrf T f -> SysPrf T (forallH v f).
Lemma forallE : forall (T : System) (f : Formula) (v : nat) (t : Term), SysPrf T (forallH v f) -> SysPrf T (substituteFormula LNN f v t).
Lemma forallSimp : forall (T : System) (f : Formula) (v : nat), SysPrf T (forallH v f) -> SysPrf T f.
Lemma existI : forall (T : System) (f : Formula) (v : nat) (t : Term), SysPrf T (substituteFormula LNN f v t) -> SysPrf T (existH v f).
Lemma existE : forall (T : System) (f g : Formula) (v : nat), ~ In_freeVarSys LNN v T -> ~ In v (freeVarFormula LNN g) -> SysPrf T (existH v f) -> SysPrf T (impH f g) -> SysPrf T g.
Lemma existSimp : forall (T : System) (f : Formula) (v : nat), SysPrf T f -> SysPrf T (existH v f).
Lemma existSys : forall (T : System) (f g : Formula) (v : nat), ~ In_freeVarSys LNN v T -> ~ In v (freeVarFormula LNN g) -> SysPrf (Ensembles.Add _ T f) g -> SysPrf (Ensembles.Add _ T (existH v f)) g.
Lemma absurd1 : forall (T : System) (f : Formula), SysPrf T (impH f (notH f)) -> SysPrf T (notH f).
Lemma nImp : forall (T : System) (f g : Formula), SysPrf T (andH f (notH g)) -> SysPrf T (notH (impH f g)).
Lemma nOr : forall (T : System) (f g : Formula), SysPrf T (andH (notH f) (notH g)) -> SysPrf T (notH (orH f g)).
Lemma nAnd : forall (T : System) (f g : Formula), SysPrf T (orH (notH f) (notH g)) -> SysPrf T (notH (andH f g)).
Lemma nForall : forall (T : System) (f : Formula) (v : nat), SysPrf T (existH v (notH f)) -> SysPrf T (notH (forallH v f)).
Lemma nExist : forall (T : System) (f : Formula) (v : nat), SysPrf T (forallH v (notH f)) -> SysPrf T (notH (existH v f)).
Lemma impRefl : forall (T : System) (f : Formula), SysPrf T (impH f f).
Lemma impTrans : forall (T : System) (f g h : Formula), SysPrf T (impH f g) -> SysPrf T (impH g h) -> SysPrf T (impH f h).
Lemma orSym : forall (T : System) (f g : Formula), SysPrf T (orH f g) -> SysPrf T (orH g f).
Lemma andSym : forall (T : System) (f g : Formula), SysPrf T (andH f g) -> SysPrf T (andH g f).
Lemma iffRefl : forall (T : System) (f : Formula), SysPrf T (iffH f f).
Lemma iffSym : forall (T : System) (f g : Formula), SysPrf T (iffH f g) -> SysPrf T (iffH g f).
Lemma iffTrans : forall (T : System) (f g h : Formula), SysPrf T (iffH f g) -> SysPrf T (iffH g h) -> SysPrf T (iffH f h).
Lemma eqRefl : forall (T : System) (a : Term), SysPrf T (equal a a).
Lemma eqSym : forall (T : System) (a b : Term), SysPrf T (equal a b) -> SysPrf T (equal b a).
Lemma eqTrans : forall (T : System) (a b c : Term), SysPrf T (equal a b) -> SysPrf T (equal b c) -> SysPrf T (equal a c).
Lemma eqPlus : forall (T : System) (a b c d : Term), SysPrf T (equal a b) -> SysPrf T (equal c d) -> SysPrf T (equal (Plus a c) (Plus b d)).
Lemma eqTimes : forall (T : System) (a b c d : Term), SysPrf T (equal a b) -> SysPrf T (equal c d) -> SysPrf T (equal (Times a c) (Times b d)).
Lemma eqSucc : forall (T : System) (a b : Term), SysPrf T (equal a b) -> SysPrf T (equal (Succ a) (Succ b)).
Lemma eqLT : forall (T : System) (a b c d : Term), SysPrf T (equal a b) -> SysPrf T (equal c d) -> SysPrf T (iffH (LT a c) (LT b d)).