1 | 1. T: Type 2. P: ((T+T) List) Prop 3. P(nil) 4. s1,s2:(T+T) List. P(s1)  P(s2)  paren(T;s1)  paren(T;s2)  P(s1 @ s2) 5. s:(T+T) List, t:T. P(s)  paren(T;s)  P([inl(t)] @ s @ [inr(t)]) 6. n:  7. s: (T+T) List 8. s1:(T+T) List. ||s1|| < ||s||  paren(T;s1)  P(s1) 9. s = nil P(s) | 1 step |
  |
2 | 1. T: Type 2. P: ((T+T) List) Prop 3. P(nil) 4. s1,s2:(T+T) List. P(s1)  P(s2)  paren(T;s1)  paren(T;s2)  P(s1 @ s2) 5. s:(T+T) List, t:T. P(s)  paren(T;s)  P([inl(t)] @ s @ [inr(t)]) 6. n:  7. s: (T+T) List 8. s1:(T+T) List. ||s1|| < ||s||  paren(T;s1)  P(s1) 9. t: T 10. s': (T+T) List 11. s = ([inl(t)] @ s' @ [inr(t)]) 12. paren(T;s') P(s) | 2 steps |
  |
3 | 1. T: Type 2. P: ((T+T) List) Prop 3. P(nil) 4. s1,s2:(T+T) List. P(s1)  P(s2)  paren(T;s1)  paren(T;s2)  P(s1 @ s2) 5. s:(T+T) List, t:T. P(s)  paren(T;s)  P([inl(t)] @ s @ [inr(t)]) 6. n:  7. s: (T+T) List 8. s1:(T+T) List. ||s1|| < ||s||  paren(T;s1)  P(s1) 9. s': (T+T) List 10. s'': (T+T) List 11. ||s'|| < ||s|| 12. ||s''|| < ||s|| 13. s = (s' @ s'') 14. paren(T;s') 15. paren(T;s'') P(s) | 1 step |