Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Proving the pairing axiom

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Proving the pairing axiom


Chronological Thread 
  • From: mukesh tiwari <mukeshtiwari.iiitm AT gmail.com>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] Proving the pairing axiom
  • Date: Mon, 6 Jan 2025 14:30:39 +0000
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=mukeshtiwari.iiitm AT gmail.com; spf=Pass smtp.mailfrom=mukeshtiwari.iiitm AT gmail.com; spf=None smtp.helo=postmaster AT mail-wm1-f41.google.com
  • Ironport-data: A9a23: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 vlALkXS3Hi4FX0=
  • Ironport-hdrordr: A9a23:uLdBMKPWnKzJT8BcTl+jsMiBIKoaSvp037By7TEJdfUnSL3hqy nOpoVk6faaskd1ZJhNo7690ey7MBXhHP1OkPgs1NWZLW3bUQKTRekIgOeM/9SjIVyYygc378 ddmt1Feb/N5C9B/KXHCWeDcurIi+P3i5xAzd2utUtFfEVPUYkl1SdBYzzwLqUbKTM2dabQP/ Knl7d6jivlfW5SYtWwB3EDUeSGu8fGj5bvYRsMAQ9i8w+TkDOu5rb1Hx+Emg4EVTlC260v/A H+4nPED4uYwo2G9iM=
  • Ironport-phdr: A9a23:F4AUZBBkSqef+7YdScPyUyQUWkoY04WdBeb1wqQuh78GSKm/5ZOqZ BWZua40ygaVBc6FsbptsKn/jePJYS863d65qncMcZhBBVcuqP49uEgeOvODElDxN/XwbiY3T 4xoXV5h+GynYwAOQJ6tL1LdrWev4jEMBx7xKRR6JvjvGo7Vks+7y/2+94fcbghGmTaxe65+I RqqoQnet8Qan5ZpJ7osxBfOvnZHdONayH9yK16Ugxjy+Nq78oR58yRXtfIh9spAXrv/cq8lU 7FWDykoPn4s6sHzuhbNUQWA5n0HUmULiRVIGBTK7Av7XpjqrCT3sPd21TSAMs33SbA0Ximi7 7tuRRT1hioLKyI1/WfKgcF2kalVog+upwZnzoDUfI6aO+dwcK3Tfd0ER2VPXcFfWjdbDY+ga osCFeoBMfpaooT7ulAArQG+BQ6pBO73zz9Im3z20rMh0+QhDArGwA0gHtwUv3TOrdX+KaAfU eWozKnL0zrDdPNW2Sv86InGaB8hu/CMUahxccrQyEkvCwbFg06fqYzgJTyV1+ANv3KH4OpnU OKikmgqoBx+rTaz3MkjkJXJhp4LxVDe8yV02IY7KcG3RkJlZdOqEJ9dujyZOoZ5Rs4vQm9lt Tskx7Ebu5O2cyYExpsnyRPfdvGKbZaE7w7/WOuVPDp1h25odK+5ih2v/0agzej8WdO10FZMt idFk9/MtmoM1xPJ8MSHROF98l+u2TaOywDT6vxELlsumaXHLJ4hx6Y8lp4JvkvYBC/2mV/6j KGMdkk85+io8/roYrPgppOGKYB7lxz+P6IzkcK8GeQ1KhYCU3Sf9Oim17Du/Vf1TKhUgvA1i KXUv43WKdwGqqKlDAJZyJgv5hWlAzu4zNgVmWMLIExKdR6biYXiJk/DIPTlDfekn1Sjji1ry e3HPrzgHJrANmTPnbH8drhn8UFc0hA8zdVH6pJUFL4BJPXzV1f0tNPCDx85NxW4wujiCNlgz 48eV22CDrKDPKPdtl+I4e0vI+2Sa4MPpDn9LP0l6+bvjX8/h1AdYbGk0YULZH28BPhrIEWUb WDxjtsfEmoGpAUzQPHyhF2HSzFTZnKyX6wm5jE8DYKrFYLDRp2ugLOfxye7HoFWZmFIC1+WC 3fodp+IW/YNaCKTPs9hlycJVbekS4A71BGusBX2xKZgLurR4iEYs4ns28Bv5+LPjREy6SB0D 8OF3m2QV210hH8HRycq3KBjpkxw0kuM0a9hg/BBCdNT4+5JXRwhOJ7Hz+16DsjyVRjbcteIT lamWNSmDisrQtI/2d9dK3p6Tt6ll1XI2zegK74Tjb2CQpIuoYzG2H2kItt+xm3GnLUgkFA8Q 4MbMHCli7V/6wnMDpTI1USYlrqvXasZ1S/JsmyEyDzd7wljTAdsXPCdDjgkbUzMoIGhjqujZ 7qnCLB8dxBE1dbHMaxSLNvgkVRBQv7nftXYeWO43WmqVl6T3r3ZSo3sdi0G2TnFTlAemlUW4 HWLLggiBziouWOYDT1vCVfHbEbl8O04o3S+HQcv1w/fV0R6zPKu/wINw/mVSvcdxLUB7SI8q DhvHEq8wNvMCpyBpgt9eY1TZNo85BFM0meK/xdlMMmGKKZvzkUbbxwxv07q0EBvDZ5clMExs H4w5A97KKbdz1YYMj3EhNb/PbrYLmS09xeqA0LP8nfZ1tveuqIG6fBj7k7moBnsDU06tXNuz 9hS1XKYoJTMFgsbF5zrAA4x8FBhqrfWbzNYhcuc3GBwMaSyrj7J2s44TOojxBG6et5DMaSCX AbsGsweDsKqJaQkgV+sJh4DOelT8uYzMabEP7ODxa2mJ+Z8nS2vl2UB4YF8zkek+C91S+qO1 JEAgrmZ0gaBSzbgnQK5qMmk/OIMLToWH2e51W3lHNsLPvw0LdtNUD3+ZZHulbAcz9b3VnVV9 UCuHQYD0c6tIl+JakDlmBZXzQIRqGCmni2xy3p1lSsop+yRxn+roayqeRwZN2pMXGQng03rJ N3+is0ZUVOocwk2nQGko0f7xrRejKt6JmjXB0xPemKlSgMqGrv1rbeEb8NVvdktrCZaS+SgY E+TUL+7ohobzybLEG5XxTR9fDav8Mac/VQymCeWK3B9q2DccMd7yELE5dDScvVW2yIPWChyj TS/6kGUB9Cy5p3Ukp7Ctrv7TGe9TthIdjGty4qctSy97GksABulnvn1lMe1WQQ91Cb60ZFtW 0Cq5F75f4rmzKSmMP1uZEguBV79989SFYR3k492j5YVkXQXnZSa+3MbnHy7a40Kn/KjKiNXF XhXmpbc+22HkAV7I2iMxp7lW3nV2cZna9SgIysX1i8788FWGfKR5b1AkzFypwnwpgbQbP5h2 zYFnKF2uThK3qdQ4lprknzOZ9JaVVNVNiHtiRmSutW3raEMIX2qbaD1z01m29aoELCFpAhYH nf/YJYrWyFqvaAdeBrB1mP+7ob8dZzed9UW41eRjhTNlOhJKY04jPtMhCtmJWfVsngsyup9h htrl8Lf3sDPOyB28aS1DwQNfDjoZM4I+i3skq9En4CX3oGzG71uHzwKWN3jSvfiQ1dw/bz3c g2JFjM7sHKSH7HSSBSe5ElRpHXKC5m3NnuTKSpR3ZB4SRKaPkAanBEMUWBwgMsiDg7zjp+EE g8x9nUL61X/sBcJ1u94K0y1TDLEvAnxIjYsFMrEcVwPv1kEvRuKd5TZtL47HjkErMP96lbWc SrCOVwOVSZQCynmTxjiJuX8u4eGqrDCQLL4d7yUOf2PsbAMCanOn87+lNs+uW7LbJ3HP2E+X aJhnBMfGykoQYKB3GxfLk5f3yPVM5zE+FHloHAx9obnt621EAP3udnWU+sUaIowvUDw2eDZb qaRnHorcGkDkMpdmTmQjuBYhQB36WkmdiHxQ+5Y5GidEeSJwP8RV1lCNGtyLJcatftimFQdf 5eK0JWtkecpxv8tVwUfDAKnwJr4I5dQZTn6bQKiZg7DIr2CIXejL9jfR6S6RPUQiexVs0b1o jOHCwr4OSzFkTD1VhepOOUKjSeBPRUYtpvvOhBqQXPuSt7rcHjZeJd+kCE2zLsoh3jLKX9UM D5ydFlIp6GR6iUQi+t2GmhI5H5oZeeenCPR4+7dI5cQ+fxlZ0Y83/pd+2g/wqBJ4TtsQfV0n G7Nq4crrQ3/1OaIzTVjXVxFrTMKzIOHsEN+OLnIo5lNXXGXmXBFpW6UChkMu55kEoi14/EWm oWJzfijbmsboLe2tYMGCsPZKdyKKi8kOBvtQ3vPCRcdCCWsLSfZjlBcl/eb8juUqII7o97ig slrKPcTWVorG/cdEkkgEsYFJcI9Wy4nnKWbkM8X7GC/6hjQRdlflp/CX/OWR/7oLXzK6NsML wtN2r7+IYkJY8fj3Fd+b1BhgInQM0/ZXNQIvSg4KwFo+QNC939xSmB10EXgIFDIgjdbBbu/m Rg4jRF7aOIm+WL34ls5EVHNoTM5jEg7ndiNadW5fzv4LaP2VoZTWXKcX6kZN5r6R0NqaFT3k xA9cjjDQL1Vgv1rcmU50Gc0VrNAHPddSetPZxpCnJmq
  • Ironport-sdr: 677be91d_dDLZPC439Y7ZeumdMEPVeQeAuGDH55DcV8k4qWxTu7sYPuE I3ZyY2ppJYDpyZnPS42O7Udywtyy6st+k9XYwfA==

