Skip to Content.
Sympa Menu

coq-club - [Coq-Club] True arithmetical proposition not provable

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

[Coq-Club] True arithmetical proposition not provable


Chronological Thread 
  • From: Vincent Semeria <vincent.semeria AT gmail.com>
  • To: coq-club AT inria.fr
  • Subject: [Coq-Club] True arithmetical proposition not provable
  • Date: Sat, 19 Jun 2021 10:22:58 +0200
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=vincent.semeria AT gmail.com; spf=Pass smtp.mailfrom=vincent.semeria AT gmail.com; spf=None smtp.helo=postmaster AT mail-oi1-f180.google.com
  • Ironport-hdrordr: A9a23:LZVSNKPtUYFMesBcTsyjsMiBIKoaSvp037BL7TEXdfUxSKalfq+V7ZcmPHPP6Ar5O0tApTnjAtjjfZq0z/ccirX5Vo3SOTUO1lHYSL2KLrGP/9QjIUDDHyJmupuIupIRNOHN
  • Ironport-phdr: A9a23:Zl7TbBIqYesqmC2SxdmcuIRmWUAX0o4c3iYr45Yqw4hDbr6kt8y7ehCGtLM21wOCDdmTwskHotKei7rnV20E7MTJm1E5W7sIaSU4j94LlRcrGs+PBB6zBvfraysnAJYKDwc9rDm0PkdPBcnxeUDZrGGs4j4OABX/Mhd+KvjoFoLIgMm7yuS/94fdbghGizexbrB/IRqrpgjNq8cahpdvJLwswRXTuHtIfOpWxWJsJV2Nmhv3+9m98p1+/SlOovwt78FPX7n0cKQ+VrxYES8pM3sp683xtBnMVhWA630BWWgLiBVIAgzF7BbnXpfttybxq+Rw1DWGMcDwULs5Xymp4aV2Rx/ykCoIOD43/m/UhMJtkqxUvAmsqAZjz4POeoyZKOZyc6HbcNgHRWRBRMFRVylZD4yzbosPCfYOMvher4nhulAAsAWxBQyyC+P1yz9HnGL90Kok0+QgFwHJwBIvH9QSsHjOt9X6KqISXv6vzKnJ1zrOdPxW2TLn54jJdhAtu+2DXbV1ccfIz0QkCgzKgEmKp4P/IzOVyvoCs3Kd7+d4SO+ihHMqpgJ1rzWuwsohiYbEi58Jx13F6yl03Yk4K9O6RUJnbtOpH5hduiKVOoV5Xs4vQn1ktDonxrAIvZO3Yi4Hw4kkyR7Hc/GLbZSE7xb5WOuSITp0nm9pdbO9ihqo7EStyfHwW8+p21hQtCVFiMPDtnUV2hzT9MeHTvx981+k2TmV1gDT7vhIIUc1labGMpIhzKM8m5kPvUjZES/2n0L2jKCSdko64OSn9+PnYrD+qp+dMY97lB3+P7wwlsCjBek0KAsDUmiB9eih1bDu/1f1TKhJg/EqiqXZtYrVJcUfpq63GQ9V1YMj5g6hDzen1tQXgWcILFRZeB6dlIjmJVTOL+7iDfe+mVuhizhrx/XcMb3gBpXBNGTMkLDkfbpl8U5T1BIzzcxD55JTErwOPPXzWlbouNPECh85Lhe7zv38CNR904MeQXiADrWYMKPUq1+I5/ggL/OCZI8P637BLK0u4Oerhnskk3cce7Oo1N0ZciOWBPNjdnuYZ3HhhMtJKmoPsxA/RaS+llyEWjNVezCpUqcx/DAyII2jBIbHAIuqherSj2+AApRKazUeWRi3GnDyetDcMx/pQC2XK85l1DcDUOr5I2fA/RSntQu/zLs+a+SNqnVeupXk29x4oebUkENqndSbJ8uY2mCJCWpzmzFRLwI=

Gödel's incompleteness theorem asserts that the consistency of first-order theories (such as Peano arithmetic or ZFC) is an arithmetical formula which is true in the standard model of arithmetic, but which is not provable by the theory in question.

Assuming LPO, I defined interpretations of arithmetical formulas in Coq, both in bool and in Prop, as shown below. I imagine that Coq's consistency is an arithmetical formula that would be interpreted to true by InterpBool. And not provable would mean that its InterpProp is not provable (as a Prop). However I also proved that InterpBool and InterpProp are equivalent, by an easy induction on the formula. Then I don't see how a true arithmetical formula would be not provable. Is there a problem in my interpretations, or maybe is it because Coq is a second-order logic, in which incompleteness manifests differently ?

Fixpoint InterpProp (varValues : nat -> nat) (p : PeanoProp) {struct p} : Prop :=
  match p with
  | Eq a b => InterpTerm varValues a = InterpTerm PS varValues b
  | Not q => ~InterpProp varValues q
  | And q r => InterpProp varValues q /\ InterpProp varValues r
  | Or q r => InterpProp varValues q \/ InterpProp varValues r
  | Implies q r => InterpProp varValues q -> InterpProp varValues r
  | Forall n q (* i.e. forall Xn, q *)
    => forall m:Inat PS, InterpProp (SetVarValue n m varValues) q
  | Exists n q
    => exists m:Inat PS, InterpProp (SetVarValue n m varValues) q
  end.

Axiom LPO : forall un : nat -> bool, { exists n:nat, un n = true } + { forall n:nat, un n = false }.

Fixpoint InterpBool (varValues : nat -> nat) (p : PeanoProp) {struct p} : bool :=
  match p with
  | Eq a b => Nat.eqb (InterpTerm PeanoNat varValues a)
                     (InterpTerm PeanoNat varValues b)
  | Not q => negb (InterpBool varValues q)
  | And q r => andb (InterpBool varValues q) (InterpBool varValues r)
  | Or q r => orb (InterpBool varValues q) (InterpBool varValues r)
  | Implies q r => implb (InterpBool varValues q) (InterpBool varValues r)
  | Forall n q (* i.e. forall Xn, q *)
    => if LPO (fun m:nat => negb (InterpBool (SetVarValue n m varValues) q))
      then false else true
  | Exists n q
    => if LPO (fun m:nat => InterpBool (SetVarValue n m varValues) q)
      then true else false
  end.

Lemma InterpBoolPropEquiv : forall (p : PeanoProp) (varValues : nat -> nat),
    (InterpBool varValues p = true <-> InterpProp PeanoNat varValues p).
Proof.
induction p. ...
Qed.



Archive powered by MHonArc 2.6.19+.

Top of Page