LAProof.accuracy_proofs.vec_op_acc
From LAProof.accuracy_proofs Require Import preamble common
dotprod_model sum_model dot_acc float_acc_lems mv_mathcomp gemv_acc.
Section WithNans.
Context {NAN: FPCore.Nans} {t : FPStdLib.type}.
Notation g := (@common.g t).
Notation g1 := (@common.g1 t).
Lemma Fscalemx_mixed_error:
∀ [m n] (a: ftype t) (v: 'M[ftype t]_(m,n))
(Hfin: F.finitemx (F.scalemx a v)),
let vr:= map_mx FT2R v in
∃ (e eta: 'M[R]_(m,n)),
map_mx FT2R (F.scalemx a v) = (scalemx (FT2R a) (vr + e) + eta)%Ri
∧ (∀ i j, ∃ d, e i j = vr i j × d ∧ Rabs d ≤ @default_rel t)
∧ (∀ i j, Rabs (eta i j) ≤ @default_abs t).
Lemma Faddmx_mixed_error :
∀ [m n] (A B: 'M[ftype t]_(m,n))
(Hfin: F.finitemx (F.addmx A B)),
let Ar:= map_mx FT2R A in
let Br:= map_mx FT2R B in
∃ (e1 e2 : 'M[R]_(m,n)),
map_mx FT2R (F.addmx A B) = ((Ar + e1) + (Br + e2))%Ri
∧ (∀ i j, ∃ d, e1 i j = Ar i j × d ∧ Rabs d ≤ @default_rel t)
∧ (∀ i j, ∃ d, e2 i j = Br i j × d ∧ Rabs d ≤ @default_rel t).
Lemma Smat_sumF_mixed_error :
∀ [m n] (u v: 'M[ftype t]_(m,n)) (a b : ftype t)
(Hfin : F.finitemx (F.addmx (F.scalemx a u) (F.scalemx b v))),
let vr:= map_mx FT2R v in
let ur:= map_mx FT2R u in
∃ (e1 e2 e3 e4 e5 e6: 'M[R]_(m,n)),
map_mx FT2R (F.addmx (F.scalemx a u) (F.scalemx b v)) =
((scalemx (FT2R a) (ur + e1) + e2 + e3) +
(scalemx (FT2R b) (vr + e4) + e5 + e6))%Ri
∧ (∀ i j, ∃ d, e1 i j = ur i j × d ∧ Rabs d ≤ @default_rel t)
∧ (∀ i j, ∃ d, e4 i j = vr i j × d ∧ Rabs d ≤ @default_rel t)
∧ (∀ i j, ∃ d, e3 i j = (scalemx (FT2R a) (ur + e1) + e2) i j × d ∧ Rabs d ≤ @default_rel t)%Ri
∧ (∀ i j, ∃ d, e6 i j = (scalemx (FT2R b) (vr + e4) + e5) i j × d ∧ Rabs d ≤ @default_rel t)%Ri
∧ (∀ i j, Rabs (e5 i j) ≤ @default_abs t)
∧ (∀ i j, Rabs (e2 i j) ≤ @default_abs t).
Lemma Smat_vec_mul_mixed_error:
∀ [m n] (b: ftype t) (A: 'M[ftype t]_(m,n)) (B: 'M[ftype t]_(n,1))
(Hfin: F.finitemx (F.scalemx b (F.mulmx A B))),
∃ (E : 'M[R]_(m,n)) (e eta1 eta2 : 'M[R]_(m,1)),
map_mx FT2R (F.scalemx b (F.mulmx A B)) =
(scalemx (FT2R b) ((map_mx FT2R A + E) ×m (map_mx FT2R B) + eta1 + e) + eta2 )%Ri
∧ (∀ i j, Rabs (E i j) ≤ g n × Rabs (map_mx FT2R A i j))
∧ (∀ i j, Rabs (eta2 i j) ≤ @default_abs t)
∧ (∀ i j, ∃ d, e i j = FT2R (F.mulmx A B i j) × d ∧ Rabs d ≤ @default_rel t)
∧ (∀ i j, Rabs (eta1 i j) ≤ g1 n n).
Lemma gemv_error:
∀ [m n] (A: 'M[ftype t]_(m,n)) (x: 'cV[ftype t]_n) (y: 'cV[ftype t]_m) (s1 s2: ftype t)
(Hfin: F.finitemx (F.addmx (F.scalemx s1 (F.mulmx A x)) (F.scalemx s2 y))),
∃ e1 e2 e3 e4 e5 e6 e7 e8,
map_mx FT2R (F.addmx (F.scalemx s1 (F.mulmx A x)) (F.scalemx s2 y)) =
((scalemx (FT2R s1) ((((map_mx FT2R A + e1) ×m (map_mx FT2R x)) + e2) + e3) + e4) + e5) +
((scalemx (FT2R s2) (map_mx FT2R y + e6) + e7) + e8)
∧ (∀ i j, Rabs (e1 i j) ≤ g n × Rabs (map_mx FT2R A i j))
∧ (∀ i j, Rabs (e2 i j) ≤ g1 n n)
∧ (∀ i j, ∃ d, e3 i j = (((map_mx FT2R A + e1) ×m map_mx FT2R x) + e2)%Ri i j × d ∧ Rabs d ≤ @default_rel t)
∧ (∀ i j, ∃ d, e6 i j = map_mx FT2R y i j × d ∧ Rabs d ≤ @default_rel t)
∧ (∀ i j, ∃ d, e5 i j = (scalemx (FT2R s1) ((((map_mx FT2R A + e1) ×m map_mx FT2R x) + e2) + e3) + e4) i j × d
∧ Rabs d ≤ @default_rel t)
∧ (∀ i j, ∃ d, e8 i j = (scalemx (FT2R s2) (map_mx FT2R y + e6) + e7) i j × d ∧ Rabs d ≤ @default_rel t)
∧ (∀ i j, Rabs (e7 i j) ≤ @default_abs t)
∧ (∀ i j, Rabs (e4 i j) ≤ @default_abs t).
End WithNans.
dotprod_model sum_model dot_acc float_acc_lems mv_mathcomp gemv_acc.
Section WithNans.
Context {NAN: FPCore.Nans} {t : FPStdLib.type}.
Notation g := (@common.g t).
Notation g1 := (@common.g1 t).
Lemma Fscalemx_mixed_error:
∀ [m n] (a: ftype t) (v: 'M[ftype t]_(m,n))
(Hfin: F.finitemx (F.scalemx a v)),
let vr:= map_mx FT2R v in
∃ (e eta: 'M[R]_(m,n)),
map_mx FT2R (F.scalemx a v) = (scalemx (FT2R a) (vr + e) + eta)%Ri
∧ (∀ i j, ∃ d, e i j = vr i j × d ∧ Rabs d ≤ @default_rel t)
∧ (∀ i j, Rabs (eta i j) ≤ @default_abs t).
Lemma Faddmx_mixed_error :
∀ [m n] (A B: 'M[ftype t]_(m,n))
(Hfin: F.finitemx (F.addmx A B)),
let Ar:= map_mx FT2R A in
let Br:= map_mx FT2R B in
∃ (e1 e2 : 'M[R]_(m,n)),
map_mx FT2R (F.addmx A B) = ((Ar + e1) + (Br + e2))%Ri
∧ (∀ i j, ∃ d, e1 i j = Ar i j × d ∧ Rabs d ≤ @default_rel t)
∧ (∀ i j, ∃ d, e2 i j = Br i j × d ∧ Rabs d ≤ @default_rel t).
Lemma Smat_sumF_mixed_error :
∀ [m n] (u v: 'M[ftype t]_(m,n)) (a b : ftype t)
(Hfin : F.finitemx (F.addmx (F.scalemx a u) (F.scalemx b v))),
let vr:= map_mx FT2R v in
let ur:= map_mx FT2R u in
∃ (e1 e2 e3 e4 e5 e6: 'M[R]_(m,n)),
map_mx FT2R (F.addmx (F.scalemx a u) (F.scalemx b v)) =
((scalemx (FT2R a) (ur + e1) + e2 + e3) +
(scalemx (FT2R b) (vr + e4) + e5 + e6))%Ri
∧ (∀ i j, ∃ d, e1 i j = ur i j × d ∧ Rabs d ≤ @default_rel t)
∧ (∀ i j, ∃ d, e4 i j = vr i j × d ∧ Rabs d ≤ @default_rel t)
∧ (∀ i j, ∃ d, e3 i j = (scalemx (FT2R a) (ur + e1) + e2) i j × d ∧ Rabs d ≤ @default_rel t)%Ri
∧ (∀ i j, ∃ d, e6 i j = (scalemx (FT2R b) (vr + e4) + e5) i j × d ∧ Rabs d ≤ @default_rel t)%Ri
∧ (∀ i j, Rabs (e5 i j) ≤ @default_abs t)
∧ (∀ i j, Rabs (e2 i j) ≤ @default_abs t).
Lemma Smat_vec_mul_mixed_error:
∀ [m n] (b: ftype t) (A: 'M[ftype t]_(m,n)) (B: 'M[ftype t]_(n,1))
(Hfin: F.finitemx (F.scalemx b (F.mulmx A B))),
∃ (E : 'M[R]_(m,n)) (e eta1 eta2 : 'M[R]_(m,1)),
map_mx FT2R (F.scalemx b (F.mulmx A B)) =
(scalemx (FT2R b) ((map_mx FT2R A + E) ×m (map_mx FT2R B) + eta1 + e) + eta2 )%Ri
∧ (∀ i j, Rabs (E i j) ≤ g n × Rabs (map_mx FT2R A i j))
∧ (∀ i j, Rabs (eta2 i j) ≤ @default_abs t)
∧ (∀ i j, ∃ d, e i j = FT2R (F.mulmx A B i j) × d ∧ Rabs d ≤ @default_rel t)
∧ (∀ i j, Rabs (eta1 i j) ≤ g1 n n).
Lemma gemv_error:
∀ [m n] (A: 'M[ftype t]_(m,n)) (x: 'cV[ftype t]_n) (y: 'cV[ftype t]_m) (s1 s2: ftype t)
(Hfin: F.finitemx (F.addmx (F.scalemx s1 (F.mulmx A x)) (F.scalemx s2 y))),
∃ e1 e2 e3 e4 e5 e6 e7 e8,
map_mx FT2R (F.addmx (F.scalemx s1 (F.mulmx A x)) (F.scalemx s2 y)) =
((scalemx (FT2R s1) ((((map_mx FT2R A + e1) ×m (map_mx FT2R x)) + e2) + e3) + e4) + e5) +
((scalemx (FT2R s2) (map_mx FT2R y + e6) + e7) + e8)
∧ (∀ i j, Rabs (e1 i j) ≤ g n × Rabs (map_mx FT2R A i j))
∧ (∀ i j, Rabs (e2 i j) ≤ g1 n n)
∧ (∀ i j, ∃ d, e3 i j = (((map_mx FT2R A + e1) ×m map_mx FT2R x) + e2)%Ri i j × d ∧ Rabs d ≤ @default_rel t)
∧ (∀ i j, ∃ d, e6 i j = map_mx FT2R y i j × d ∧ Rabs d ≤ @default_rel t)
∧ (∀ i j, ∃ d, e5 i j = (scalemx (FT2R s1) ((((map_mx FT2R A + e1) ×m map_mx FT2R x) + e2) + e3) + e4) i j × d
∧ Rabs d ≤ @default_rel t)
∧ (∀ i j, ∃ d, e8 i j = (scalemx (FT2R s2) (map_mx FT2R y + e6) + e7) i j × d ∧ Rabs d ≤ @default_rel t)
∧ (∀ i j, Rabs (e7 i j) ≤ @default_abs t)
∧ (∀ i j, Rabs (e4 i j) ≤ @default_abs t).
End WithNans.