4dd6cead83
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>
10 lines
322 B
Text
10 lines
322 B
Text
Set: pp::colors
|
||
Set: pp::unicode
|
||
Assumed: f
|
||
Assumed: g
|
||
∀ a b : Type, ∃ c : Type, (g a b) = (f c)
|
||
∀ a b : Type, ∃ c : Type, (g a b) = (f c) : Bool
|
||
(λ a : Type,
|
||
(λ b : Type, if ((λ x : Type, if ((g a b) == (f x)) ⊥ ⊤) == (λ x : Type, ⊤)) ⊥ ⊤) ==
|
||
(λ x : Type, ⊤)) ==
|
||
(λ x : Type, ⊤)
|