aboutsummaryrefslogtreecommitdiff
path: root/src/Util/IdfunWithAlt.v
blob: ed7a82acec6dc4aa2c6ff16ef0ead3683da3d356 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
(** Some constants that return their first argument, and hold an equal second argument. *)
Require Import Crypto.Util.Tuple.
Definition id_with_alt {A} (value : A) (value_for_alt : A) : A
:= value.
Definition id_with_alt_proof {A} (value : A) (value_for_alt : A)
           {pf : value = value_for_alt}
  : A
  := id_with_alt value value_for_alt.
Fixpoint id_tuple'_with_alt {A n}
         {struct n}
  : forall (value value_for_alt : tuple' A n),
    tuple' A n
  := match n return forall value value_for_alt : tuple' A n, tuple' A n with
     | O => id_with_alt
     | S n' => fun (value value_for_alt : tuple' A n' * A)
               => (@id_tuple'_with_alt A n' (fst value) (fst value_for_alt),
                   @id_with_alt A (snd value) (snd value_for_alt))
     end.
Fixpoint id_tuple'_with_alt_proof {A n}
         {struct n}
  : forall (value value_for_alt : tuple' A n) {pf : value = value_for_alt},
    tuple' A n
  := match n return forall value value_for_alt : tuple' A n, _ -> tuple' A n with
     | O => id_with_alt_proof
     | S n' => fun (value value_for_alt : tuple' A n' * A) (pf : value = value_for_alt)
               => (@id_tuple'_with_alt_proof A n' (fst value) (fst value_for_alt)
                                             (f_equal (@fst _ _) pf),
                   @id_with_alt_proof A (snd value) (snd value_for_alt)
                                      (f_equal (@snd _ _) pf))
     end.
Definition id_tuple_with_alt {A n}
  : forall (value value_for_alt : tuple A n), tuple A n
  := match n with
     | O => id_with_alt
     | S n' => id_tuple'_with_alt
     end.
Fixpoint id_tuple_with_alt_proof {A n}
         {struct n}
  : forall (value value_for_alt : tuple A n) {pf : value = value_for_alt},
    tuple A n
  := match n with
     | O => id_with_alt_proof
     | S n' => id_tuple'_with_alt_proof
     end.