Step * 1 of Lemma alpha-rename-binders-disjoint


1. [opr] Type
2. varname() List
3. bts bound-term(opr) List
4. ∀bt:bound-term(opr)
     ((bt ∈ bts)
      (∀bnds:varname() List. ∀f:{v:varname()| (v ∈ bnds all-vars(snd(bt)))}  ⟶ varname().
           ((∀x:{v:varname()| (v ∈ bnds all-vars(snd(bt)))} 
               ((((f x) nullvar() ∈ varname())  (x nullvar() ∈ varname())) ∧ (f x ∈ L))))
            binders-disjoint(opr;L;alpha-rename-aux(f;bnds;snd(bt))))))
5. opr
6. bnds varname() List
7. f@0 {v:varname()| (v ∈ bnds all-vars(mkterm(f;bts)))}  ⟶ varname()
8. ∀x:{v:varname()| (v ∈ bnds all-vars(mkterm(f;bts)))} 
     ((((f@0 x) nullvar() ∈ varname())  (x nullvar() ∈ varname())) ∧ (f@0 x ∈ L)))
⊢ binders-disjoint(opr;L;eval bts' eager-map(λbt.let vs,a bt 
                                                   in <map(f@0;vs), alpha-rename-aux(f@0;rev(vs) bnds;a)>;bts) in
                         mkterm(f;bts'))
BY
((Assert bts ∈ {bt:varname() List × term(opr)| (bt ∈ bts)}  List BY
          Auto)
   THEN (Assert λbt.let vs,a bt 
                    in <map(f@0;vs), alpha-rename-aux(f@0;rev(vs) bnds;a)> ∈ {bt:varname() List × term(opr)| 
                                                                                (bt ∈ bts)}  ⟶ bound-term(opr) BY
               (MemCD THENL [(D -1 THEN -2 THEN Reduce THEN Unfold `bound-term` THEN MemCD); Auto]))
   }

1
.....aux..... 
1. opr Type
2. varname() List
3. bts bound-term(opr) List
4. ∀bt:bound-term(opr)
     ((bt ∈ bts)
      (∀bnds:varname() List. ∀f:{v:varname()| (v ∈ bnds all-vars(snd(bt)))}  ⟶ varname().
           ((∀x:{v:varname()| (v ∈ bnds all-vars(snd(bt)))} 
               ((((f x) nullvar() ∈ varname())  (x nullvar() ∈ varname())) ∧ (f x ∈ L))))
            binders-disjoint(opr;L;alpha-rename-aux(f;bnds;snd(bt))))))
5. opr
6. bnds varname() List
7. f@0 {v:varname()| (v ∈ bnds all-vars(mkterm(f;bts)))}  ⟶ varname()
8. ∀x:{v:varname()| (v ∈ bnds all-vars(mkterm(f;bts)))} 
     ((((f@0 x) nullvar() ∈ varname())  (x nullvar() ∈ varname())) ∧ (f@0 x ∈ L)))
9. bts ∈ {bt:varname() List × term(opr)| (bt ∈ bts)}  List
10. b1 varname() List
11. b2 term(opr)
12. (<b1, b2> ∈ bts)
⊢ map(f@0;b1) ∈ varname() List

2
.....aux..... 
1. opr Type
2. varname() List
3. bts bound-term(opr) List
4. ∀bt:bound-term(opr)
     ((bt ∈ bts)
      (∀bnds:varname() List. ∀f:{v:varname()| (v ∈ bnds all-vars(snd(bt)))}  ⟶ varname().
           ((∀x:{v:varname()| (v ∈ bnds all-vars(snd(bt)))} 
               ((((f x) nullvar() ∈ varname())  (x nullvar() ∈ varname())) ∧ (f x ∈ L))))
            binders-disjoint(opr;L;alpha-rename-aux(f;bnds;snd(bt))))))
5. opr
6. bnds varname() List
7. f@0 {v:varname()| (v ∈ bnds all-vars(mkterm(f;bts)))}  ⟶ varname()
8. ∀x:{v:varname()| (v ∈ bnds all-vars(mkterm(f;bts)))} 
     ((((f@0 x) nullvar() ∈ varname())  (x nullvar() ∈ varname())) ∧ (f@0 x ∈ L)))
9. bts ∈ {bt:varname() List × term(opr)| (bt ∈ bts)}  List
10. b1 varname() List
11. b2 term(opr)
12. (<b1, b2> ∈ bts)
⊢ alpha-rename-aux(f@0;rev(b1) bnds;b2) ∈ term(opr)

