aboutsummaryrefslogtreecommitdiff
path: root/src/SpecificGen/GF2213_32.v
diff options
context:
space:
mode:
Diffstat (limited to 'src/SpecificGen/GF2213_32.v')
-rw-r--r--src/SpecificGen/GF2213_32.v234
1 files changed, 117 insertions, 117 deletions
diff --git a/src/SpecificGen/GF2213_32.v b/src/SpecificGen/GF2213_32.v
index fe45e3423..4108ba2b0 100644
--- a/src/SpecificGen/GF2213_32.v
+++ b/src/SpecificGen/GF2213_32.v
@@ -25,15 +25,15 @@ Lemma prime_modulus : prime modulus. Admitted.
Definition freeze_input_bound := 32%Z.
Definition int_width := 32%Z.
-Instance params : PseudoMersenneBaseParams modulus.
+Instance params2213_32 : PseudoMersenneBaseParams modulus.
construct_params prime_modulus 8%nat 221.
Defined.
-Definition length_fe := Eval compute in length limb_widths.
-Definition fe := Eval compute in (tuple Z length_fe).
+Definition length_fe2213_32 := Eval compute in length limb_widths.
+Definition fe2213_32 := Eval compute in (tuple Z length_fe2213_32).
-Definition mul2modulus : fe :=
- Eval compute in (from_list_default 0%Z (length limb_widths) (construct_mul2modulus params)).
+Definition mul2modulus : fe2213_32 :=
+ Eval compute in (from_list_default 0%Z (length limb_widths) (construct_mul2modulus params2213_32)).
Instance subCoeff : SubtractionCoefficient.
apply Build_SubtractionCoefficient with (coeff := mul2modulus).
@@ -150,24 +150,24 @@ Proof.
reflexivity.
Qed.
-Definition app_n {T} (f : fe) (P : fe -> T) : T.
+Definition app_n {T} (f : fe2213_32) (P : fe2213_32 -> T) : T.
Proof.
- cbv [fe] in *.
+ cbv [fe2213_32] in *.
set (f0 := f).
repeat (let g := fresh "g" in destruct f as [f g]).
apply P.
apply f0.
Defined.
-Definition app_n_correct {T} f (P : fe -> T) : app_n f P = P f.
+Definition app_n_correct {T} f (P : fe2213_32 -> T) : app_n f P = P f.
Proof.
intros.
- cbv [fe] in *.
+ cbv [fe2213_32] in *.
repeat match goal with [p : (_*Z)%type |- _ ] => destruct p end.
reflexivity.
Qed.
-Definition appify2 {T} (op : fe -> fe -> T) (f g : fe) :=
+Definition appify2 {T} (op : fe2213_32 -> fe2213_32 -> T) (f g : fe2213_32) :=
app_n f (fun f0 => (app_n g (fun g0 => op f0 g0))).
Lemma appify2_correct : forall {T} op f g, @appify2 T op f g = op f g.
@@ -176,102 +176,102 @@ Proof.
etransitivity; apply app_n_correct.
Qed.
-Definition uncurry_unop_fe {T} (op : fe -> T)
- := Eval compute in Tuple.uncurry (n:=length_fe) op.
-Definition curry_unop_fe {T} op : fe -> T
- := Eval compute in fun f => app_n f (Tuple.curry (n:=length_fe) op).
-Definition uncurry_binop_fe {T} (op : fe -> fe -> T)
- := Eval compute in uncurry_unop_fe (fun f => uncurry_unop_fe (op f)).
-Definition curry_binop_fe {T} op : fe -> fe -> T
- := Eval compute in appify2 (fun f => curry_unop_fe (curry_unop_fe op f)).
+Definition uncurry_unop_fe2213_32 {T} (op : fe2213_32 -> T)
+ := Eval compute in Tuple.uncurry (n:=length_fe2213_32) op.
+Definition curry_unop_fe2213_32 {T} op : fe2213_32 -> T
+ := Eval compute in fun f => app_n f (Tuple.curry (n:=length_fe2213_32) op).
+Definition uncurry_binop_fe2213_32 {T} (op : fe2213_32 -> fe2213_32 -> T)
+ := Eval compute in uncurry_unop_fe2213_32 (fun f => uncurry_unop_fe2213_32 (op f)).
+Definition curry_binop_fe2213_32 {T} op : fe2213_32 -> fe2213_32 -> T
+ := Eval compute in appify2 (fun f => curry_unop_fe2213_32 (curry_unop_fe2213_32 op f)).
Definition uncurry_unop_wire_digits {T} (op : wire_digits -> T)
:= Eval compute in Tuple.uncurry (n:=length wire_widths) op.
Definition curry_unop_wire_digits {T} op : wire_digits -> T
:= Eval compute in fun f => app_n2 f (Tuple.curry (n:=length wire_widths) op).
-Definition add_sig (f g : fe) :
- { fg : fe | fg = add_opt f g}.
+Definition add_sig (f g : fe2213_32) :
+ { fg : fe2213_32 | fg = add_opt f g}.
Proof.
eexists.
- rewrite <-(@appify2_correct fe).
+ rewrite <-(@appify2_correct fe2213_32).
cbv.
reflexivity.
Defined.
-Definition add (f g : fe) : fe :=
+Definition add (f g : fe2213_32) : fe2213_32 :=
Eval cbv beta iota delta [proj1_sig add_sig] in
proj1_sig (add_sig f g).
-Definition add_correct (f g : fe)
+Definition add_correct (f g : fe2213_32)
: add f g = add_opt f g :=
Eval cbv beta iota delta [proj1_sig add_sig] in
proj2_sig (add_sig f g).
-Definition carry_add_sig (f g : fe) :
- { fg : fe | fg = carry_add_opt f g}.
+Definition carry_add_sig (f g : fe2213_32) :
+ { fg : fe2213_32 | fg = carry_add_opt f g}.
Proof.
eexists.
- rewrite <-(@appify2_correct fe).
+ rewrite <-(@appify2_correct fe2213_32).
cbv.
autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
autorewrite with zsimplify_Z_to_pos; cbv.
reflexivity.
Defined.
-Definition carry_add (f g : fe) : fe :=
+Definition carry_add (f g : fe2213_32) : fe2213_32 :=
Eval cbv beta iota delta [proj1_sig carry_add_sig] in
proj1_sig (carry_add_sig f g).
-Definition carry_add_correct (f g : fe)
+Definition carry_add_correct (f g : fe2213_32)
: carry_add f g = carry_add_opt f g :=
Eval cbv beta iota delta [proj1_sig carry_add_sig] in
proj2_sig (carry_add_sig f g).
-Definition sub_sig (f g : fe) :
- { fg : fe | fg = sub_opt f g}.
+Definition sub_sig (f g : fe2213_32) :
+ { fg : fe2213_32 | fg = sub_opt f g}.
Proof.
eexists.
- rewrite <-(@appify2_correct fe).
+ rewrite <-(@appify2_correct fe2213_32).
cbv.
reflexivity.
Defined.
-Definition sub (f g : fe) : fe :=
+Definition sub (f g : fe2213_32) : fe2213_32 :=
Eval cbv beta iota delta [proj1_sig sub_sig] in
proj1_sig (sub_sig f g).
-Definition sub_correct (f g : fe)
+Definition sub_correct (f g : fe2213_32)
: sub f g = sub_opt f g :=
Eval cbv beta iota delta [proj1_sig sub_sig] in
proj2_sig (sub_sig f g).
-Definition carry_sub_sig (f g : fe) :
- { fg : fe | fg = carry_sub_opt f g}.
+Definition carry_sub_sig (f g : fe2213_32) :
+ { fg : fe2213_32 | fg = carry_sub_opt f g}.
Proof.
eexists.
- rewrite <-(@appify2_correct fe).
+ rewrite <-(@appify2_correct fe2213_32).
cbv.
autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
autorewrite with zsimplify_Z_to_pos; cbv.
reflexivity.
Defined.
-Definition carry_sub (f g : fe) : fe :=
+Definition carry_sub (f g : fe2213_32) : fe2213_32 :=
Eval cbv beta iota delta [proj1_sig carry_sub_sig] in
proj1_sig (carry_sub_sig f g).
-Definition carry_sub_correct (f g : fe)
+Definition carry_sub_correct (f g : fe2213_32)
: carry_sub f g = carry_sub_opt f g :=
Eval cbv beta iota delta [proj1_sig carry_sub_sig] in
proj2_sig (carry_sub_sig f g).
(* For multiplication, we add another layer of definition so that we can
rewrite under the [let] binders. *)
-Definition mul_simpl_sig (f g : fe) :
- { fg : fe | fg = carry_mul_opt k_ c_ f g}.
+Definition mul_simpl_sig (f g : fe2213_32) :
+ { fg : fe2213_32 | fg = carry_mul_opt k_ c_ f g}.
Proof.
- cbv [fe] in *.
+ cbv [fe2213_32] in *.
repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
eexists.
cbv. (* N.B. The slow part of this is computing with [Z_div_opt].
@@ -282,45 +282,45 @@ Proof.
reflexivity.
Defined.
-Definition mul_simpl (f g : fe) : fe :=
+Definition mul_simpl (f g : fe2213_32) : fe2213_32 :=
Eval cbv beta iota delta [proj1_sig mul_simpl_sig] in
let '(f0, f1, f2, f3, f4, f5, f6, f7) := f in
let '(g0, g1, g2, g3, g4, g5, g6, g7) := g in
proj1_sig (mul_simpl_sig (f0, f1, f2, f3, f4, f5, f6, f7)
(g0, g1, g2, g3, g4, g5, g6, g7)).
-Definition mul_simpl_correct (f g : fe)
+Definition mul_simpl_correct (f g : fe2213_32)
: mul_simpl f g = carry_mul_opt k_ c_ f g.
Proof.
pose proof (proj2_sig (mul_simpl_sig f g)).
- cbv [fe] in *.
+ cbv [fe2213_32] in *.
repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
assumption.
Qed.
-Definition mul_sig (f g : fe) :
- { fg : fe | fg = carry_mul_opt k_ c_ f g}.
+Definition mul_sig (f g : fe2213_32) :
+ { fg : fe2213_32 | fg = carry_mul_opt k_ c_ f g}.
Proof.
eexists.
rewrite <-mul_simpl_correct.
- rewrite <-(@appify2_correct fe).
+ rewrite <-(@appify2_correct fe2213_32).
cbv.
autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
autorewrite with zsimplify_Z_to_pos; cbv.
reflexivity.
Defined.
-Definition mul (f g : fe) : fe :=
+Definition mul (f g : fe2213_32) : fe2213_32 :=
Eval cbv beta iota delta [proj1_sig mul_sig] in
proj1_sig (mul_sig f g).
-Definition mul_correct (f g : fe)
+Definition mul_correct (f g : fe2213_32)
: mul f g = carry_mul_opt k_ c_ f g :=
Eval cbv beta iota delta [proj1_sig add_sig] in
proj2_sig (mul_sig f g).
-Definition opp_sig (f : fe) :
- { g : fe | g = opp_opt f }.
+Definition opp_sig (f : fe2213_32) :
+ { g : fe2213_32 | g = opp_opt f }.
Proof.
eexists.
cbv [opp_opt].
@@ -330,15 +330,15 @@ Proof.
reflexivity.
Defined.
-Definition opp (f : fe) : fe
+Definition opp (f : fe2213_32) : fe2213_32
:= Eval cbv beta iota delta [proj1_sig opp_sig] in proj1_sig (opp_sig f).
-Definition opp_correct (f : fe)
+Definition opp_correct (f : fe2213_32)
: opp f = opp_opt f
:= Eval cbv beta iota delta [proj2_sig add_sig] in proj2_sig (opp_sig f).
-Definition carry_opp_sig (f : fe) :
- { g : fe | g = carry_opp_opt f }.
+Definition carry_opp_sig (f : fe2213_32) :
+ { g : fe2213_32 | g = carry_opp_opt f }.
Proof.
eexists.
cbv [carry_opp_opt].
@@ -348,16 +348,16 @@ Proof.
reflexivity.
Defined.
-Definition carry_opp (f : fe) : fe
+Definition carry_opp (f : fe2213_32) : fe2213_32
:= Eval cbv beta iota delta [proj1_sig carry_opp_sig] in proj1_sig (carry_opp_sig f).
-Definition carry_opp_correct (f : fe)
+Definition carry_opp_correct (f : fe2213_32)
: carry_opp f = carry_opp_opt f
:= Eval cbv beta iota delta [proj2_sig add_sig] in proj2_sig (carry_opp_sig f).
-Definition pow (f : fe) chain := fold_chain_opt one_ mul chain [f].
+Definition pow (f : fe2213_32) chain := fold_chain_opt one_ mul chain [f].
-Lemma pow_correct (f : fe) : forall chain, pow f chain = pow_opt k_ c_ one_ f chain.
+Lemma pow_correct (f : fe2213_32) : forall chain, pow f chain = pow_opt k_ c_ one_ f chain.
Proof.
cbv [pow pow_opt]; intros.
rewrite !fold_chain_opt_correct.
@@ -382,8 +382,8 @@ Qed.
Local Opaque Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb andb.
-Definition inv_sig (f : fe) :
- { g : fe | g = inv_opt k_ c_ one_ f }.
+Definition inv_sig (f : fe2213_32) :
+ { g : fe2213_32 | g = inv_opt k_ c_ one_ f }.
Proof.
eexists; cbv [inv_opt].
rewrite <-pow_correct.
@@ -391,10 +391,10 @@ Proof.
reflexivity.
Defined.
-Definition inv (f : fe) : fe
+Definition inv (f : fe2213_32) : fe2213_32
:= Eval cbv beta iota delta [proj1_sig inv_sig] in proj1_sig (inv_sig f).
-Definition inv_correct (f : fe)
+Definition inv_correct (f : fe2213_32)
: inv f = inv_opt k_ c_ one_ f
:= Eval cbv beta iota delta [proj2_sig inv_sig] in proj2_sig (inv_sig f).
@@ -405,12 +405,12 @@ Import Morphisms.
Local Existing Instance prime_modulus.
Lemma field_and_homomorphisms
- : @field fe eq zero_ one_ opp add sub mul inv div
+ : @field fe2213_32 eq zero_ one_ opp add sub mul inv div
/\ @Ring.is_homomorphism
(F modulus) Logic.eq F.one F.add F.mul
- fe eq one_ add mul encode
+ fe2213_32 eq one_ add mul encode
/\ @Ring.is_homomorphism
- fe eq one_ add mul
+ fe2213_32 eq one_ add mul
(F modulus) Logic.eq F.one F.add F.mul
decode.
Proof.
@@ -428,15 +428,15 @@ Proof.
{ intros; apply encode_rep. }
Qed.
-Definition field2213 : @field fe eq zero_ one_ opp add sub mul inv div := proj1 field_and_homomorphisms.
+Definition field2213 : @field fe2213_32 eq zero_ one_ opp add sub mul inv div := proj1 field_and_homomorphisms.
Lemma carry_field_and_homomorphisms
- : @field fe eq zero_ one_ carry_opp carry_add carry_sub mul inv div
+ : @field fe2213_32 eq zero_ one_ carry_opp carry_add carry_sub mul inv div
/\ @Ring.is_homomorphism
(F modulus) Logic.eq F.one F.add F.mul
- fe eq one_ carry_add mul encode
+ fe2213_32 eq one_ carry_add mul encode
/\ @Ring.is_homomorphism
- fe eq one_ carry_add mul
+ fe2213_32 eq one_ carry_add mul
(F modulus) Logic.eq F.one F.add F.mul
decode.
Proof.
@@ -454,29 +454,29 @@ Proof.
{ intros; apply encode_rep. }
Qed.
-Definition carry_field : @field fe eq zero_ one_ carry_opp carry_add carry_sub mul inv div := proj1 carry_field_and_homomorphisms.
+Definition carry_field : @field fe2213_32 eq zero_ one_ carry_opp carry_add carry_sub mul inv div := proj1 carry_field_and_homomorphisms.
Lemma homomorphism_F_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe eq one add mul encode.
+ : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe2213_32 eq one add mul encode.
Proof. apply field_and_homomorphisms. Qed.
Lemma homomorphism_F_decode
- : @Ring.is_homomorphism fe eq one add mul (F modulus) Logic.eq F.one F.add F.mul decode.
+ : @Ring.is_homomorphism fe2213_32 eq one add mul (F modulus) Logic.eq F.one F.add F.mul decode.
Proof. apply field_and_homomorphisms. Qed.
Lemma homomorphism_carry_F_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe eq one carry_add mul encode.
+ : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe2213_32 eq one carry_add mul encode.
Proof. apply carry_field_and_homomorphisms. Qed.
Lemma homomorphism_carry_F_decode
- : @Ring.is_homomorphism fe eq one carry_add mul (F modulus) Logic.eq F.one F.add F.mul decode.
+ : @Ring.is_homomorphism fe2213_32 eq one carry_add mul (F modulus) Logic.eq F.one F.add F.mul decode.
Proof. apply carry_field_and_homomorphisms. Qed.
-Definition ge_modulus_sig (f : fe) :
+Definition ge_modulus_sig (f : fe2213_32) :
{ b : Z | b = ge_modulus_opt (to_list 8 f) }.
Proof.
- cbv [fe] in *.
+ cbv [fe2213_32] in *.
repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
eexists; cbv [ge_modulus_opt].
rewrite !modulus_digits_subst.
@@ -484,24 +484,24 @@ Proof.
reflexivity.
Defined.
-Definition ge_modulus (f : fe) : Z :=
+Definition ge_modulus (f : fe2213_32) : Z :=
Eval cbv beta iota delta [proj1_sig ge_modulus_sig] in
let '(f0, f1, f2, f3, f4, f5, f6, f7) := f in
proj1_sig (ge_modulus_sig (f0, f1, f2, f3, f4, f5, f6, f7)).
-Definition ge_modulus_correct (f : fe) :
+Definition ge_modulus_correct (f : fe2213_32) :
ge_modulus f = ge_modulus_opt (to_list 8 f).
Proof.
pose proof (proj2_sig (ge_modulus_sig f)).
- cbv [fe] in *.
+ cbv [fe2213_32] in *.
repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
assumption.
Defined.
-Definition freeze_sig (f : fe) :
- { f' : fe | f' = from_list_default 0 8 (freeze_opt (int_width := int_width) c_ (to_list 8 f)) }.
+Definition freeze_sig (f : fe2213_32) :
+ { f' : fe2213_32 | f' = from_list_default 0 8 (freeze_opt (int_width := int_width) c_ (to_list 8 f)) }.
Proof.
- cbv [fe] in *.
+ cbv [fe2213_32] in *.
repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
eexists; cbv [freeze_opt int_width].
cbv [to_list to_list'].
@@ -516,38 +516,38 @@ Proof.
reflexivity.
Defined.
-Definition freeze (f : fe) : fe :=
+Definition freeze (f : fe2213_32) : fe2213_32 :=
Eval cbv beta iota delta [proj1_sig freeze_sig] in
let '(f0, f1, f2, f3, f4, f5, f6, f7) := f in
proj1_sig (freeze_sig (f0, f1, f2, f3, f4, f5, f6, f7)).
-Definition freeze_correct (f : fe)
+Definition freeze_correct (f : fe2213_32)
: freeze f = from_list_default 0 8 (freeze_opt (int_width := int_width) c_ (to_list 8 f)).
Proof.
pose proof (proj2_sig (freeze_sig f)).
- cbv [fe] in *.
+ cbv [fe2213_32] in *.
repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
assumption.
Defined.
-Definition fieldwiseb_sig (f g : fe) :
+Definition fieldwiseb_sig (f g : fe2213_32) :
{ b | b = @fieldwiseb Z Z 8 Z.eqb f g }.
Proof.
- cbv [fe] in *.
+ cbv [fe2213_32] in *.
repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
eexists.
cbv.
reflexivity.
Defined.
-Definition fieldwiseb (f g : fe) : bool
+Definition fieldwiseb (f g : fe2213_32) : bool
:= Eval cbv beta iota delta [proj1_sig fieldwiseb_sig] in
let '(f0, f1, f2, f3, f4, f5, f6, f7) := f in
let '(g0, g1, g2, g3, g4, g5, g6, g7) := g in
proj1_sig (fieldwiseb_sig (f0, f1, f2, f3, f4, f5, f6, f7)
(g0, g1, g2, g3, g4, g5, g6, g7)).
-Lemma fieldwiseb_correct (f g : fe)
+Lemma fieldwiseb_correct (f g : fe2213_32)
: fieldwiseb f g = @Tuple.fieldwiseb Z Z 8 Z.eqb f g.
Proof.
set (f' := f); set (g' := g).
@@ -555,11 +555,11 @@ Proof.
exact (proj2_sig (fieldwiseb_sig f' g')).
Qed.
-Definition eqb_sig (f g : fe) :
+Definition eqb_sig (f g : fe2213_32) :
{ b | b = eqb int_width f g }.
Proof.
cbv [eqb].
- cbv [fe] in *.
+ cbv [fe2213_32] in *.
repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
eexists.
cbv [ModularBaseSystem.freeze int_width].
@@ -570,14 +570,14 @@ Proof.
reflexivity.
Defined.
-Definition eqb (f g : fe) : bool
+Definition eqb (f g : fe2213_32) : bool
:= Eval cbv beta iota delta [proj1_sig eqb_sig] in
let '(f0, f1, f2, f3, f4, f5, f6, f7) := f in
let '(g0, g1, g2, g3, g4, g5, g6, g7) := g in
proj1_sig (eqb_sig (f0, f1, f2, f3, f4, f5, f6, f7)
(g0, g1, g2, g3, g4, g5, g6, g7)).
-Lemma eqb_correct (f g : fe)
+Lemma eqb_correct (f g : fe2213_32)
: eqb f g = ModularBaseSystem.eqb int_width f g.
Proof.
set (f' := f); set (g' := g).
@@ -585,8 +585,8 @@ Proof.
exact (proj2_sig (eqb_sig f' g')).
Qed.
-Definition sqrt_sig (powx powx_squared f : fe) :
- { f' : fe | f' = sqrt_5mod8_opt (int_width := int_width) k_ c_ sqrt_m1 powx powx_squared f}.
+Definition sqrt_sig (powx powx_squared f : fe2213_32) :
+ { f' : fe2213_32 | f' = sqrt_5mod8_opt (int_width := int_width) k_ c_ sqrt_m1 powx powx_squared f}.
Proof.
eexists.
cbv [sqrt_5mod8_opt int_width].
@@ -595,17 +595,17 @@ Proof.
reflexivity.
Defined.
-Definition sqrt (powx powx_squared f : fe) : fe
+Definition sqrt (powx powx_squared f : fe2213_32) : fe2213_32
:= Eval cbv beta iota delta [proj1_sig sqrt_sig] in proj1_sig (sqrt_sig powx powx_squared f).
-Definition sqrt_correct (powx powx_squared f : fe)
+Definition sqrt_correct (powx powx_squared f : fe2213_32)
: sqrt powx powx_squared f = sqrt_5mod8_opt k_ c_ sqrt_m1 powx powx_squared f
:= Eval cbv beta iota delta [proj2_sig sqrt_sig] in proj2_sig (sqrt_sig powx powx_squared f).
-Definition pack_simpl_sig (f : fe) :
- { f' | f' = pack_opt params wire_widths_nonneg bits_eq f }.
+Definition pack_simpl_sig (f : fe2213_32) :
+ { f' | f' = pack_opt params2213_32 wire_widths_nonneg bits_eq f }.
Proof.
- cbv [fe] in *.
+ cbv [fe2213_32] in *.
repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
eexists.
cbv [pack_opt].
@@ -616,22 +616,22 @@ Proof.
reflexivity.
Defined.
-Definition pack_simpl (f : fe) :=
+Definition pack_simpl (f : fe2213_32) :=
Eval cbv beta iota delta [proj1_sig pack_simpl_sig] in
let '(f0, f1, f2, f3, f4, f5, f6, f7) := f in
proj1_sig (pack_simpl_sig (f0, f1, f2, f3, f4, f5, f6, f7)).
-Definition pack_simpl_correct (f : fe)
- : pack_simpl f = pack_opt params wire_widths_nonneg bits_eq f.
+Definition pack_simpl_correct (f : fe2213_32)
+ : pack_simpl f = pack_opt params2213_32 wire_widths_nonneg bits_eq f.
Proof.
pose proof (proj2_sig (pack_simpl_sig f)).
- cbv [fe] in *.
+ cbv [fe2213_32] in *.
repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
assumption.
Qed.
-Definition pack_sig (f : fe) :
- { f' | f' = pack_opt params wire_widths_nonneg bits_eq f }.
+Definition pack_sig (f : fe2213_32) :
+ { f' | f' = pack_opt params2213_32 wire_widths_nonneg bits_eq f }.
Proof.
eexists.
rewrite <-pack_simpl_correct.
@@ -640,15 +640,15 @@ Proof.
reflexivity.
Defined.
-Definition pack (f : fe) : wire_digits :=
+Definition pack (f : fe2213_32) : wire_digits :=
Eval cbv beta iota delta [proj1_sig pack_sig] in proj1_sig (pack_sig f).
-Definition pack_correct (f : fe)
- : pack f = pack_opt params wire_widths_nonneg bits_eq f
+Definition pack_correct (f : fe2213_32)
+ : pack f = pack_opt params2213_32 wire_widths_nonneg bits_eq f
:= Eval cbv beta iota delta [proj2_sig pack_sig] in proj2_sig (pack_sig f).
Definition unpack_simpl_sig (f : wire_digits) :
- { f' | f' = unpack_opt params wire_widths_nonneg bits_eq f }.
+ { f' | f' = unpack_opt params2213_32 wire_widths_nonneg bits_eq f }.
Proof.
cbv [wire_digits] in *.
repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
@@ -662,13 +662,13 @@ Proof.
reflexivity.
Defined.
-Definition unpack_simpl (f : wire_digits) : fe :=
+Definition unpack_simpl (f : wire_digits) : fe2213_32 :=
Eval cbv beta iota delta [proj1_sig unpack_simpl_sig] in
let '(f0, f1, f2, f3, f4, f5, f6) := f in
proj1_sig (unpack_simpl_sig (f0, f1, f2, f3, f4, f5, f6)).
Definition unpack_simpl_correct (f : wire_digits)
- : unpack_simpl f = unpack_opt params wire_widths_nonneg bits_eq f.
+ : unpack_simpl f = unpack_opt params2213_32 wire_widths_nonneg bits_eq f.
Proof.
pose proof (proj2_sig (unpack_simpl_sig f)).
cbv [wire_digits] in *.
@@ -677,18 +677,18 @@ Proof.
Qed.
Definition unpack_sig (f : wire_digits) :
- { f' | f' = unpack_opt params wire_widths_nonneg bits_eq f }.
+ { f' | f' = unpack_opt params2213_32 wire_widths_nonneg bits_eq f }.
Proof.
eexists.
rewrite <-unpack_simpl_correct.
- rewrite <-(@app_n2_correct fe).
+ rewrite <-(@app_n2_correct fe2213_32).
cbv.
reflexivity.
Defined.
-Definition unpack (f : wire_digits) : fe :=
+Definition unpack (f : wire_digits) : fe2213_32 :=
Eval cbv beta iota delta [proj1_sig unpack_sig] in proj1_sig (unpack_sig f).
Definition unpack_correct (f : wire_digits)
- : unpack f = unpack_opt params wire_widths_nonneg bits_eq f
+ : unpack f = unpack_opt params2213_32 wire_widths_nonneg bits_eq f
:= Eval cbv beta iota delta [proj2_sig pack_sig] in proj2_sig (unpack_sig f).