1

我有以下代码:

example (x y : ℕ):
    (x + y) * (x+y ) = x*x + y*x + x*y +y*y
    :=
    have s₀:(x+y)*(x+y) = (x+y)*x + (x+y)*y, 
        from nat.left_distrib (x+y) x y ,
    have s₁: (x+y)*x = x*x + y*x,
        from nat.right_distrib x y x,
    have s₂: (x+y)*y = x*y + y*y,
        from nat.right_distrib x y y,
    have s₃: (x+y)*(x+y) = x*x + y*x + (x+y)*y, 
        from s₁ ▸ s₀, 
    show   (x + y) * (x+y ) = x*x + y*x + x*y +y*y , 
        from 
        (@eq.subst ℕ  (λ T:ℕ , (x+y)*(x+y) = x*x + y*x + T ) 
        ( (x+y)*y ) (x*y + y*y) ) (s₂)  (s₃) 

问题似乎出在最后一步(显示中),编译器告诉我:

term
  s₂ ▸ s₃
has type
  (λ (T : ℕ), (x + y) * (x + y) = x * x + y * x + T) (x * y + y * y)
but is expected to have type
  (x + y) * (x + y) = x * x + y * x + x * y + y * y

我不明白。两种类型不一样吗?

4

0 回答 0