Step
*
1
1
1
1
1
1
of Lemma
subst-term_functionality
1. [opr] : Type
2. s1 : (varname() × term(opr)) List
3. s2 : (varname() × term(opr)) List
4. v : {v:varname()| ¬(v = nullvar() ∈ varname())} 
5. varterm(v) ∈ term(opr)
6. v1 : {v:varname()| ¬(v = nullvar() ∈ varname())} 
7. bnds1 : varname() List
8. bnds2 : varname() List
9. ||bnds1|| = ||bnds2|| ∈ ℤ
10. l_disjoint(varname();bnds1;vars-of-subst(s1))
11. l_disjoint(varname();bnds2;vars-of-subst(s2))
12. ↑same-binding(bnds1;bnds2;v;v1)
13. x : term(opr)
14. apply-alist(VarDeq;s1;v) = (inl x) ∈ (term(opr)?)
15. (v ∈ vars-of-subst(s1))
16. ¬(v ∈ bnds1)
17. ¬(v1 ∈ bnds2)
18. v1 = v ∈ varname()
19. x1 : term(opr)
20. apply-alist(VarDeq;s2;v) = (inl x1) ∈ (term(opr)?)
21. tt = tt
22. alpha-eq-terms(opr;x;x1)
23. l_disjoint(varname();bnds1;free-vars(x))
⊢ alpha-aux(opr;bnds1;bnds2;x;x1)
BY
{ (Assert l_disjoint(varname();bnds2;free-vars(x1)) BY
         (RepeatFor 3 (Thin (-1))
          THEN (FLemma `apply-alist-inl` [-1] THENA Auto)
          THEN RepeatFor 2 (ParallelOp 11)
          THEN RepeatFor 2 (ParallelLast)
          THEN Unfold `vars-of-subst` 0
          THEN (RWO "member-l-union-list" 0 THENA Auto)
          THEN (RWO "member-map" 0 THENA Auto)
          THEN Reduce 0
          THEN (D 0 With ⌜insert(v;free-vars(x1))⌝  THEN Auto)
          THEN (BLemma `member-insert` ORELSE (D 0 With ⌜<v, x1>⌝  THEN Reduce 0))
          THEN Auto)) }
1
1. [opr] : Type
2. s1 : (varname() × term(opr)) List
3. s2 : (varname() × term(opr)) List
4. v : {v:varname()| ¬(v = nullvar() ∈ varname())} 
5. varterm(v) ∈ term(opr)
6. v1 : {v:varname()| ¬(v = nullvar() ∈ varname())} 
7. bnds1 : varname() List
8. bnds2 : varname() List
9. ||bnds1|| = ||bnds2|| ∈ ℤ
10. l_disjoint(varname();bnds1;vars-of-subst(s1))
11. l_disjoint(varname();bnds2;vars-of-subst(s2))
12. ↑same-binding(bnds1;bnds2;v;v1)
13. x : term(opr)
14. apply-alist(VarDeq;s1;v) = (inl x) ∈ (term(opr)?)
15. (v ∈ vars-of-subst(s1))
16. ¬(v ∈ bnds1)
17. ¬(v1 ∈ bnds2)
18. v1 = v ∈ varname()
19. x1 : term(opr)
20. apply-alist(VarDeq;s2;v) = (inl x1) ∈ (term(opr)?)
21. tt = tt
22. alpha-eq-terms(opr;x;x1)
23. l_disjoint(varname();bnds1;free-vars(x))
24. l_disjoint(varname();bnds2;free-vars(x1))
⊢ alpha-aux(opr;bnds1;bnds2;x;x1)
Latex:
Latex:
1.  [opr]  :  Type
2.  s1  :  (varname()  \mtimes{}  term(opr))  List
3.  s2  :  (varname()  \mtimes{}  term(opr))  List
4.  v  :  \{v:varname()|  \mneg{}(v  =  nullvar())\} 
5.  varterm(v)  \mmember{}  term(opr)
6.  v1  :  \{v:varname()|  \mneg{}(v  =  nullvar())\} 
7.  bnds1  :  varname()  List
8.  bnds2  :  varname()  List
9.  ||bnds1||  =  ||bnds2||
10.  l\_disjoint(varname();bnds1;vars-of-subst(s1))
11.  l\_disjoint(varname();bnds2;vars-of-subst(s2))
12.  \muparrow{}same-binding(bnds1;bnds2;v;v1)
13.  x  :  term(opr)
14.  apply-alist(VarDeq;s1;v)  =  (inl  x)
15.  (v  \mmember{}  vars-of-subst(s1))
16.  \mneg{}(v  \mmember{}  bnds1)
17.  \mneg{}(v1  \mmember{}  bnds2)
18.  v1  =  v
19.  x1  :  term(opr)
20.  apply-alist(VarDeq;s2;v)  =  (inl  x1)
21.  tt  =  tt
22.  alpha-eq-terms(opr;x;x1)
23.  l\_disjoint(varname();bnds1;free-vars(x))
\mvdash{}  alpha-aux(opr;bnds1;bnds2;x;x1)
By
Latex:
(Assert  l\_disjoint(varname();bnds2;free-vars(x1))  BY
              (RepeatFor  3  (Thin  (-1))
                THEN  (FLemma  `apply-alist-inl`  [-1]  THENA  Auto)
                THEN  RepeatFor  2  (ParallelOp  11)
                THEN  RepeatFor  2  (ParallelLast)
                THEN  Unfold  `vars-of-subst`  0
                THEN  (RWO  "member-l-union-list"  0  THENA  Auto)
                THEN  (RWO  "member-map"  0  THENA  Auto)
                THEN  Reduce  0
                THEN  (D  0  With  \mkleeneopen{}insert(v;free-vars(x1))\mkleeneclose{}    THEN  Auto)
                THEN  (BLemma  `member-insert`  ORELSE  (D  0  With  \mkleeneopen{}<v,  x1>\mkleeneclose{}    THEN  Reduce  0))
                THEN  Auto))
Home
Index