Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Question about permutations, sorting and reification

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Question about permutations, sorting and reification


Chronological Thread 
  • From: "D. Ben Knoble" <ben.knoble AT gmail.com>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] Question about permutations, sorting and reification
  • Date: Fri, 1 Apr 2022 16:36:24 -0400
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=ben.knoble AT gmail.com; spf=Pass smtp.mailfrom=ben.knoble AT gmail.com; spf=None smtp.helo=postmaster AT mail-lf1-f46.google.com
  • Ironport-data: A9a23:6agTNK4x9Arn12S/jcvGoAxRtO3BchMFZxGqfqrLsTDasY5as4F+v mFMWTvUPKmNazajfY0nOo6/oEJUucDRyYA2SQto/380Zn8b8sCt6faxfh6hZXvKRiHgZBs6t JtGMoGowOQcFCK0SsKFa+C5xZVE/fjUAOK6UYYoAwgpLeNeYH5JZSlLxqho2uaEvfDjW1nX4 Y+q+pWEULOY82cc3lw8u/rrRCxH56yaVAMw5jTSstgW1LN2vyB94KM3fcldHVOgKmVnNrLSq 9L48V2M1jixEyHBpT+Suu2TnkUiGtY+NOUV45Zcc/DKbhNq/kTe3kunXRYRQR8/ttmHozx+4 NFouZG3SSoVBJWSs9gRWT4HTy53MaITrdcrIVDn2SCS50jPcn+px/s3SU9qY8sX/eF4BWwI/ vsdQNwPRkrb1qTmnfTiFLYq2ppLwMrDZOvzvllqwDefDvAhS5TOa6rP7N5cmjw3g6iiGN6EN pRCMGI2MXwsZTVwO1EzVqAQktuli3WlTGZWs3TI9PUetj27IAtZieCxarI5YOeiTsJM202cu 2ju5HX8GhhcNdqFyDPD/GjEuwPUtSbyWYZXELPhs/A23hucwWscDBBQXly+yRWktqKgc9Z6J 0ET+gcSl5Bs33CnRP6iAxKxrHHR63bwROFsO+E97QiMzI/d7ACYGnUIQ1Z9hDoO5J9eqdsCh g/hoj/5OdB8mObPFCvGr994uRv3aHVEdTBYDcMRZVJdu4GLnW0lsv7Yoj+P+oaeh9vpHjeYL 9ui83Vn3+57YSLmK8yGEb3vhjutot3NQFdw6FmJGG2i6Qx9aciuYInABbnnARRofNbxorqp5 iNsdy2iAAYmU83leMulHrllIV1Rz6zZWAAweHY2d3Xbyxyj+mS4Yadb6yxkKUFiP64sIGG1M BCO4F8JvMQObRNGiJObharhW6zGKoCwRbzYugz8M7Kin7AtLF/WpXkwDaJu9zCzyRB2+U3AB XtrWZ/0USxy5VVPwz2xSOMQuYLHNQhvrV4/savTlkz9uZLHPCD9Ye5caDOmN7llhIvZ/li92 4sAb6OilkQHOMWjM3K/2dNCfTgicyJnbbio8Jc/XrDYcmJb9JQJUaC5LUUJINw7wcy4V47go hmAZ6Ov4AGk2i2fcFXTNSgLhXGGdc8XkE/X9BcEZT6As0XPq672hEvGX5doL7Qh6sJ5yvt4E 6sMd8maU6ZATz3G/3IWapyk9N5ucxGihASvOSu5YWhnL8QwGVCRotK0LBHy8CQuDzassZRsr rCl0DTdS8VRSglnCvHQd//ynUi6umIQmb4pUkaReotTdUzg/ZJEMSv0ivNrccgAJQ+SlDSf3 geSRxwfoLCV8YMy9dDIg4GCrpuoQ7MuRBoEQzGD4O/vZyfA/2elzYtRa8qyfGjQBDHu5aGvR eRJ1PWjYvAKmVB9tYAjQbtmyKQJ4cS2++1XwwFiK3X8b1qxD4RmLHTbj9JEsbdAx+MAtAa7B hCP991dNenbMc/pCgRKdg8sb+DG0f9N3zeOs7I6J0L14CIx972CCB0AMx6JgS1bDb10LIJ1n rt76ZBOs1Sy2kgwL9KLriFI7GDQfHYOZKMq68MBC4jxhwt3l1xPPc7GBint7M3dYtlAKBNxc Dqdha6Hg7oFg0SeLTw8En/C2ecbjpML4UgYwFgHLlWPu9zEmv5ng0ELoGpvFlxYnkddzuZ+G ml3LEkpd6+AyDFl2ZpYVGe2FgAdWRCU9yQdEbfSeLE1kqVpaoDMEIH5EeOE/URc92wFOzYHo veXz2HqVTusd8b0tsf3tYiJtNS7JeGdNCWb8CxkIyhBN5Y/aDvhxKSpYALkbjP5VNgpihSvS fZCpY5NhG6SCcLUi6I+Aoiek78XTXho4YCEre5JpMs0II0XRN1+NfVi5ax8lgOh6sEmKXOFN vE=
  • Ironport-hdrordr: A9a23:ULUyWq6Ga5ya2PL1lwPXwM3XdLJyesId70hD6qkRc20xTiX2ra CTdZgguSMcqQx6ZJhCo6HjBEGAKUm2yXcd2+B4AV7IZmfbURyTTb2Kg7GM/xTQXwHfstRw8o pNSOxXMeSYNykYsS+A2mSFL+o=
  • Ironport-phdr: A9a23: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
  • Ironport-sdr: YJreWXz+ubp+u5eqyoIFzo8W/QkKjj4DyLz6nQ2W/ZTuU2jeTMbOaXXT1437Ro47u1gLLcYp5e 5vXSq5rrTArSe+EBa64YYWydiU4nwfUbUIn+1LyUh8j9K6ZFxPovfuoOD3Q1LQKQuwWtpQ/9uA 9+vwIxwc6olsXMKvP+8UGQBhufTmICqXoles7L5mws/wuM1o04mkAiRBiFVAuhkqrXyje6ZZGB l1R2BeNmLg3N+/6gz5p5y9JXAirFzS9uD19O+w9F9KxEAFIRtNd9wgyZ5IWGP99GIGmmSksRr0 gPYDnOgyXhDYw2XyrUHl0mjG

