Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] using Equations to first do wf induction on some index and then structural induction?

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] using Equations to first do wf induction on some index and then structural induction?


Chronological Thread 
  • From: mukesh tiwari <mukeshtiwari.iiitm AT gmail.com>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] using Equations to first do wf induction on some index and then structural induction?
  • Date: Sat, 20 Apr 2024 17:27:03 +0100
  • 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-yw1-f179.google.com
  • Ironport-data: A9a23:h+DqqqtHUwz+HzwyVxDqDevZpefnVPZaMUV32f8akzHdYApBsoF/q tZmKWqEbPiMYmDxLY10b4vl8EwE6sLRx4JnTwRlq3wwF3sXgMeUXt7xwmXYb3rDdJWbJK5Ex 5xDMYeYdJhcolv0/ErF3m3J9CEkvU2wbuOgTrSCYEidfCc8IA85kxVvhuUltYBhhNm9Emult Mj7yyHlEAbNNwVcbCRMtMpvlDs15K6u4G9C5gRkDRx2lAa2e0c9XMp3yZ6ZdCOQrrl8RoaSW +vFxbelyWLVlz9F5gSNz94X2mVTKlLjFVDmZkh+A8BOsTAezsAG6ZvXAdJHAathZ5plqPgqo DlFncTYpQ7EpcQgksxFO/VTO3kW0aGrZNYriJVw2CCe5xSuTpfi/xlhJEo1Z7UcyNRrPVFl8 MwFFSwiMTyRpsvjldpXSsE07igiBMziPYdaq245iD+AUqdgTpfETKHHo9Rf2V/chOgURaeYN 5dfMGA/Kk2fMnWjOX9PYH46tOK1hXTkcyFZt1uPpOw24mnPySR+1bHsNJzefdniqcB9xxjC+ z6XrzSjav0cHIbE5j+V2Si2v+rwkDHdW4BIBrqK8Mc/1TV/wURIVUROCgrlyRWjsWa1XMsaI EgJ8AI1vK0q/QqqSMP8Vlu2uha5UgU0XtNRF6gr91jIxPOLskCWAW8LSjMHY9sj3CMredA0/ lSKxevtNw5zjI2+TEKAy6u78h+gGAFAeAfuehQ4ZQcC5tDipqQ6gRTOUstvHcaJYjvdSW6YL 9ei/HdWulkDsfPnwZlX6rwuvt5Bjp3ATwpw9xqOG2z8sVI/a4miaIilr1Pc6J6szbp1rHHQ5 RDoeODHs4ji6K1hcgTTGo3h+5n3vZ643MX02wIHInXY323FF4SfVY5R+ipiA0xiL9wJfzTkC GeK5loKucIKYCXxN/IqC25UNyjM5fiwfTgCfqCEBueinrAoKmdrAQk3ORDLjjuzyCDAb4lka MrDKq5A8kr2+Yw8kWPuGLZDuVPa7i85wmzXSNj6yR/huYdyl1bEIYrpxGCmN7hjhIvd+Fu92 48Ga6OilU8DOMWgOXK/2dBIcjg3wY0TXsyeRzp/LbPbfmKL2QgJV5fs/F/WU9U4wf8LzLeUr i7Vt40x4AOXuEAr4D6iMhhLAI4Dl74mxZ7iFXV0Zwz66Gtpeou18qYUer0+eLRtpqQpzud5Q 7NBM4+MC+hGAGaPsTkMT4jPnKo7fjSShCWKI3WEZho7dMVeXADnwILvUTbu0ygsNRCJk/UCj Yeu7D6GfqpbdT9eVJ7XTNmN02KOuWMsnbMufknQffhWVkbe0KlrDC3TiPUIDdkGAkjBzGHC1 iK9IxQRlc/SqaAbrfjLgqGlqd+yMu1cR0B1IUjS3YyUBwL7oFWx4NZne/maWBzgT0XIwbWGS cQJ6uDjIdsFsU1vsYEhI410zKk72cTjl4VawitgAn/PSVahUZFkHVWrwuhNsb9r1JZCmA7rR H+KxMZWCY+JNOzhDlQVAggvNcaH9PMMnwjt/eYHG1r76AB37Yi4fx1rZTfUsxNkLZxxLI8B6 sUispRP6wWA1zwbAuzfhSVQr2mxPngMVps8ja4jAajptxEKz29TapmNGw7055CyM+93CHcIG QPNpqT+hOV7/HHgIl4TDnnG2NRPiase4C5qyEAwHHXXu97nqMJu4jhv32UWdDlF9jRGzON5B UZzPWJXO6il3mlllepDbU+WCiBDAxyTxWLpwXBQyWHLYlWaVEGWC1ZgP+zXrUYT3F9BT2IK4 JCZ12fXfjL4d+7h3iYJeBBEqt6yafdT5wH9iMScMMDdJKYDYB3hmb6IWWoEjzDFEPEBrhTLi scy9dkhdJChEzAbppMKLrWz1JMSeUiiH3NDS/Qwx5E5NzjQVx/q0AffNn3rXN1GIsHL1kqKC 8ZOAMZrfDbm3QasqgErP4I9E4VWrtUIuuVbIqjKIFQYuYSxtjBq6ZLc1hbvjV8RHulBr5wPF ZPzRRmjTEqrmnpmq03cppJlO025Q+U+Si/S4eSXyNgNRrU/6LxCUEdqybalnWSnAC0+9TKug Q7zTav3zetj9IdSo7XRAphzXwWZFNeie9mLoSaSsstPZ+zhKc3hlR0YgXi5MhV0PYk+YcVWl 7OMgoSu3Er6o6sHCTHFupieFptm4de5c/pXP/nWclhbv3qmc+397yQT/1uXLcRyr+pcwc28V i2EZ9CVZ/dMf/tgnFhudDl5PzMGLqbGfoPMhHiakayXKx4/1QfnEouWxUXxZzsGSh5SaozMN ADknt2PuPVKp5toLz0ZDahEB5RYHgfSaZE+fYesiQjCX3iauXLciL7MjhF61CrqDEODG8PE4 Z7oYBjyWRCxmaPQxuFirI1AkUwLPUl5nNUPUBoRy/xuhxC+KVw2H+AXHJEFK5NTywjZ9pXzY hPTZ2oDVwT5exl5civH3deyZTfHW9QyOer4KAJwrgnQI22zCZibCbRsyjZ47j0kMnH/xeWgM pcF9me2IhG1xYpzSP0O4uCgx91q3e7e2mlC7HWVfxYe2PrCKe5iOL1d8AtxuejvFsjMkADaO jFwSzkbEQe0Tkn+FcsmcHlQcP3cUPUD0B1wBRpjAv6G02lY8AGE4PL6MuD3lLYEaazm4ZYQE GjvSTLlD3++gxQuVGhAhz7tqaBxAPOPWMO9KccPgOHUc76YsgwaAi/JocbDoAzONuKS/5MxW wRAO0QDOXk=
  • Ironport-hdrordr: A9a23:Pw2wcqEmnaeTVBlrpLqE0ceALOsnbusQ8zAXPiFKOGVom6mj/f xG885rsCMc5AxhOk3I3OrwW5VoIkm8yXcW2/h0AV7KZmCP01dAbrsD0WKI+UyGJ8SRzJ866U 6iScRD4R/LYGSSQfyU3OBwKbgd/OU=
  • Ironport-phdr: A9a23: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
  • Ironport-sdr: 6623ece4_3o2UiD1I6rIpnpCV703qAL87wbI3bzWCDOF1CjmTPSot6Am wdpAq0/EtDHq3YzTZe6jZbCG2LLxR4CSDc4uUiQ==

