diff options
author | Jason Gross <jgross@mit.edu> | 2016-11-14 15:27:17 -0500 |
---|---|---|
committer | Jason Gross <jgross@mit.edu> | 2016-11-14 15:27:17 -0500 |
commit | 9f9fa521e29293af46123b1c97fd1426d0cf240a (patch) | |
tree | b80e3d7b72c851629192c6750544f0bcc23f14de /src/SpecificGen/GFtemplate3mod4 | |
parent | d2d827083a92b07881d239de3ac0a6019c375c27 (diff) |
Fix changes in naming in SpecificGen
Diffstat (limited to 'src/SpecificGen/GFtemplate3mod4')
-rw-r--r-- | src/SpecificGen/GFtemplate3mod4 | 234 |
1 files changed, 117 insertions, 117 deletions
diff --git a/src/SpecificGen/GFtemplate3mod4 b/src/SpecificGen/GFtemplate3mod4 index 6c25c91ca..0ad1a423a 100644 --- a/src/SpecificGen/GFtemplate3mod4 +++ b/src/SpecificGen/GFtemplate3mod4 @@ -25,15 +25,15 @@ Lemma prime_modulus : prime modulus. Admitted. Definition freeze_input_bound := {{{w}}}%Z. Definition int_width := {{{w}}}%Z. -Instance params : PseudoMersenneBaseParams modulus. +Instance params{{{k}}}{{{c}}}_{{{w}}} : PseudoMersenneBaseParams modulus. construct_params prime_modulus {{{n}}}%nat {{{k}}}. Defined. -Definition length_fe := Eval compute in length limb_widths. -Definition fe := Eval compute in (tuple Z length_fe). +Definition length_fe{{{k}}}{{{c}}}_{{{w}}} := Eval compute in length limb_widths. +Definition fe{{{k}}}{{{c}}}_{{{w}}} := Eval compute in (tuple Z length_fe{{{k}}}{{{c}}}_{{{w}}}). -Definition mul2modulus : fe := - Eval compute in (from_list_default 0%Z (length limb_widths) (construct_mul2modulus params)). +Definition mul2modulus : fe{{{k}}}{{{c}}}_{{{w}}} := + Eval compute in (from_list_default 0%Z (length limb_widths) (construct_mul2modulus params{{{k}}}{{{c}}}_{{{w}}})). 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 : fe{{{k}}}{{{c}}}_{{{w}}}) (P : fe{{{k}}}{{{c}}}_{{{w}}} -> T) : T. Proof. - cbv [fe] in *. + cbv [fe{{{k}}}{{{c}}}_{{{w}}}] 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 : fe{{{k}}}{{{c}}}_{{{w}}} -> T) : app_n f P = P f. Proof. intros. - cbv [fe] in *. + cbv [fe{{{k}}}{{{c}}}_{{{w}}}] 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 : fe{{{k}}}{{{c}}}_{{{w}}} -> fe{{{k}}}{{{c}}}_{{{w}}} -> T) (f g : fe{{{k}}}{{{c}}}_{{{w}}}) := 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_fe{{{k}}}{{{c}}}_{{{w}}} {T} (op : fe{{{k}}}{{{c}}}_{{{w}}} -> T) + := Eval compute in Tuple.uncurry (n:=length_fe{{{k}}}{{{c}}}_{{{w}}}) op. +Definition curry_unop_fe{{{k}}}{{{c}}}_{{{w}}} {T} op : fe{{{k}}}{{{c}}}_{{{w}}} -> T + := Eval compute in fun f => app_n f (Tuple.curry (n:=length_fe{{{k}}}{{{c}}}_{{{w}}}) op). +Definition uncurry_binop_fe{{{k}}}{{{c}}}_{{{w}}} {T} (op : fe{{{k}}}{{{c}}}_{{{w}}} -> fe{{{k}}}{{{c}}}_{{{w}}} -> T) + := Eval compute in uncurry_unop_fe{{{k}}}{{{c}}}_{{{w}}} (fun f => uncurry_unop_fe{{{k}}}{{{c}}}_{{{w}}} (op f)). +Definition curry_binop_fe{{{k}}}{{{c}}}_{{{w}}} {T} op : fe{{{k}}}{{{c}}}_{{{w}}} -> fe{{{k}}}{{{c}}}_{{{w}}} -> T + := Eval compute in appify2 (fun f => curry_unop_fe{{{k}}}{{{c}}}_{{{w}}} (curry_unop_fe{{{k}}}{{{c}}}_{{{w}}} 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : + { fg : fe{{{k}}}{{{c}}}_{{{w}}} | fg = add_opt f g}. Proof. eexists. - rewrite <-(@appify2_correct fe). + rewrite <-(@appify2_correct fe{{{k}}}{{{c}}}_{{{w}}}). cbv. reflexivity. Defined. -Definition add (f g : fe) : fe := +Definition add (f g : fe{{{k}}}{{{c}}}_{{{w}}}) : fe{{{k}}}{{{c}}}_{{{w}}} := 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : + { fg : fe{{{k}}}{{{c}}}_{{{w}}} | fg = carry_add_opt f g}. Proof. eexists. - rewrite <-(@appify2_correct fe). + rewrite <-(@appify2_correct fe{{{k}}}{{{c}}}_{{{w}}}). 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : fe{{{k}}}{{{c}}}_{{{w}}} := 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : + { fg : fe{{{k}}}{{{c}}}_{{{w}}} | fg = sub_opt f g}. Proof. eexists. - rewrite <-(@appify2_correct fe). + rewrite <-(@appify2_correct fe{{{k}}}{{{c}}}_{{{w}}}). cbv. reflexivity. Defined. -Definition sub (f g : fe) : fe := +Definition sub (f g : fe{{{k}}}{{{c}}}_{{{w}}}) : fe{{{k}}}{{{c}}}_{{{w}}} := 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : + { fg : fe{{{k}}}{{{c}}}_{{{w}}} | fg = carry_sub_opt f g}. Proof. eexists. - rewrite <-(@appify2_correct fe). + rewrite <-(@appify2_correct fe{{{k}}}{{{c}}}_{{{w}}}). 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : fe{{{k}}}{{{c}}}_{{{w}}} := 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : + { fg : fe{{{k}}}{{{c}}}_{{{w}}} | fg = carry_mul_opt k_ c_ f g}. Proof. - cbv [fe] in *. + cbv [fe{{{k}}}{{{c}}}_{{{w}}}] 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : fe{{{k}}}{{{c}}}_{{{w}}} := Eval cbv beta iota delta [proj1_sig mul_simpl_sig] in let '{{{enum f}}} := f in let '{{{enum g}}} := g in proj1_sig (mul_simpl_sig {{{enum f}}} {{{enum g}}}). -Definition mul_simpl_correct (f g : fe) +Definition mul_simpl_correct (f g : fe{{{k}}}{{{c}}}_{{{w}}}) : 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 [fe{{{k}}}{{{c}}}_{{{w}}}] 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : + { fg : fe{{{k}}}{{{c}}}_{{{w}}} | fg = carry_mul_opt k_ c_ f g}. Proof. eexists. rewrite <-mul_simpl_correct. - rewrite <-(@appify2_correct fe). + rewrite <-(@appify2_correct fe{{{k}}}{{{c}}}_{{{w}}}). 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : fe{{{k}}}{{{c}}}_{{{w}}} := 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : + { g : fe{{{k}}}{{{c}}}_{{{w}}} | g = opp_opt f }. Proof. eexists. cbv [opp_opt]. @@ -330,15 +330,15 @@ Proof. reflexivity. Defined. -Definition opp (f : fe) : fe +Definition opp (f : fe{{{k}}}{{{c}}}_{{{w}}}) : fe{{{k}}}{{{c}}}_{{{w}}} := Eval cbv beta iota delta [proj1_sig opp_sig] in proj1_sig (opp_sig f). -Definition opp_correct (f : fe) +Definition opp_correct (f : fe{{{k}}}{{{c}}}_{{{w}}}) : 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : + { g : fe{{{k}}}{{{c}}}_{{{w}}} | 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : fe{{{k}}}{{{c}}}_{{{w}}} := 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : 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 : fe{{{k}}}{{{c}}}_{{{w}}}) 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : forall chain, pow f chain = pow_opt k_ c_ one_ f chain. Proof. cbv [pow pow_opt]; intros. rewrite !fold_chain_opt_correct. @@ -365,8 +365,8 @@ Proof. intros; subst; apply mul_correct. Qed. -Definition inv_sig (f : fe) : - { g : fe | g = inv_opt k_ c_ one_ f }. +Definition inv_sig (f : fe{{{k}}}{{{c}}}_{{{w}}}) : + { g : fe{{{k}}}{{{c}}}_{{{w}}} | g = inv_opt k_ c_ one_ f }. Proof. eexists; cbv [inv_opt]. rewrite <-pow_correct. @@ -374,10 +374,10 @@ Proof. reflexivity. Defined. -Definition inv (f : fe) : fe +Definition inv (f : fe{{{k}}}{{{c}}}_{{{w}}}) : fe{{{k}}}{{{c}}}_{{{w}}} := Eval cbv beta iota delta [proj1_sig inv_sig] in proj1_sig (inv_sig f). -Definition inv_correct (f : fe) +Definition inv_correct (f : fe{{{k}}}{{{c}}}_{{{w}}}) : inv f = inv_opt k_ c_ one_ f := Eval cbv beta iota delta [proj2_sig inv_sig] in proj2_sig (inv_sig f). @@ -388,12 +388,12 @@ Import Morphisms. Local Existing Instance prime_modulus. Lemma field_and_homomorphisms - : @field fe eq zero_ one_ opp add sub mul inv div + : @field fe{{{k}}}{{{c}}}_{{{w}}} 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 + fe{{{k}}}{{{c}}}_{{{w}}} eq one_ add mul encode /\ @Ring.is_homomorphism - fe eq one_ add mul + fe{{{k}}}{{{c}}}_{{{w}}} eq one_ add mul (F modulus) Logic.eq F.one F.add F.mul decode. Proof. @@ -411,15 +411,15 @@ Proof. { intros; apply encode_rep. } Qed. -Definition field{{{k}}}{{{c}}} : @field fe eq zero_ one_ opp add sub mul inv div := proj1 field_and_homomorphisms. +Definition field{{{k}}}{{{c}}} : @field fe{{{k}}}{{{c}}}_{{{w}}} 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 fe{{{k}}}{{{c}}}_{{{w}}} 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 + fe{{{k}}}{{{c}}}_{{{w}}} eq one_ carry_add mul encode /\ @Ring.is_homomorphism - fe eq one_ carry_add mul + fe{{{k}}}{{{c}}}_{{{w}}} eq one_ carry_add mul (F modulus) Logic.eq F.one F.add F.mul decode. Proof. @@ -437,29 +437,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 fe{{{k}}}{{{c}}}_{{{w}}} 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 fe{{{k}}}{{{c}}}_{{{w}}} 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 fe{{{k}}}{{{c}}}_{{{w}}} 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 fe{{{k}}}{{{c}}}_{{{w}}} 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 fe{{{k}}}{{{c}}}_{{{w}}} 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : { b : Z | b = ge_modulus_opt (to_list {{{n}}} f) }. Proof. - cbv [fe] in *. + cbv [fe{{{k}}}{{{c}}}_{{{w}}}] in *. repeat match goal with p : (_ * Z)%type |- _ => destruct p end. eexists; cbv [ge_modulus_opt]. rewrite !modulus_digits_subst. @@ -467,24 +467,24 @@ Proof. reflexivity. Defined. -Definition ge_modulus (f : fe) : Z := +Definition ge_modulus (f : fe{{{k}}}{{{c}}}_{{{w}}}) : Z := Eval cbv beta iota delta [proj1_sig ge_modulus_sig] in let '{{{enum f}}} := f in proj1_sig (ge_modulus_sig {{{enum f}}}). -Definition ge_modulus_correct (f : fe) : +Definition ge_modulus_correct (f : fe{{{k}}}{{{c}}}_{{{w}}}) : ge_modulus f = ge_modulus_opt (to_list {{{n}}} f). Proof. pose proof (proj2_sig (ge_modulus_sig f)). - cbv [fe] in *. + cbv [fe{{{k}}}{{{c}}}_{{{w}}}] 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 {{{n}}} (freeze_opt (int_width := int_width) c_ (to_list {{{n}}} f)) }. +Definition freeze_sig (f : fe{{{k}}}{{{c}}}_{{{w}}}) : + { f' : fe{{{k}}}{{{c}}}_{{{w}}} | f' = from_list_default 0 {{{n}}} (freeze_opt (int_width := int_width) c_ (to_list {{{n}}} f)) }. Proof. - cbv [fe] in *. + cbv [fe{{{k}}}{{{c}}}_{{{w}}}] in *. repeat match goal with p : (_ * Z)%type |- _ => destruct p end. eexists; cbv [freeze_opt int_width]. cbv [to_list to_list']. @@ -499,38 +499,38 @@ Proof. reflexivity. Defined. -Definition freeze (f : fe) : fe := +Definition freeze (f : fe{{{k}}}{{{c}}}_{{{w}}}) : fe{{{k}}}{{{c}}}_{{{w}}} := Eval cbv beta iota delta [proj1_sig freeze_sig] in let '{{{enum f}}} := f in proj1_sig (freeze_sig {{{enum f}}}). -Definition freeze_correct (f : fe) +Definition freeze_correct (f : fe{{{k}}}{{{c}}}_{{{w}}}) : freeze f = from_list_default 0 {{{n}}} (freeze_opt (int_width := int_width) c_ (to_list {{{n}}} f)). Proof. pose proof (proj2_sig (freeze_sig f)). - cbv [fe] in *. + cbv [fe{{{k}}}{{{c}}}_{{{w}}}] in *. repeat match goal with p : (_ * Z)%type |- _ => destruct p end. assumption. Defined. -Definition fieldwiseb_sig (f g : fe) : +Definition fieldwiseb_sig (f g : fe{{{k}}}{{{c}}}_{{{w}}}) : { b | b = @fieldwiseb Z Z {{{n}}} Z.eqb f g }. Proof. - cbv [fe] in *. + cbv [fe{{{k}}}{{{c}}}_{{{w}}}] 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : bool := Eval cbv beta iota delta [proj1_sig fieldwiseb_sig] in let '{{{enum f}}} := f in let '{{{enum g}}} := g in proj1_sig (fieldwiseb_sig {{{enum f}}} {{{enum g}}}). -Lemma fieldwiseb_correct (f g : fe) +Lemma fieldwiseb_correct (f g : fe{{{k}}}{{{c}}}_{{{w}}}) : fieldwiseb f g = @Tuple.fieldwiseb Z Z {{{n}}} Z.eqb f g. Proof. set (f' := f); set (g' := g). @@ -538,11 +538,11 @@ Proof. exact (proj2_sig (fieldwiseb_sig f' g')). Qed. -Definition eqb_sig (f g : fe) : +Definition eqb_sig (f g : fe{{{k}}}{{{c}}}_{{{w}}}) : { b | b = eqb int_width f g }. Proof. cbv [eqb]. - cbv [fe] in *. + cbv [fe{{{k}}}{{{c}}}_{{{w}}}] in *. repeat match goal with p : (_ * Z)%type |- _ => destruct p end. eexists. cbv [ModularBaseSystem.freeze int_width]. @@ -553,14 +553,14 @@ Proof. reflexivity. Defined. -Definition eqb (f g : fe) : bool +Definition eqb (f g : fe{{{k}}}{{{c}}}_{{{w}}}) : bool := Eval cbv beta iota delta [proj1_sig eqb_sig] in let '{{{enum f}}} := f in let '{{{enum g}}} := g in proj1_sig (eqb_sig {{{enum f}}} {{{enum g}}}). -Lemma eqb_correct (f g : fe) +Lemma eqb_correct (f g : fe{{{k}}}{{{c}}}_{{{w}}}) : eqb f g = ModularBaseSystem.eqb int_width f g. Proof. set (f' := f); set (g' := g). @@ -568,8 +568,8 @@ Proof. exact (proj2_sig (eqb_sig f' g')). Qed. -Definition sqrt_sig (f : fe) : - { f' : fe | f' = sqrt_3mod4_opt k_ c_ one_ f}. +Definition sqrt_sig (f : fe{{{k}}}{{{c}}}_{{{w}}}) : + { f' : fe{{{k}}}{{{c}}}_{{{w}}} | f' = sqrt_3mod4_opt k_ c_ one_ f}. Proof. eexists. cbv [sqrt_3mod4_opt int_width]. @@ -577,17 +577,17 @@ Proof. reflexivity. Defined. -Definition sqrt (f : fe) : fe +Definition sqrt (f : fe{{{k}}}{{{c}}}_{{{w}}}) : fe{{{k}}}{{{c}}}_{{{w}}} := Eval cbv beta iota delta [proj1_sig sqrt_sig] in proj1_sig (sqrt_sig f). -Definition sqrt_correct (f : fe) +Definition sqrt_correct (f : fe{{{k}}}{{{c}}}_{{{w}}}) : sqrt f = sqrt_3mod4_opt k_ c_ one_ f := Eval cbv beta iota delta [proj2_sig sqrt_sig] in proj2_sig (sqrt_sig f). -Definition pack_simpl_sig (f : fe) : - { f' | f' = pack_opt params wire_widths_nonneg bits_eq f }. +Definition pack_simpl_sig (f : fe{{{k}}}{{{c}}}_{{{w}}}) : + { f' | f' = pack_opt params{{{k}}}{{{c}}}_{{{w}}} wire_widths_nonneg bits_eq f }. Proof. - cbv [fe] in *. + cbv [fe{{{k}}}{{{c}}}_{{{w}}}] in *. repeat match goal with p : (_ * Z)%type |- _ => destruct p end. eexists. cbv [pack_opt]. @@ -598,22 +598,22 @@ Proof. reflexivity. Defined. -Definition pack_simpl (f : fe) := +Definition pack_simpl (f : fe{{{k}}}{{{c}}}_{{{w}}}) := Eval cbv beta iota delta [proj1_sig pack_simpl_sig] in let '{{{enum f}}} := f in proj1_sig (pack_simpl_sig {{{enum f}}}). -Definition pack_simpl_correct (f : fe) - : pack_simpl f = pack_opt params wire_widths_nonneg bits_eq f. +Definition pack_simpl_correct (f : fe{{{k}}}{{{c}}}_{{{w}}}) + : pack_simpl f = pack_opt params{{{k}}}{{{c}}}_{{{w}}} wire_widths_nonneg bits_eq f. Proof. pose proof (proj2_sig (pack_simpl_sig f)). - cbv [fe] in *. + cbv [fe{{{k}}}{{{c}}}_{{{w}}}] 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 : fe{{{k}}}{{{c}}}_{{{w}}}) : + { f' | f' = pack_opt params{{{k}}}{{{c}}}_{{{w}}} wire_widths_nonneg bits_eq f }. Proof. eexists. rewrite <-pack_simpl_correct. @@ -622,15 +622,15 @@ Proof. reflexivity. Defined. -Definition pack (f : fe) : wire_digits := +Definition pack (f : fe{{{k}}}{{{c}}}_{{{w}}}) : 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 : fe{{{k}}}{{{c}}}_{{{w}}}) + : pack f = pack_opt params{{{k}}}{{{c}}}_{{{w}}} 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 params{{{k}}}{{{c}}}_{{{w}}} wire_widths_nonneg bits_eq f }. Proof. cbv [wire_digits] in *. repeat match goal with p : (_ * Z)%type |- _ => destruct p end. @@ -644,13 +644,13 @@ Proof. reflexivity. Defined. -Definition unpack_simpl (f : wire_digits) : fe := +Definition unpack_simpl (f : wire_digits) : fe{{{k}}}{{{c}}}_{{{w}}} := Eval cbv beta iota delta [proj1_sig unpack_simpl_sig] in let '{{{enumw f}}} := f in proj1_sig (unpack_simpl_sig {{{enumw f}}}). Definition unpack_simpl_correct (f : wire_digits) - : unpack_simpl f = unpack_opt params wire_widths_nonneg bits_eq f. + : unpack_simpl f = unpack_opt params{{{k}}}{{{c}}}_{{{w}}} wire_widths_nonneg bits_eq f. Proof. pose proof (proj2_sig (unpack_simpl_sig f)). cbv [wire_digits] in *. @@ -659,18 +659,18 @@ Proof. Qed. Definition unpack_sig (f : wire_digits) : - { f' | f' = unpack_opt params wire_widths_nonneg bits_eq f }. + { f' | f' = unpack_opt params{{{k}}}{{{c}}}_{{{w}}} wire_widths_nonneg bits_eq f }. Proof. eexists. rewrite <-unpack_simpl_correct. - rewrite <-(@app_n2_correct fe). + rewrite <-(@app_n2_correct fe{{{k}}}{{{c}}}_{{{w}}}). cbv. reflexivity. Defined. -Definition unpack (f : wire_digits) : fe := +Definition unpack (f : wire_digits) : fe{{{k}}}{{{c}}}_{{{w}}} := 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 params{{{k}}}{{{c}}}_{{{w}}} wire_widths_nonneg bits_eq f := Eval cbv beta iota delta [proj2_sig pack_sig] in proj2_sig (unpack_sig f). |