> This is where things start going wrong. There's a merge-sort provided in the
> standard theories, but it gets its type parameter as a module parameter. To
> my
> understanding, there's no way to use it polymorphically to sort list (nat *
> A)
> or anything similar. Is that right? Is there a mechanism I haven't thought
> of?

Did you see the example in
https://coq.inria.fr/distrib/current/stdlib/Coq.Sorting.Mergesort.html
?

```
Module NatOrder <: TotalLeBool.
Definition t := nat.
Fixpoint leb x y :=
match x, y with
| 0, _ => true
| _, 0 => false
| S x', S y' => leb x' y'
end.
Infix "<=?" := leb (at level 70, no associativity).
Theorem leb_total : forall a1 a2, a1 <=? a2 \/ a2 <=? a1.
End NatOrder.

Module Import NatSort := Sort NatOrder.

Example SimpleMergeExample := Eval compute in sort [5;3;6;1;8;6;0].
```

I'm sure it would be possible to do something like this (I did just now):

```
Require Import Equalities Orders Mergesort List.
Import ListNotations.

Theorem leb_total x y: Nat.leb x y = true \/ Nat.leb y x = true.
Proof.
generalize dependent y.
induction x; intros y; try easy; destruct y; simpl; auto.
Qed.

Module NatAOrder (A: Typ) <: TotalLeBool.
Definition t: Type := nat * A.t.
Definition leb (x y: t) := Nat.leb (fst x) (fst y).
Infix "<=?" := leb (at level 70, no associativity).
Theorem leb_total x y: x <=? y = true \/ y <=? x = true.
Proof.
destruct x; destruct y; simpl; apply leb_total.
Qed.
End NatAOrder.

Module NatNatOrder := NatAOrder Nat.
Module NatNatSort := Sort NatNatOrder.

Eval compute in NatNatSort.sort [(2,10); (5,3); (1,7)].
```

We have to use a functor `NatAOrder`, and to instantiate it you need a
module `A` that defines a type `t`.

(Obviously it would be much simpler if `MergeSort` took its types more
like a section `Variable`; see _e.g._ Lists.List. I think the
`leb_order` could then be a section `Axiom` or similar.)



Archive powered by MHonArc 2.6.19+.

Top of Page