In the previous email I mistakenly changed the definition of equality to bi-implication, which was different from Richard’s definition. The code below uses Richard’s definition but with bool.

Best, 
Mukesh 

From Coq Require Import Utf8.
Require Import Coq.Logic.FunctionalExtensionality.



Section Tmp.
  Variable (object : Type).
  Variable (eq_dec : forall (x y : object), {x = y} + {x <> y}).

  Inductive N : Type :=
  | Caract : (object -> bool) -> N.

  Definition caract (s : N) (a : object) : bool :=
    let (f) := s in f a.

  Definition In (s : N) (a : object) : bool :=
    caract s a.

  Definition incl (s1 s2 : N) :=
    forall a : object, In s1 a = true -> In s2 a = true.

  Definition set_eq (s1 s2 : N) :=
    forall a : object, In s1 a = In s2 a.

  Definition L (a : object) : N :=
    Caract
      (fun a' : object =>
         match eq_dec a a' with
         | left _ => true
         | right _ => false
         end).

  Lemma pairN : forall (x : object) (A : N),  L x = A <-> set_eq (L x) A.
  Proof using Type.
    intros x A.
    split.
    -
      intro Ha.
      unfold set_eq.
      intro y.
      subst; exact eq_refl.
    -
      intro Ha.
      unfold set_eq, In in Ha.
      destruct A; cbn in Ha.
      unfold L.
      f_equal.
      eapply functional_extensionality; intro y.
      destruct (eq_dec x y) as [Hb | Hb].
      +
        subst.
        rewrite <-Ha.
        destruct (eq_dec y y); subst;
          [reflexivity | congruence].
      +
        specialize (Ha y).
        destruct (eq_dec x y); subst;
          [congruence | assumption].
  Qed.
  
