It was not a good idea to use heterogeneous equality as the default equality in Lean.
It creates the following problems.
- Heterogeneous equality does not propagate constraints in the elaborator.
For example, suppose that l has type (List Int), then the expression
l = nil
will not propagate the type (List Int) to nil.
- It is easy to write false. For example, suppose x has type Real, and the user
writes x = 0. This is equivalent to false, since 0 has type Nat. The elaborator cannot introduce
the coercion since x = 0 is a type correct expression.
Homogeneous equality does not suffer from the problems above.
We keep heterogeneous equality because it is useful for generating proof terms.
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
9 lines
153 B
Text
9 lines
153 B
Text
Variable N : Type
|
|
Variable a : N
|
|
Variable b : N
|
|
Show a = b
|
|
Check a = b
|
|
Set lean::pp::implicit true
|
|
Show a = b
|
|
Show (Type 1) = (Type 1)
|
|
Show true = false
|