Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Proof about permutation

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Proof about permutation


Chronological Thread 
  • From: mukesh tiwari <mukeshtiwari.iiitm AT gmail.com>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] Proof about permutation
  • Date: Fri, 23 Dec 2022 09:32:42 +1100
  • Authentication-results: mail2-smtp-roc.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-lf1-f54.google.com
  • Ironport-data: A9a23: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
  • Ironport-hdrordr: A9a23:tVgZMqh2nqNWjnc1P19pRiFjaXBQXuMji2hC6mlwRA09TyX4rb HWoB1/73XJYVkqKRQdcLy7Scu9qDbnhP1ICOoqXItKPjOW3FdARbsKheDfKn/bexEWndQtsp uIHZIObuEYzmIXsS852mSF+hobr+VvOZrHudvj
  • Ironport-phdr: A9a23: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
  • Ironport-sdr: 63a4db18_Z2kA9g4Q/GHdL9i33KJWj16YCWXG0UIc3TDvpD4yRP32p+M kX13/P/iN0iJCctVPAtBRkp8AxAY3c6CjVwjtEw==



On Fri, 23 Dec 2022 at 01:36, Marko Doko <m.doko AT hw.ac.uk> wrote:
mukesh tiwari wrote:
> how did you figure out ‘ go_app_stated_nicely’? Is there any theory behind it or just experience? (I generally,m avoid let in or match with syntax in proofs, but it seems they are very helpful)

The "nicely" is not about the pattern matching. This is perfectly fine too:

   Theorem go_app_nice_variant_1:
     ∀ (z : A) (xs ys zs : list A),
     (ys, zs) = go z xs → Permutation (ys ++ zs) xs.
   Proof.
     induction xs; simpl; intros.
     * inversion H; trivial.
     * destruct (go z xs) as [ys' zs'].
       destruct (R a z); inversion H; simpl; subst;
         eauto using Permutation_cons, Permutation_sym, Permutation_cons_app.
   Qed.

   Theorem go_app :
       ∀ (xs ys zs : list A) (z : A),
       In z xs ->
       (ys, zs) = go z xs -> Permutation (ys ++ zs) xs.
   Proof.
     intros xs ys zs z IN EQ.
     eapply go_app_nice_variant_1; eauto.
   Qed.


Or this:

   Theorem go_app_nice_variant_2:
     ∀ (z : A) (xs : list A), Permutation ((fst (go z xs)) ++ (snd (go z xs))) xs.
   Proof.
     induction xs; simpl; [trivial | ].
     destruct (go z xs) as [ys' zs'].
     destruct (R a z); simpl;
       eauto using Permutation_cons, Permutation_sym, Permutation_cons_app.
   Qed.

   Theorem go_app :
       ∀ (xs ys zs : list A) (z : A),
       In z xs ->
       (ys, zs) = go z xs -> Permutation (ys ++ zs) xs.
   Proof.
     intros xs ys zs z IN EQ.
     rewrite surjective_pairing in EQ; inversion EQ; subst.
     eapply go_app_nice_variant_2; eauto.
   Qed.


The point is that the assumption (In z xs) is redundant, and I wanted to avoid dragging it along in the induction proof :-)


Ah, now I see my mistake :) (It was a copy paste mistake because the lemma I was trying to prove was  forall (xs ys zs : list A) (z : A),  In z xs -> (ys, zs) = go xs -> List.length zs < List.length xs). Thanks again Marko! 


Best,
Mukesh




Look at the three (equivalent) versions of the theorem I stated:
   * go_app_nice_variant_1 follows your way of stating the theorem.
     This is probably the best formulation for use in proofs, especially
     with proof automation in mind. The drawback is that there are now
     two extra quantified variables and the extra assumption
     ((ys, zs) = go z xs) needs to be stated. All good for Coq, but it
     might be slightly confusing for a human reading the statement.
   * go_app_stated_nicely avoids extra quantified variables and the extra
     equality assumption by using pattern matching to name the components
     of (go z xs).
   * go_app_nice_variant_2 avoids having extra quantified variables by
     using the projection functions to extract the compomnents of (go z xs).

In the end, which of the three approaches above will you take depends on your coding style and how you intend to use the theorem in the future. Oftentimes it turns out having multiple syntactic variants of semantically the same statement is technically very helpful since different statements can fit better in different situations when writing proofs in Coq.


--
Marko


________________________________

Founded in 1821, Heriot-Watt is a leader in ideas and solutions. With campuses and students across the entire globe we span the world, delivering innovation and educational excellence in business, engineering, design and the physical, social and life sciences. This email is generated from the Heriot-Watt University Group, which includes:

  1.  Heriot-Watt University, a Scottish charity registered under number SC000278
  2.  Heriot- Watt Services Limited (Oriam), Scotland's national performance centre for sport. Heriot-Watt Services Limited is a private limited company registered is Scotland with registered number SC271030 and registered office at Research & Enterprise Services Heriot-Watt University, Riccarton, Edinburgh, EH14 4AS.

The contents (including any attachments) are confidential. If you are not the intended recipient of this e-mail, any disclosure, copying, distribution or use of its contents is strictly prohibited, and you should please notify the sender immediately and then delete it (including any attachments) from your system.



Archive powered by MHonArc 2.6.19+.

Top of Page