End Tmp.

On 6 Jan 2025, at 13:53, mukesh tiwari <mukeshtiwari.iiitm AT gmail.com> wrote:

If *Prop* is replaced with *bool*, pairN can be proved (constructively) in Coq, assuming functional extentionality. 

"It seems to me the main issue is the mixing of = (as in `caract s a = True`, `In s1 a = In s2 a`) and Props; normally I would use <-> with Props. Carrying this through, I suppose the best way to make `set_eq A B` a rewritable equality would be by declaring it with the generalized mechanism (https://coq.inria.fr/doc/V8.20.0/refman/addendum/generalized-rewriting.html#)?” 

If I have to formalise something like this I will also use bi-implication for equality. However, it is also painful to make a lot of operations an instance of type classes for rewriting, e.g., see chapter 3 of [2]. I wonder if it is the reason for introducing the *prop_ext* axiom [1]?  The explanation does say, "Propositional extensional is convenient for performing rewriting. It is needed for using Hilbert's epsilon operator in practice and, in particular, to build quotient structures in the general case.” but it would be great if someone who has used *prop_ext* in their formlisation could shed more insights. 
 
Axiom prop_ext : forall (P Q : Prop),
  (P <-> Q) -> P = Q.

Regarding the phrase "I am committing a sin :-)" it was intended as a lighthearted remark for myself because it was the first time I had used a classical axiom to prove a theorem. Unfortunately, I forgot to remove it before posting.


Best, 
Mukesh 

