Step
*
1
of Lemma
member-gcd-reduce-constraints
1. n : ℕ+
2. u : {L:ℤ List| ||L|| = n ∈ ℤ} 
3. v : {L:ℤ List| ||L|| = n ∈ ℤ}  List
4. ∀sat:{L:ℤ List| ||L|| = n ∈ ℤ}  List. ∀cc:{L:ℤ List| ||L|| = n ∈ ℤ} .
     ((↑isl(gcd-reduce-eq-constraints(sat;v))) 
⇒ (cc ∈ sat) 
⇒ (cc ∈ outl(gcd-reduce-eq-constraints(sat;v))))
⊢ ∀sat:{L:ℤ List| ||L|| = n ∈ ℤ}  List. ∀cc:{L:ℤ List| ||L|| = n ∈ ℤ} .
    ((↑isl(let s' ⟵ let h,t = u 
                     in if t = Ax then if h=0 then inl [u / sat] 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);u) in
                                               inl [L' / sat]
                                          else (inr ⋅ )
                                     else (inl [u / sat])
           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)))
    
⇒ (cc ∈ sat)
    
⇒ (cc ∈ outl(let s' ⟵ let h,t = u 
                            in if t = Ax then if h=0 then inl [u / sat] 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);u) in
                                                      inl [L' / sat]
                                                 else (inr ⋅ )
                                            else (inl [u / sat])
                  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))))
BY
{ RepeatFor 2 (DVar `u') }
1
1. n : ℕ+
2. [%2] : ||[]|| = n ∈ ℤ
3. v : {L:ℤ List| ||L|| = n ∈ ℤ}  List
4. ∀sat:{L:ℤ List| ||L|| = n ∈ ℤ}  List. ∀cc:{L:ℤ List| ||L|| = n ∈ ℤ} .
     ((↑isl(gcd-reduce-eq-constraints(sat;v))) 
⇒ (cc ∈ sat) 
⇒ (cc ∈ outl(gcd-reduce-eq-constraints(sat;v))))
⊢ ∀sat:{L:ℤ List| ||L|| = n ∈ ℤ}  List. ∀cc:{L:ℤ List| ||L|| = n ∈ ℤ} .
    ((↑isl(let s' ⟵ let h,t = [] 
                     in if t = Ax then if h=0 then inl [[] / sat] 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);[]) in
                                               inl [L' / sat]
                                          else (inr ⋅ )
                                     else (inl [[] / sat])
           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)))
    
⇒ (cc ∈ sat)
    
⇒ (cc ∈ outl(let s' ⟵ let h,t = [] 
                            in if t = Ax then if h=0 then inl [[] / sat] 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);[]) in
                                                      inl [L' / sat]
                                                 else (inr ⋅ )
                                            else (inl [[] / sat])
                  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))))
2
1. n : ℕ+
2. u : ℤ
3. v1 : ℤ List
4. [%2] : ||[u / v1]|| = n ∈ ℤ
5. v : {L:ℤ List| ||L|| = n ∈ ℤ}  List
6. ∀sat:{L:ℤ List| ||L|| = n ∈ ℤ}  List. ∀cc:{L:ℤ List| ||L|| = n ∈ ℤ} .
     ((↑isl(gcd-reduce-eq-constraints(sat;v))) 
⇒ (cc ∈ sat) 
⇒ (cc ∈ outl(gcd-reduce-eq-constraints(sat;v))))
⊢ ∀sat:{L:ℤ List| ||L|| = n ∈ ℤ}  List. ∀cc:{L:ℤ List| ||L|| = n ∈ ℤ} .
    ((↑isl(let s' ⟵ let h,t = [u / v1] 
                     in if t = Ax then if h=0 then inl [[u / v1] / sat] 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);[u / v1]) in
                                               inl [L' / sat]
                                          else (inr ⋅ )
                                     else (inl [[u / v1] / sat])
           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)))
    
⇒ (cc ∈ sat)
    
⇒ (cc ∈ outl(let s' ⟵ let h,t = [u / v1] 
                            in if t = Ax then if h=0 then inl [[u / v1] / sat] 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);[u / v1]) in
                                                      inl [L' / sat]
                                                 else (inr ⋅ )
                                            else (inl [[u / v1] / sat])
                  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))))
Latex:
Latex:
1.  n  :  \mBbbN{}\msupplus{}
2.  u  :  \{L:\mBbbZ{}  List|  ||L||  =  n\} 
3.  v  :  \{L:\mBbbZ{}  List|  ||L||  =  n\}    List
4.  \mforall{}sat:\{L:\mBbbZ{}  List|  ||L||  =  n\}    List.  \mforall{}cc:\{L:\mBbbZ{}  List|  ||L||  =  n\}  .
          ((\muparrow{}isl(gcd-reduce-eq-constraints(sat;v)))
          {}\mRightarrow{}  (cc  \mmember{}  sat)
          {}\mRightarrow{}  (cc  \mmember{}  outl(gcd-reduce-eq-constraints(sat;v))))
\mvdash{}  \mforall{}sat:\{L:\mBbbZ{}  List|  ||L||  =  n\}    List.  \mforall{}cc:\{L:\mBbbZ{}  List|  ||L||  =  n\}  .
        ((\muparrow{}isl(let  s'  \mleftarrow{}{}  let  h,t  =  u 
                                          in  if  t  =  Ax  then  if  h=0  then  inl  [u  /  sat]  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);u)  in
                                                                                              inl  [L'  /  sat]
                                                                                    else  (inr  \mcdot{}  )
                                                                          else  (inl  [u  /  sat])
                      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{}  (cc  \mmember{}  sat)
        {}\mRightarrow{}  (cc
                  \mmember{}  outl(let  s'  \mleftarrow{}{}  let  h,t  =  u 
                                                    in  if  t  =  Ax  then  if  h=0  then  inl  [u  /  sat]  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);u)  in
                                                                                                        inl  [L'  /  sat]
                                                                                              else  (inr  \mcdot{}  )
                                                                                    else  (inl  [u  /  sat])
                                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(...;L)  in
                                                                                                                                      inl  [L'  /  Ls]
                                                                                                                            else  (inr  \mcdot{}  )
                                                                                                                  else  (inl  [L  /  Ls]);s';v))))
By
Latex:
RepeatFor  2  (DVar  `u')
Home
Index