coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Maximilian Wuttke <s8mawutt AT stud.uni-saarland.de>
- To: Coq Club <coq-club AT inria.fr>
- Subject: [Coq-Club] Make constants/functions opaque for [rewrite]
- Date: Sun, 18 Nov 2018 21:17:08 +0100
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=s8mawutt AT stud.uni-saarland.de; spf=None smtp.mailfrom=s8mawutt AT stud.uni-saarland.de; spf=None smtp.helo=postmaster AT triton.rz.uni-saarland.de
- Autocrypt: addr=s8mawutt AT stud.uni-saarland.de; prefer-encrypt=mutual; keydata= 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
- Ironport-phdr: 9a23:bQrnERU0FKw7Ch0eFHx8BSYe9s/V8LGtZVwlr6E/grcLSJyIuqrYbBaAt8tkgFKBZ4jH8fUM07OQ7/iwHzRYqb+681k6OKRWUBEEjchE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i764jEdAAjwOhRoLerpBIHSk9631+ev8JHPfglEnjWwba9xIRmssQndqtQdjJd/JKo21hbHuGZDdf5MxWNvK1KTnhL86dm18ZV+7SleuO8v+tBZX6nicKs2UbJXDDI9M2Ao/8LrrgXMTRGO5nQHTGoblAdDDhXf4xH7WpfxtTb6tvZ41SKHM8D6Uaw4VDK/5KpwVhTmlDkIOCI48GHPi8x/kqRboA66pxdix4LYeZyZOOZicq/Ye94RWGhPUdtLVyFZHI2yb5YBAekPM+lWoIbyu0ADrRSiCQS2A+3j1jFFi33w0KYn0+ohCwbG3Ak4EtwJqnvVo9T1NKITUeCxzanH1zPDZO5W1jfg9IjIbhMhru+RVr93asrcykwvGBnLj1WNtYzlIyiY1v8Rs2iG8uVsT/+vi2gmqw1ouTig3N0jipPNho0PzFDL6D91z5srKtChTkNwfN2qEINIui2HOYZ7TdkuTmVptSogyLAKo4C3cSgSxJg6yRPSZOaLfoyJ7x75VeucLy10iGx5dL6jgRu57FKuxffmVsau1VZHtipFncfItnAKzxHT9tKHSvph/kem3zaDzRrT6+BeLUApk6rbKoctwqUqmZUJq0TDGjX5mEPrg6OMa0or5PCk6+XhYrr4up+RL5J4hw/xP6g0nsGyAP40PwoUU2SF+emwzLjj8lf4QLVOgP02iK7ZsJXCKMQApaO5BhVa04g+6xajEzery88YnWUaLF1YYh6Hko7pO1DXLPDjF/iwmU6skDNxyPDAI7LtGIjCIWbbnLf7Ybl981JcyBY0zd1H+51UDagBLOvvVU/1qdzXFQQ0Mxe0wubiENVyzJkSWWOJAq+DMaPdq0WE5uw1I7rEWIhAkzHkY9Mh+vSm2XQ+gBoWebSj9ZoRcnGxWPp8dRa3e33p1/IIAWYPvw4/Reqit0CeTT1eLyKpD6c1+SwnFKq9EZrPAJ2rgfma1S6hGpRQaiZKBwbfQj/Ta4yYVqJUO2qpKch7n2lBDOD5Et5z5VSVrAb/joFfAK/R8ywcu4jk0YIvtfbPiB106Dp1St+U2nuJRmd42G8FFWdvgPJP5Hdlw1LG6pBWxuRCHIYJtehVTwt8KJjdivdzAsr2UwTNONuEGg7/H4eWRAopR9d0+OcgJkZwH9L40ULfxSu2BLlTja7NGZo1t7nV1mL1LsBxjXrLhvEs
- Openpgp: preference=signencrypt
Hi Coq Club members,
In my project I have some functions on natural numbers. Two of them are
coincidently equal, although the contexts in which I use them are not
related to each other. I also have shown lemmas about these functions.
(Yes, these lemmas are duplicated for the duplicated functions.)
What can I do, so that [rewrite] _does_ distinguish between these
functions, i.e. [rewrite] sees the names of the two functions as
distinct constants? Below is a minimal example.
The reasons for wanting this are two-fold:
1. It can confuse the user of my library. ("Why is there suddenly a
totally unrelated function after [autorewrite]?" ~> this may break
proofs with [omega])
2. It is more efficient to not unfold the constants.
I already tried out some things that I found while reading the refman,
but mabye I missed something.
In case it matters:
```
$ coqtop --version
The Coq Proof Assistant, version 8.8.2 (November 2018)
compiled on Nov 18 2018 20:32:22 with OCaml 4.07.1
```
Sincerely
Maximilian Wuttke
(* I have two totally unrelated function, that just happen to be
coincidently equal. (They actually occur at different parts of the
project) *)
Definition tam (x : nat) := S x.
Definition tam'(x : nat) := S x.
(* Both functions are compatible w.r.t. some function, e.g. [S] *)
Lemma tam_S (x : nat) : tam (S x) = S (tam x).
Proof. reflexivity. Qed.
Lemma tam'_S (x : nat) : tam' (S x) = S (tam' x).
Proof. reflexivity. Qed.
(* Now I want that [rewrite] sees them as distinct constants. *)
(* But nothing of this solves my problem *)
Arguments tam : simpl never. Arguments tam' : simpl never.
Hint Opaque tam tam'.
Typeclasses Opaque tam tam'.
Opaque tam tam'.
(* I also expect this to not simplify. This works, thanks to the above
[Arguments] vernacular: *)
Eval cbn in tam 42.
(* I DO NOT want to be able to proof this with [rewrite] *)
Goal forall x, tam (S x) = tam' (S x).
Proof.
intros.
(* This should change the goal to [tam (S x) = S (tam' x)] *)
rewrite tam'_S.
(* It reduces to [S (tam' x) = tam' (S x)] instead. I.e. it saw that
[tam=tam'] and rewrote [tam'_S] in [tam (S n)]. This is exactly what I
want to prevent. *)
Abort.
(* At a later part of the project, I want to be able to unfold the
constants though. So making them completly opaque (i.e. with [Qed]) is
no option. *)
Goal forall (x : nat), tam x <= tam (x+x). (* (actually we want to show
that a function using [tam] is in some complexity class) *)
Proof.
Require Import Omega.
Transparent tam.
intros. unfold tam. omega.
Qed.
Attachment:
signature.asc
Description: OpenPGP digital signature
- [Coq-Club] Make constants/functions opaque for [rewrite], Maximilian Wuttke, 11/18/2018
- Re: [Coq-Club] Make constants/functions opaque for [rewrite], Li-yao Xia, 11/18/2018
- Re: [Coq-Club] Make constants/functions opaque for [rewrite], Jason -Zhong Sheng- Hu, 11/18/2018
- Re: [Coq-Club] Make constants/functions opaque for [rewrite], Li-yao Xia, 11/18/2018
Archive powered by MHonArc 2.6.18.