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: mukesh tiwari <mukeshtiwari.iiitm AT gmail.com>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] Mapping of types to new one in a project
  • Date: Mon, 24 Jul 2023 18:04:05 +0100
  • Authentication-results: mail3-smtp-sop.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-oa1-f50.google.com
  • Ironport-data: A9a23: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 VUIqat4rI1XhKI//QuMu5KYJf3BgA7S8g==
  • Ironport-hdrordr: A9a23:erSt/aqKkoe/SW9IdUuwP0oaV5oSeYIsimQD101hICG9E/bo7v xG+c5w6faaskd1ZJhNo6HjBEDEewK+yXcX2+gs1NWZLW3bUQKTRekI0WKh+V3d8kbFh4lgPM lbAs5D4R7LYWSST/yW3OB1KbkdKRC8npyVuQ==
  • Ironport-phdr: A9a23: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 50LGOYzvLkdGfYTC0AjF9sHcs8fYw==
  • Ironport-sdr: 64beaf13_76nw2Y8N7RHqEL0ecCp61YOvUWp5EFbxsOzSfXwjv5XGZ1E oOMy57ivWIUw94pFM1X69kJjkuGM1nF9iWatBKQ==

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