Step
*
3
of Lemma
longest-prefix_property'
1. [T] : Type
2. L : T
3. L1 : T List
4. ∀P:T List+ ⟶ 𝔹
     (longest-prefix(P;L1) ≤ L1
     ∧ longest-prefix(P;L1) < L1 supposing 0 < ||L1||
     ∧ (((longest-prefix(P;L1) = [] ∈ (T List)) ∧ (∀L':T List. ([] < L' 
⇒ L' < L1 
⇒ (¬↑(P L')))))
       ∨ (0 < ||longest-prefix(P;L1)||
         ∧ (↑(P longest-prefix(P;L1)))
         ∧ (∀L':T List. (longest-prefix(P;L1) < L' 
⇒ L' < L1 
⇒ (¬↑(P L')))))))
⊢ ∀P:T List+ ⟶ 𝔹
    (longest-prefix(P;[L / L1]) ≤ [L / L1]
    ∧ longest-prefix(P;[L / L1]) < [L / L1] supposing 0 < ||[L / L1]||
    ∧ (((longest-prefix(P;[L / L1]) = [] ∈ (T List)) ∧ (∀L':T List. ([] < L' 
⇒ L' < [L / L1] 
⇒ (¬↑(P L')))))
      ∨ (0 < ||longest-prefix(P;[L / L1])||
        ∧ (↑(P longest-prefix(P;[L / L1])))
        ∧ (∀L':T List. (longest-prefix(P;[L / L1]) < L' 
⇒ L' < [L / L1] 
⇒ (¬↑(P L')))))))
BY
{ xxx(RecUnfold `longest-prefix` 0
      THEN Reduce 0
      THEN (D 0 THENA Auto)
      THEN RepUR ``let`` 0
      THEN (InstHyp [⌜λL'.(P [L / L'])⌝] (-2)⋅ THENA Auto)
      THEN MoveToConcl (-1)
      THEN (GenConcl ⌜longest-prefix(λL'.(P [L / L']);L1) = pr ∈ (T List)⌝⋅ THENA Auto)
      THEN All Thin
      THEN DVar `pr'
      THEN Reduce 0
      THEN skip{(RenameVar `u' 2 THEN RenameVar `v' 3)})xxx }
1
1. [T] : Type
2. L : T
3. L1 : T List
4. P : T List+ ⟶ 𝔹
⊢ ([] ≤ L1
∧ [] < L1 supposing 0 < ||L1||
∧ ((([] = [] ∈ (T List)) ∧ (∀L':T List. ([] < L' 
⇒ L' < L1 
⇒ (¬↑(P [L / L'])))))
  ∨ (0 < 0 ∧ (↑(P [L])) ∧ (∀L':T List. ([] < L' 
⇒ L' < L1 
⇒ (¬↑(P [L / L'])))))))
⇒ (if null(L1) then []
    if P [L] then [L]
    else []
    fi  ≤ [L / L1]
   ∧ if null(L1) then [] if P [L] then [L] else [] fi  < [L / L1] supposing 0 < ||L1|| + 1
   ∧ (((if null(L1) then [] if P [L] then [L] else [] fi  = [] ∈ (T List))
     ∧ (∀L':T List. ([] < L' 
⇒ L' < [L / L1] 
⇒ (¬↑(P L')))))
     ∨ (0 < ||if null(L1) then []
        if P [L] then [L]
        else []
        fi ||
       ∧ (↑(P if null(L1) then [] if P [L] then [L] else [] fi ))
       ∧ (∀L':T List. (if null(L1) then [] if P [L] then [L] else [] fi  < L' 
⇒ L' < [L / L1] 
⇒ (¬↑(P L')))))))
2
1. [T] : Type
2. L : T
3. L1 : T List
4. P : T List+ ⟶ 𝔹
5. u : T
6. v : T List
⊢ ([u / v] ≤ L1
∧ [u / v] < L1 supposing 0 < ||L1||
∧ ((([u / v] = [] ∈ (T List)) ∧ (∀L':T List. ([] < L' 
⇒ L' < L1 
⇒ (¬↑(P [L / L'])))))
  ∨ (0 < ||v|| + 1 ∧ (↑(P [L; [u / v]])) ∧ (∀L':T List. ([u / v] < L' 
⇒ L' < L1 
⇒ (¬↑(P [L / L'])))))))
⇒ ([L; [u / v]] ≤ [L / L1]
   ∧ [L; [u / v]] < [L / L1] supposing 0 < ||L1|| + 1
   ∧ ((([L; [u / v]] = [] ∈ (T List)) ∧ (∀L':T List. ([] < L' 
⇒ L' < [L / L1] 
⇒ (¬↑(P L')))))
     ∨ (0 < (||v|| + 1) + 1 ∧ (↑(P [L; [u / v]])) ∧ (∀L':T List. ([L; [u / v]] < L' 
⇒ L' < [L / L1] 
⇒ (¬↑(P L')))))))
Latex:
Latex:
1.  [T]  :  Type
2.  L  :  T
3.  L1  :  T  List
4.  \mforall{}P:T  List\msupplus{}  {}\mrightarrow{}  \mBbbB{}
          (longest-prefix(P;L1)  \mleq{}  L1
          \mwedge{}  longest-prefix(P;L1)  <  L1  supposing  0  <  ||L1||
          \mwedge{}  (((longest-prefix(P;L1)  =  [])  \mwedge{}  (\mforall{}L':T  List.  ([]  <  L'  {}\mRightarrow{}  L'  <  L1  {}\mRightarrow{}  (\mneg{}\muparrow{}(P  L')))))
              \mvee{}  (0  <  ||longest-prefix(P;L1)||
                  \mwedge{}  (\muparrow{}(P  longest-prefix(P;L1)))
                  \mwedge{}  (\mforall{}L':T  List.  (longest-prefix(P;L1)  <  L'  {}\mRightarrow{}  L'  <  L1  {}\mRightarrow{}  (\mneg{}\muparrow{}(P  L')))))))
\mvdash{}  \mforall{}P:T  List\msupplus{}  {}\mrightarrow{}  \mBbbB{}
        (longest-prefix(P;[L  /  L1])  \mleq{}  [L  /  L1]
        \mwedge{}  longest-prefix(P;[L  /  L1])  <  [L  /  L1]  supposing  0  <  ||[L  /  L1]||
        \mwedge{}  (((longest-prefix(P;[L  /  L1])  =  [])  \mwedge{}  (\mforall{}L':T  List.  ([]  <  L'  {}\mRightarrow{}  L'  <  [L  /  L1]  {}\mRightarrow{}  (\mneg{}\muparrow{}(P  L')))))
            \mvee{}  (0  <  ||longest-prefix(P;[L  /  L1])||
                \mwedge{}  (\muparrow{}(P  longest-prefix(P;[L  /  L1])))
                \mwedge{}  (\mforall{}L':T  List.  (longest-prefix(P;[L  /  L1])  <  L'  {}\mRightarrow{}  L'  <  [L  /  L1]  {}\mRightarrow{}  (\mneg{}\muparrow{}(P  L')))))))
By
Latex:
xxx(RecUnfold  `longest-prefix`  0
        THEN  Reduce  0
        THEN  (D  0  THENA  Auto)
        THEN  RepUR  ``let``  0
        THEN  (InstHyp  [\mkleeneopen{}\mlambda{}L'.(P  [L  /  L'])\mkleeneclose{}]  (-2)\mcdot{}  THENA  Auto)
        THEN  MoveToConcl  (-1)
        THEN  (GenConcl  \mkleeneopen{}longest-prefix(\mlambda{}L'.(P  [L  /  L']);L1)  =  pr\mkleeneclose{}\mcdot{}  THENA  Auto)
        THEN  All  Thin
        THEN  DVar  `pr'
        THEN  Reduce  0
        THEN  skip\{(RenameVar  `u'  2  THEN  RenameVar  `v'  3)\})xxx
Home
Index