Step * 1 1 of Lemma alpha-rename-alist-property

.....assertion..... 
1. [opr] Type
2. term(opr)
3. varname() List
⊢ (L all-vars(t) ⊆ fst(accumulate (with value and list item x):
                          let vs,tab 
                          in eval x' maybe_new_var(x;vs) in
                             <[x' vs], [<x, x'> tab]>
                         over list:
                           L
                         with starting value:
                          <all-vars(t), []>))
  ∧ (∀x,x':varname().
       ((<x, x'> ∈ snd(accumulate (with value and list item x):
                        let vs,tab 
                        in eval x' maybe_new_var(x;vs) in
                           <[x' vs], [<x, x'> tab]>
                       over list:
                         L
                       with starting value:
                        <all-vars(t), []>)))
        (x' ∈ fst(accumulate (with value and list item x):
                     let vs,tab 
                     in eval x' maybe_new_var(x;vs) in
                        <[x' vs], [<x, x'> tab]>
                    over list:
                      L
                    with starting value:
                     <all-vars(t), []>))))))
∧ (∀x,x':varname().
     ((<x, x'> ∈ snd(accumulate (with value and list item x):
                      let vs,tab 
                      in eval x' maybe_new_var(x;vs) in
                         <[x' vs], [<x, x'> tab]>
                     over list:
                       L
                     with starting value:
                      <all-vars(t), []>)))
      ((x ∈ L) ∧ (x' ∈ all-vars(t))))))
∧ (∀x,x',y,y':varname().
     ((<x, x'> ∈ snd(accumulate (with value and list item x):
                      let vs,tab 
                      in eval x' maybe_new_var(x;vs) in
                         <[x' vs], [<x, x'> tab]>
                     over list:
                       L
                     with starting value:
                      <all-vars(t), []>)))
      (<y, y'> ∈ snd(accumulate (with value and list item x):
                        let vs,tab 
                        in eval x' maybe_new_var(x;vs) in
                           <[x' vs], [<x, x'> tab]>
                       over list:
                         L
                       with starting value:
                        <all-vars(t), []>)))
      (x' y' ∈ varname())
      (x y ∈ varname())))