Hi Jason,

I don't know if it is going to be any useful to you because it does not involve Equations but vanilla Coq [1, 3].  If you can find a function *f* that takes a pair of type A * B and returns a nat. You can use it for well-founded induction, and you either decrease on the first argument or  the first argument stays the same and you decrease on the second argument (structural recursion); in either case, the nat coming out of *f* decreases. You can also see [2] for more examples.

Best,
Mukesh

From Coq Require Import 
Relation_Operators Utf8 Psatz Wf_nat.


Section Jason. 

  Context {A B : Type}
  (f : A * B -> nat).

  Theorem fn_acc : forall (n : nat) (au : A) (bu : B),
    f (au, bu) < n -> 
    Acc (fun '(xa, ya) '(xb, yb) => f (xa, ya) < f (xb, yb)) (au, bu).
  Proof.
    induction n as [| n IHn].
    +
      intros * Ha; nia.
    +
      intros * Ha.
      eapply Acc_intro;
      intros (ax, bx) Hb.
      eapply IHn.
      eapply PeanoNat.Nat.lt_le_trans;
      [exact Hb | nia].
  Qed.

  Theorem well_founded_fn : 
    well_founded (fun '(xa, ya) '(xb, yb) => f (xa, ya) < f (xb, yb)).
  Proof.
    intros (au, bu).
    apply (fn_acc (S (f (au, bu)))).
    nia.
  Defined.

End Jason.


(* This one simply falls back on well-foundedness of leA and leB *) 
Section Jason.
  Variable A : Type.
  Variable B : Type.
  Variable leA : A -> A -> Prop.
  Variable leB : B -> B -> Prop.
  Variable fA : A -> nat. 
  Variable fB : B -> nat.
  Variable (hA : forall x y : A, (fA x) <= (fA y) -> leA x y).
 
  
  Lemma Acc_nat_wf : 
    forall (xu : A), Acc leA xu -> forall (yu : B), Acc leB yu -> 
      Acc (fun '(xa, ya) '(xb, yb) => 
      Nat.add (fA xa) (fB ya) < Nat.add (fA xb) (fB yb)) (xu, yu).
  Proof.
    refine(fix fn xu (accf : Acc leA xu) {struct accf} := 
      match accf with 
      | Acc_intro _ ha => _
      end).
    intros yu hb. 
    eapply fn;
    [eapply ha, hA | exact hb]; 
    nia.
  Defined.

  Lemma Wellfounded_custom_rel : 
    well_founded leA -> well_founded leB ->
    well_founded (fun '(xa, ya) '(xb, yb) => 
      Nat.add (fA xa) (fB ya) < Nat.add (fA xb) (fB yb)).
  Proof.
    unfold well_founded.
    intros ha hb (xu, yu).
    eapply Acc_nat_wf;
    [eapply ha | apply hb].
  Defined.

End Jason.

[1] https://gist.github.com/mukeshtiwari/382ba15f53bb979108c9436d9c402c13
[2] https://github.com/DmxLarchey/Accessibility/blob/main/acc.v
[3] https://github.com/coq/coq/blob/master/theories/Arith/Wf_nat.v


On Fri, Apr 19, 2024 at 8:15 PM Jason Hu <fdhzs2010 AT hotmail.com> wrote:
Hi,

Is there a way to use Equations to achieve something in one goal from the title? It is often needed when we can handle most cases using normal structural induction (keeping the same index), but then some special cases only decrease on some other index. Surely we can define a lexicographical order but I am hoping it can be voided.




Archive powered by MHonArc 2.6.19+.

Top of Page