[1] https://github.com/coq/coq/wiki/CoqAndAxioms
[2] https://www.labri.fr/perso/casteran/CoqArt/TypeClassesTut/typeclassestut.pdf


From Coq Require Import Utf8.
Require Import Coq.Logic.FunctionalExtensionality.



Section Tmp.
  Variable (object : Type).
  Variable (eq_dec : forall (x y : object), {x = y} + {x <> y}).

  Inductive N : Type :=
  | Caract : (object -> bool) -> N.

  Definition caract (s : N) (a : object) : bool :=
    let (f) := s in f a.

  Definition In (s : N) (a : object) : bool :=
    caract s a.

  Definition incl (s1 s2 : N) :=
    forall a : object, In s1 a = true -> In s2 a = true.

  Definition set_eq (s1 s2 : N) :=
    forall a : object, In s1 a = true <-> In s2 a = true.

  Definition L (a : object) : N :=
    Caract
      (fun a' : object =>
         match eq_dec a a' with
         | left _ => true
         | right _ => false
         end).

  Lemma pairN : forall (x : object) (A : N),  L x = A <-> set_eq (L x) A.
  Proof using Type.
    intros x A.
    split.
    -
      intro Ha.
      unfold set_eq.
      intro y; split.
      +
        intro Hb.
        rewrite <-Ha.
        exact Hb.
      +
        intro Hb.
        rewrite Ha.
        exact Hb.
    -
      intro Ha.
      unfold set_eq, In in Ha.
      destruct A; cbn in Ha.
      unfold L.
      f_equal.
      eapply functional_extensionality; intro y.
      destruct (eq_dec x y) as [Hb | Hb].
      +
        subst.
        eapply eq_sym.
        eapply Ha.
        destruct (eq_dec y y) eqn:Hc;
          [reflexivity | congruence].
      +
        destruct (b y) eqn:Hc.
        ++
          (* contradiction *)
          specialize (Ha y).
          destruct Ha as (Hal & Har).
          specialize (Har Hc).
          destruct (eq_dec x y); subst;
            try congruence.
        ++
          exact eq_refl.
  Qed.

End Tmp.



On 29 Dec 2024, at 19:47, D. Ben Knoble <ben.knoble AT gmail.com> wrote:

It seems to me the main issue is the mixing of = (as in `caract s a =
True`, `In s1 a = In s2 a`) and Props; normally I would use <-> with
Props.

Carrying this through, I suppose the best way to make `set_eq A B` a
rewritable equality would be by declaring it with the generalized
mechanism (https://coq.inria.fr/doc/V8.20.0/refman/addendum/generalized-rewriting.html#)?

But I'm probably missing some context that makes the original "shape"
more interesting.

RE: "cardinal sin," see
https://softwarefoundations.cis.upenn.edu/lf-current/Logic.html#lab223
for a short statement that "However, the following theorem implies
that it is always safe to assume a decidability axiom (i.e., an
instance of excluded middle) for any particular Prop P" (where the
"following theorem" is
https://softwarefoundations.cis.upenn.edu/lf-current/Logic.html#excluded_middle_irrefutable).

As a last thought, a different alternative might be to use bools
rather than Props if you want to write `= true`. There might be
something about "proof irrelevance" here, too.

On Sat, Dec 28, 2024 at 10:29 AM richard <richard.dapoigny AT univ-smb.fr> wrote:

Dear Coq user,

I am working on sets with characteristic functions and a datatype called object for wich equality is decidable.

Singletons called ι are also defined in this context. An excerpt of the code is given below.

Definition object: Type := t.

Definition eqobject_dec := eq_dec.

Inductive N : Type :=
   | Caract  : (object -> Prop) -> N.

Definition caract (s :N)(a:object) : Prop := let (f) := s in f a.
Definition In (s :N)(a:object) : Prop := caract s a = True.
Definition incl (s1 s2 :N) := forall a:object, In s1 a -> In s2 a.
Definition set_eq (s1 s2 :N) := forall a:object, In s1 a = In s2 a.

Definition ι (a:object) :=
 Caract
   (fun a':object =>
      match eqobject_dec a a' with
      | left h => True
      | right h => False
      end).

My question is the following : is there a possibility to prove the pairing axiom with these assumptions, i.e.  to prove that

Lemma pairN : forall (x:object)(A:N), set_eq (ι x) A <-> ι x = A.

In addition we assume classical logic.

Thanks in advance,

Richard



--
D. Ben Knoble





Archive powered by MHonArc 2.6.19+.

Top of Page