BY
(ProveListAccumInvWithType ⌜varname() List × ((varname() × varname()) List)⌝⋅
   THEN Try (Complete (Auto))
   THEN Intros
   THEN 0
   THEN Reduce 0
   THEN Try (Complete (Auto))
   THEN DVar `a'
   THEN Reduce 0
   THEN (GenConcl ⌜maybe_new_var(x;a1) x' ∈ varname()⌝⋅ THENA Auto)
   THEN (CallByValueReduce THENA Auto)
   THEN All Reduce
   THEN SplitAndConcl
   THEN (Complete (EAuto 1)
   ORELSE (Intros THEN SplitAndHyps THEN (GenListD (-1) ORELSE GenListD (-2)) THEN SplitOrHyps)
   )) }

1
1. [opr] Type
2. term(opr)
3. varname() List
4. a1 varname() List
5. a2 (varname() × varname()) List
6. varname()
7. (x ∈ L)
8. all-vars(t) ⊆ a1
9. ∀x,x':varname().  ((<x, x'> ∈ a2)  (x' ∈ a1))
10. ∀x,x':varname().  ((<x, x'> ∈ a2)  ((x ∈ L) ∧ (x' ∈ all-vars(t)))))
11. ∀x,x',y,y':varname().  ((<x, x'> ∈ a2)  (<y, y'> ∈ a2)  (x' y' ∈ varname())  (x y ∈ varname()))
12. x' varname()
13. maybe_new_var(x;a1) x' ∈ varname()
14. x@0 varname()
15. x'@0 varname()
16. <x@0, x'@0> = <x, x'> ∈ (varname() × varname())
⊢ (x'@0 ∈ [x' a1])

2
1. [opr] Type
2. term(opr)
3. varname() List
4. a1 varname() List
5. a2 (varname() × varname()) List
6. varname()
7. (x ∈ L)
8. all-vars(t) ⊆ a1
9. ∀x,x':varname().  ((<x, x'> ∈ a2)  (x' ∈ a1))
10. ∀x,x':varname().  ((<x, x'> ∈ a2)  ((x ∈ L) ∧ (x' ∈ all-vars(t)))))
11. ∀x,x',y,y':varname().  ((<x, x'> ∈ a2)  (<y, y'> ∈ a2)  (x' y' ∈ varname())  (x y ∈ varname()))
12. x' varname()
13. maybe_new_var(x;a1) x' ∈ varname()
14. x@0 varname()
15. x'@0 varname()
16. (<x@0, x'@0> ∈ a2)
⊢ (x'@0 ∈ [x' a1])

3
1. [opr] Type
2. term(opr)
3. varname() List
4. a1 varname() List
5. a2 (varname() × varname()) List
6. varname()
7. (x ∈ L)
8. all-vars(t) ⊆ a1
9. ∀x,x':varname().  ((<x, x'> ∈ a2)  (x' ∈ a1))
10. ∀x,x':varname().  ((<x, x'> ∈ a2)  ((x ∈ L) ∧ (x' ∈ all-vars(t)))))
11. ∀x,x',y,y':varname().  ((<x, x'> ∈ a2)  (<y, y'> ∈ a2)  (x' y' ∈ varname())  (x y ∈ varname()))
12. x' varname()
13. maybe_new_var(x;a1) x' ∈ varname()
14. x@0 varname()
15. x'@0 varname()
16. <x@0, x'@0> = <x, x'> ∈ (varname() × varname())
⊢ (x@0 ∈ L) ∧ (x'@0 ∈ all-vars(t)))

4
1. [opr] Type
2. term(opr)
3. varname() List
4. a1 varname() List
5. a2 (varname() × varname()) List
6. varname()
7. (x ∈ L)
8. all-vars(t) ⊆ a1
9. ∀x,x':varname().  ((<x, x'> ∈ a2)  (x' ∈ a1))
10. ∀x,x':varname().  ((<x, x'> ∈ a2)  ((x ∈ L) ∧ (x' ∈ all-vars(t)))))
11. ∀x,x',y,y':varname().  ((<x, x'> ∈ a2)  (<y, y'> ∈ a2)  (x' y' ∈ varname())  (x y ∈ varname()))
12. x' varname()
13. maybe_new_var(x;a1) x' ∈ varname()
14. x@0 varname()
15. x'@0 varname()
16. (<x@0, x'@0> ∈ a2)
⊢ (x@0 ∈ L) ∧ (x'@0 ∈ all-vars(t)))

5
1. opr Type
2. term(opr)
3. varname() List
4. a1 varname() List
5. a2 (varname() × varname()) List
6. varname()
7. (x ∈ L)
8. all-vars(t) ⊆ a1
9. ∀x,x':varname().  ((<x, x'> ∈ a2)  (x' ∈ a1))
10. ∀x,x':varname().  ((<x, x'> ∈ a2)  ((x ∈ L) ∧ (x' ∈ all-vars(t)))))
11. ∀x,x',y,y':varname().  ((<x, x'> ∈ a2)  (<y, y'> ∈ a2)  (x' y' ∈ varname())  (x y ∈ varname()))
12. x' varname()
13. maybe_new_var(x;a1) x' ∈ varname()
14. x@0 varname()
15. x'@0 varname()
16. varname()
17. y' varname()
18. (<x@0, x'@0> ∈ [<x, x'> a2])
19. <y, y'> = <x, x'> ∈ (varname() × varname())
20. x'@0 y' ∈ varname()
⊢ x@0 y ∈ varname()

6
1. opr Type
2. term(opr)
3. varname() List
4. a1 varname() List
5. a2 (varname() × varname()) List
6. varname()
7. (x ∈ L)
8. all-vars(t) ⊆ a1
9. ∀x,x':varname().  ((<x, x'> ∈ a2)  (x' ∈ a1))
10. ∀x,x':varname().  ((<x, x'> ∈ a2)  ((x ∈ L) ∧ (x' ∈ all-vars(t)))))
11. ∀x,x',y,y':varname().  ((<x, x'> ∈ a2)  (<y, y'> ∈ a2)  (x' y' ∈ varname())  (x y ∈ varname()))
12. x' varname()
13. maybe_new_var(x;a1) x' ∈ varname()
14. x@0 varname()
15. x'@0 varname()
16. varname()
17. y' varname()
18. (<x@0, x'@0> ∈ [<x, x'> a2])
19. (<y, y'> ∈ a2)
20. x'@0 y' ∈ varname()
⊢ x@0 y ∈ varname()


Latex:


Latex:
.....assertion..... 
1.  [opr]  :  Type
2.  t  :  term(opr)
3.  L  :  varname()  List
\mvdash{}  (L  @  all-vars(t)  \msubseteq{}  fst(accumulate  (with  value  p  and  list  item  x):
                                                    let  vs,tab  =  p 
                                                    in  eval  x'  =  maybe\_new\_var(x;vs)  in
                                                          <[x'  /  vs],  [<x,  x'>  /  tab]>
                                                  over  list:
                                                      L
                                                  with  starting  value:
                                                    <L  @  all-vars(t),  []>))
    \mwedge{}  (\mforall{}x,x':varname().
              ((<x,  x'>  \mmember{}  snd(accumulate  (with  value  p  and  list  item  x):
                                                let  vs,tab  =  p 
                                                in  eval  x'  =  maybe\_new\_var(x;vs)  in
                                                      <[x'  /  vs],  [<x,  x'>  /  tab]>
                                              over  list:
                                                  L
                                              with  starting  value:
                                                <L  @  all-vars(t),  []>)))
              {}\mRightarrow{}  (x'  \mmember{}  fst(accumulate  (with  value  p  and  list  item  x):
                                          let  vs,tab  =  p 
                                          in  eval  x'  =  maybe\_new\_var(x;vs)  in
                                                <[x'  /  vs],  [<x,  x'>  /  tab]>
                                        over  list:
                                            L
                                        with  starting  value:
                                          <L  @  all-vars(t),  []>))))))
\mwedge{}  (\mforall{}x,x':varname().
          ((<x,  x'>  \mmember{}  snd(accumulate  (with  value  p  and  list  item  x):
                                            let  vs,tab  =  p 
                                            in  eval  x'  =  maybe\_new\_var(x;vs)  in
                                                  <[x'  /  vs],  [<x,  x'>  /  tab]>
                                          over  list:
                                              L
                                          with  starting  value:
                                            <L  @  all-vars(t),  []>)))
          {}\mRightarrow{}  ((x  \mmember{}  L)  \mwedge{}  (\mneg{}(x'  \mmember{}  L  @  all-vars(t))))))
\mwedge{}  (\mforall{}x,x',y,y':varname().
          ((<x,  x'>  \mmember{}  snd(accumulate  (with  value  p  and  list  item  x):
                                            let  vs,tab  =  p 
                                            in  eval  x'  =  maybe\_new\_var(x;vs)  in
                                                  <[x'  /  vs],  [<x,  x'>  /  tab]>
                                          over  list:
                                              L
                                          with  starting  value:
                                            <L  @  all-vars(t),  []>)))
          {}\mRightarrow{}  (<y,  y'>  \mmember{}  snd(accumulate  (with  value  p  and  list  item  x):
                                                let  vs,tab  =  p 
                                                in  eval  x'  =  maybe\_new\_var(x;vs)  in
                                                      <[x'  /  vs],  [<x,  x'>  /  tab]>
                                              over  list:
                                                  L
                                              with  starting  value:
                                                <L  @  all-vars(t),  []>)))
          {}\mRightarrow{}  (x'  =  y')
          {}\mRightarrow{}  (x  =  y)))


By


Latex:
(ProveListAccumInvWithType  \mkleeneopen{}varname()  List  \mtimes{}  ((varname()  \mtimes{}  varname())  List)\mkleeneclose{}\mcdot{}
  THEN  Try  (Complete  (Auto))
  THEN  Intros
  THEN  D  0
  THEN  Reduce  0
  THEN  Try  (Complete  (Auto))
  THEN  DVar  `a'
  THEN  Reduce  0
  THEN  (GenConcl  \mkleeneopen{}maybe\_new\_var(x;a1)  =  x'\mkleeneclose{}\mcdot{}  THENA  Auto)
  THEN  (CallByValueReduce  0  THENA  Auto)
  THEN  All  Reduce
  THEN  SplitAndConcl
  THEN  (Complete  (EAuto  1)
  ORELSE  (Intros  THEN  SplitAndHyps  THEN  (GenListD  (-1)  ORELSE  GenListD  (-2))  THEN  SplitOrHyps)
  ))




Home Index