3
1. [opr] Type
2. varname() List
3. bts bound-term(opr) List
4. ∀bt:bound-term(opr)
     ((bt ∈ bts)
      (∀bnds:varname() List. ∀f:{v:varname()| (v ∈ bnds all-vars(snd(bt)))}  ⟶ varname().
           ((∀x:{v:varname()| (v ∈ bnds all-vars(snd(bt)))} 
               ((((f x) nullvar() ∈ varname())  (x nullvar() ∈ varname())) ∧ (f x ∈ L))))
            binders-disjoint(opr;L;alpha-rename-aux(f;bnds;snd(bt))))))
5. opr
6. bnds varname() List
7. f@0 {v:varname()| (v ∈ bnds all-vars(mkterm(f;bts)))}  ⟶ varname()
8. ∀x:{v:varname()| (v ∈ bnds all-vars(mkterm(f;bts)))} 
     ((((f@0 x) nullvar() ∈ varname())  (x nullvar() ∈ varname())) ∧ (f@0 x ∈ L)))
9. bts ∈ {bt:varname() List × term(opr)| (bt ∈ bts)}  List
10. λbt.let vs,a bt 
        in <map(f@0;vs), alpha-rename-aux(f@0;rev(vs) bnds;a)> ∈ {bt:varname() List × term(opr)| (bt ∈ bts)}  ⟶ bound\000C-term(opr)
⊢ binders-disjoint(opr;L;eval bts' eager-map(λbt.let vs,a bt 
                                                   in <map(f@0;vs), alpha-rename-aux(f@0;rev(vs) bnds;a)>;bts) in
                         mkterm(f;bts'))


Latex:


Latex:

1.  [opr]  :  Type
2.  L  :  varname()  List
3.  bts  :  bound-term(opr)  List
4.  \mforall{}bt:bound-term(opr)
          ((bt  \mmember{}  bts)
          {}\mRightarrow{}  (\mforall{}bnds:varname()  List.  \mforall{}f:\{v:varname()|  (v  \mmember{}  bnds  @  all-vars(snd(bt)))\}    {}\mrightarrow{}  varname().
                      ((\mforall{}x:\{v:varname()|  (v  \mmember{}  bnds  @  all-vars(snd(bt)))\} 
                              ((((f  x)  =  nullvar())  {}\mRightarrow{}  (x  =  nullvar()))  \mwedge{}  (\mneg{}(f  x  \mmember{}  L))))
                      {}\mRightarrow{}  binders-disjoint(opr;L;alpha-rename-aux(f;bnds;snd(bt))))))
5.  f  :  opr
6.  bnds  :  varname()  List
7.  f@0  :  \{v:varname()|  (v  \mmember{}  bnds  @  all-vars(mkterm(f;bts)))\}    {}\mrightarrow{}  varname()
8.  \mforall{}x:\{v:varname()|  (v  \mmember{}  bnds  @  all-vars(mkterm(f;bts)))\} 
          ((((f@0  x)  =  nullvar())  {}\mRightarrow{}  (x  =  nullvar()))  \mwedge{}  (\mneg{}(f@0  x  \mmember{}  L)))
\mvdash{}  binders-disjoint(opr;L;eval  bts'  =  eager-map(\mlambda{}bt.let  vs,a  =  bt 
                                                                                                      in  <map(f@0;vs)
                                                                                                            ,  alpha-rename-aux(f@0;rev(vs)  +  bnds;a)
                                                                                                            >bts)  in
                                                  mkterm(f;bts'))


By


Latex:
((Assert  bts  \mmember{}  \{bt:varname()  List  \mtimes{}  term(opr)|  (bt  \mmember{}  bts)\}    List  BY
                Auto)
  THEN  (Assert  \mlambda{}bt.let  vs,a  =  bt 
                                    in  <map(f@0;vs),  alpha-rename-aux(f@0;rev(vs)  +  bnds;a)>
                            \mmember{}  \{bt:varname()  List  \mtimes{}  term(opr)|  (bt  \mmember{}  bts)\}    {}\mrightarrow{}  bound-term(opr)  BY
                          (MemCD
                            THENL  [(D  -1  THEN  D  -2  THEN  Reduce  0  THEN  Unfold  `bound-term`  0  THEN  MemCD);  Auto]
                          ))
  )




Home Index