Step
*
2
1
1
2
2
1
1
of Lemma
satisfies-gcd-reduce-eq-constraints
1. n : ℕ+
2. xs : {L:ℤ List| ||L|| = n ∈ ℤ} 
3. 0 < ||xs|| ∧ (hd(xs) = 1 ∈ ℤ)
4. u : ℤ
5. [%4] : 1 = n ∈ ℤ
6. v : {L:ℤ List| ||L|| = n ∈ ℤ}  List
7. ∀sat:{L:ℤ List| ||L|| = n ∈ ℤ}  List
     ((↑isl(gcd-reduce-eq-constraints(sat;v)))
     
⇒ (∀as∈outl(gcd-reduce-eq-constraints(sat;v)).xs ⋅ as =0)
     
⇒ (∀as∈v.xs ⋅ as =0))
8. sat : {L:ℤ List| ||L|| = n ∈ ℤ}  List
⊢ (↑isl(let s' ⟵ if u=0 then inl [[u] / sat] else (inr ⋅ )
        in accumulate_abort(L,Ls.let h,t = L 
                                 in if t = Ax then if h=0 then inl [L / Ls] else (inr ⋅ )
                                    otherwise eval g = |gcd-list(t)| in
                                              if (1) < (g)
                                                 then if h rem g=0
                                                      then eval L' = eager-map(λx.(x ÷ g);L) in
                                                           inl [L' / Ls]
                                                      else (inr ⋅ )
                                                 else (inl [L / Ls]);s';v)))
⇒ (∀as∈outl(let s' ⟵ if u=0 then inl [[u] / sat] else (inr ⋅ )
             in accumulate_abort(L,Ls.let h,t = L 
                                      in if t = Ax then if h=0 then inl [L / Ls] else (inr ⋅ )
                                         otherwise eval g = |gcd-list(t)| in
                                                   if (1) < (g)
                                                      then if h rem g=0
                                                           then eval L' = eager-map(λx.(x ÷ g);L) in
                                                                inl [L' / Ls]
                                                           else (inr ⋅ )
                                                      else (inl [L / Ls]);s';v)).xs ⋅ as =0)
⇒ (∀as∈[[u] / v].xs ⋅ as =0)
BY
{ (((Decide u = 0 ∈ ℤ THENA Auto) THEN Reduce 0)
   THEN (((CallByValueReduce 0 THENA Auto) THEN Fold `gcd-reduce-eq-constraints` 0)
        ORELSE ((RWO "accumulate_abort-aborted" 0 THENA Auto) THEN Reduce 0 THEN Auto)
        )
   ) }
1
1. n : ℕ+
2. xs : {L:ℤ List| ||L|| = n ∈ ℤ} 
3. 0 < ||xs|| ∧ (hd(xs) = 1 ∈ ℤ)
4. u : ℤ
5. [%4] : 1 = n ∈ ℤ
6. v : {L:ℤ List| ||L|| = n ∈ ℤ}  List
7. ∀sat:{L:ℤ List| ||L|| = n ∈ ℤ}  List
     ((↑isl(gcd-reduce-eq-constraints(sat;v)))
     
⇒ (∀as∈outl(gcd-reduce-eq-constraints(sat;v)).xs ⋅ as =0)
     
⇒ (∀as∈v.xs ⋅ as =0))
8. sat : {L:ℤ List| ||L|| = n ∈ ℤ}  List
9. u = 0 ∈ ℤ
⊢ (↑isl(gcd-reduce-eq-constraints([[u] / sat];v)))
⇒ (∀as∈outl(gcd-reduce-eq-constraints([[u] / sat];v)).xs ⋅ as =0)
⇒ (∀as∈[[u] / v].xs ⋅ as =0)
Latex:
Latex:
1.  n  :  \mBbbN{}\msupplus{}
2.  xs  :  \{L:\mBbbZ{}  List|  ||L||  =  n\} 
3.  0  <  ||xs||  \mwedge{}  (hd(xs)  =  1)
4.  u  :  \mBbbZ{}
5.  [\%4]  :  1  =  n
6.  v  :  \{L:\mBbbZ{}  List|  ||L||  =  n\}    List
7.  \mforall{}sat:\{L:\mBbbZ{}  List|  ||L||  =  n\}    List
          ((\muparrow{}isl(gcd-reduce-eq-constraints(sat;v)))
          {}\mRightarrow{}  (\mforall{}as\mmember{}outl(gcd-reduce-eq-constraints(sat;v)).xs  \mcdot{}  as  =0)
          {}\mRightarrow{}  (\mforall{}as\mmember{}v.xs  \mcdot{}  as  =0))
8.  sat  :  \{L:\mBbbZ{}  List|  ||L||  =  n\}    List
\mvdash{}  (\muparrow{}isl(let  s'  \mleftarrow{}{}  if  u=0  then  inl  [[u]  /  sat]  else  (inr  \mcdot{}  )
                in  accumulate\_abort(L,Ls.let  h,t  =  L 
                                                                  in  if  t  =  Ax  then  if  h=0  then  inl  [L  /  Ls]  else  (inr  \mcdot{}  )
                                                                        otherwise  eval  g  =  |gcd-list(t)|  in
                                                                                            if  (1)  <  (g)
                                                                                                  then  if  h  rem  g=0
                                                                                                            then  eval  L'  =  eager-map(\mlambda{}x.(x  \mdiv{}  g);L)  in
                                                                                                                      inl  [L'  /  Ls]
                                                                                                            else  (inr  \mcdot{}  )
                                                                                                  else  (inl  [L  /  Ls]);s';v)))
{}\mRightarrow{}  (\mforall{}as\mmember{}outl(let  s'  \mleftarrow{}{}  if  u=0  then  inl  [[u]  /  sat]  else  (inr  \mcdot{}  )
                          in  accumulate\_abort(L,Ls.let  h,t  =  L 
                                                                            in  if  t  =  Ax  then  if  h=0  then  inl  [L  /  Ls]  else  (inr  \mcdot{}  )
                                                                                  otherwise  eval  g  =  |gcd-list(t)|  in
                                                                                                      if  (1)  <  (g)
                                                                                                            then  if  h  rem  g=0
                                                                                                                      then  eval  L'  =  eager-map(\mlambda{}x.(x  \mdiv{}  g);L)  in
                                                                                                                                inl  [L'  /  Ls]
                                                                                                                      else  (inr  \mcdot{}  )
                                                                                                            else  (inl  [L  /  Ls]);s';v)).xs  \mcdot{}  as  =0)
{}\mRightarrow{}  (\mforall{}as\mmember{}[[u]  /  v].xs  \mcdot{}  as  =0)
By
Latex:
(((Decide  u  =  0  THENA  Auto)  THEN  Reduce  0)
  THEN  (((CallByValueReduce  0  THENA  Auto)  THEN  Fold  `gcd-reduce-eq-constraints`  0)
            ORELSE  ((RWO  "accumulate\_abort-aborted"  0  THENA  Auto)  THEN  Reduce  0  THEN  Auto)
            )
  )
Home
Index