Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Mapping of types to new one in a project

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Mapping of types to new one in a project


Chronological Thread 
  • From: Suneel Sarswat <suneel.sarswat AT gmail.com>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] Mapping of types to new one in a project
  • Date: Tue, 25 Jul 2023 11:28:47 +0530
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=suneel.sarswat AT gmail.com; spf=Pass smtp.mailfrom=suneel.sarswat AT gmail.com; spf=None smtp.helo=postmaster AT mail-ed1-f53.google.com
  • Ironport-data: A9a23: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 QAIeIyPfK13pYMd3yqtl7651Sz1ZA/S8gg=
  • Ironport-hdrordr: A9a23:djiVrKDP1itTBJTlHemV55DYdb4zR+YMi2TDtnoBMCC9F/bzqy nApoV/6faZskdyZJhko6HiBEDiexLhHPxOkO0s1N6ZNWGMhILrFuFfBODZslrd8kPFh4hgPG RbH5SWyuecMbG3t6nHCcCDfeod/A==
  • Ironport-phdr: A9a23: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
  • Ironport-sdr: 64bf64ae_+39aCK8VgmJ6dHxeJUqo1LVoZE2WFlTdes2b28Q1Y30vqgY GToOMehUt/PxcmD/uenT1eL3h6uu6u5VVRTh9kQ==

Dear Mukesh,
Thanks again for this suggestion. I would try to avoid this axiom presently.
Regards,
Suneel

On Mon, Jul 24, 2023 at 11:57 PM mukesh tiwari <mukeshtiwari.iiitm AT gmail.com> wrote:
No worries. Also, if you don't mind functional extensionality [1], then you can prove: Theorem same_f_old_new : f_new  = fun r => List.map f (f_old r)  and use it to replace f_new (it will make rewrite a bit easier).

Best,
Mukesh
 



On Mon, Jul 24, 2023 at 6:52 PM Suneel Sarswat <suneel.sarswat AT gmail.com> wrote:
Dear Mukesh,
Thanks a lot for this answer. This is natural and I am feeling bad about my laziness. 
Also thanks for the last two theorems, this will be anyway needed.  
Have a great day.
Regards,
Suneel

On Mon, Jul 24, 2023 at 10:34 PM mukesh tiwari <mukeshtiwari.iiitm AT gmail.com> wrote:
Hi Suneel,

I am not sure if it's exactly going to help in your case but you can prove a lemma like this:

 Theorem same_f_old_new : forall (r : list r_old), f_new r = List.map f (f_old r).
 

And use it to replace (f_new r) with (List.map f (f_old r), and hopefully, after this you can use the theorems related to f_old.  (I must confess that I don't understand coercions (:>) very well so it is quite possible that there might be an easier solution, or this one may not work).

Best,
Mukesh

Require Import List.

Section Rec.

  Record r_old : Type :=
      mk_old {
        a :> nat;
        b : nat
      }.

  Record r_new : Type := 
    mk_new {
    c : nat;
    d : nat 
  }.

  Definition f (u : r_old) : r_new :=
    match u as _ return r_new with
    | mk_old a b => mk_new a b 
    end.

  Definition g (u : r_new) : r_old :=
  match u as _ return r_old with
  | mk_new a b => mk_old a b
  end.

(* This might come handy *) Theorem first : forall (r : r_old), g (f r) = r. Proof. intro r. refine match r with | mk_old a b => eq_refl end. Qed. Theorem second : forall (r : r_new), f (g r) = r. Proof. intro r. refine match r with | mk_new a b => eq_refl end. Qed.
(* end of handy theorems *) (* Your definition of f_old *) Definition f_old (B: list r_old) : (list r_old). Admitted. (* Your definition of f_new *) Definition f_new (B: list r_old): (list r_new). Admitted. Theorem same_fold_new_old : forall (r : list r_old), f_new r = List.map f (f_old r). Proof. Admitted.

  (* I don't think you need this but we never know :) *)
  Theorem same_fold_old_new : forall (r : list r_old), f_old r = List.map g (f_new r).
  Proof.
  Admitted.

End Rec.





On Mon, Jul 24, 2023 at 12:54 PM Suneel Sarswat <suneel.sarswat AT gmail.com> wrote:
Dear friends,

I have an old project (large one) in which I have a few functions, their specifications, and their correctness theorem along with their correctness proofs. Now I have redefined some of the functions and even input-output types. Although my new input types have changed, but the actual values and computations are the same. It's the types at each input instance that have changed (not their actual values and computations) and old functions are replaced with more efficient versions now (See a minimum example below.).

Now I want to restate some of the theorems in terms of new input-output types and functions. The goal is to do this with a minimum amount of new proofs or minimum efforts by using old functions and their correctness proofs.  

Basically, I want to show a bijection between the outputs of new and old programs and then want to use it to show the correctness of the theorems without redoing the old work again (which means using the old work as a black box). Please suggest some ideas.

Have a great day.

- Suneel

--------------------------------

(* Old input type *)

Record r_old:Type:= Mk_r{
                        a:> nat;
                        b: nat;
                        }.


(* Current input type is *)

Record r_new:Type:= Mk_r{
                        c: nat;
                        d: nat;
                        }.

(* I have a = c and b = d. *)

(* Old function *)

Definition f_old (B: list r_old): (list r_old):= f_old ( Sort_old a_dec B).

(* New function *)

Definition f_new (B: list r_old): (list r_new):= f_new ( Sort_new c_dec B).

(* Note: 
    Sort_new is more efficient than Sort_old. 
    The elements of B are all unique.
    f_new and f_old are the "same" programs in the sense that they do exactly the same calculations. Also is there any way to avoid writing f_new?*)




Archive powered by MHonArc 2.6.19+.

Top of Page