4357c9196e
This commit also simplifies the method check_pi in the type_checker and type_inferer. It also fixes process_meta_app in the elaborator. The problem was in the method process_meta_app and process_meta_inst. They were processing convertability constrains as equality constraints. For example, process_meta_app would handle ctx |- Type << ?f b as ctx |- Type =:= ?f b This is not correct because a ?f that returns (Type U) for b satisfies the first but not the second. Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
115 lines
4.8 KiB
Text
115 lines
4.8 KiB
Text
Set: pp::colors
|
||
Set: pp::unicode
|
||
Failed to solve
|
||
⊢ (?M::0 ≈ Nat::add) ⊕ (?M::0 ≈ Int::add) ⊕ (?M::0 ≈ Real::add)
|
||
(line: 1: pos: 10) Overloading at
|
||
(Real::add | Int::add | Nat::add) 1 ⊤
|
||
Failed to solve
|
||
⊢ Bool ≺ ℕ
|
||
Substitution
|
||
⊢ Bool ≺ ?M::8
|
||
(line: 1: pos: 10) Type of argument 2 must be convertible to the expected type in the application of
|
||
?M::0
|
||
with arguments:
|
||
?M::1 1
|
||
⊤
|
||
Assignment
|
||
⊢ ℕ ≈ ?M::8
|
||
Destruct/Decompose
|
||
⊢ ℕ → ℕ ≈ Π x : ?M::8, ?M::9
|
||
Substitution
|
||
⊢ ?M::7[inst:0 (?M::1 1)] ≈ Π x : ?M::8, ?M::9
|
||
(line: 1: pos: 10) Function expected at
|
||
?M::0 (?M::1 1) ⊤
|
||
Assignment
|
||
_ : ℕ ⊢ ℕ → ℕ ≈ ?M::7
|
||
Destruct/Decompose
|
||
⊢ ℕ → ℕ → ℕ ≈ Π x : ?M::6, ?M::7
|
||
Substitution
|
||
⊢ ?M::2 ≈ Π x : ?M::6, ?M::7
|
||
(line: 1: pos: 10) Function expected at
|
||
?M::0 (?M::1 1) ⊤
|
||
Assignment
|
||
⊢ ℕ → ℕ → ℕ ≺ ?M::2
|
||
Propagate type, ?M::0 : ?M::2
|
||
Assignment
|
||
⊢ ?M::0 ≈ Nat::add
|
||
Assumption 0
|
||
Failed to solve
|
||
⊢ Bool ≺ ℤ
|
||
Substitution
|
||
⊢ Bool ≺ ?M::8
|
||
(line: 1: pos: 10) Type of argument 2 must be convertible to the expected type in the application of
|
||
?M::0
|
||
with arguments:
|
||
?M::1 1
|
||
⊤
|
||
Assignment
|
||
⊢ ℤ ≈ ?M::8
|
||
Destruct/Decompose
|
||
⊢ ℤ → ℤ ≈ Π x : ?M::8, ?M::9
|
||
Substitution
|
||
⊢ ?M::7[inst:0 (?M::1 1)] ≈ Π x : ?M::8, ?M::9
|
||
(line: 1: pos: 10) Function expected at
|
||
?M::0 (?M::1 1) ⊤
|
||
Assignment
|
||
_ : ℤ ⊢ ℤ → ℤ ≈ ?M::7
|
||
Destruct/Decompose
|
||
⊢ ℤ → ℤ → ℤ ≈ Π x : ?M::6, ?M::7
|
||
Substitution
|
||
⊢ ?M::2 ≈ Π x : ?M::6, ?M::7
|
||
(line: 1: pos: 10) Function expected at
|
||
?M::0 (?M::1 1) ⊤
|
||
Assignment
|
||
⊢ ℤ → ℤ → ℤ ≺ ?M::2
|
||
Propagate type, ?M::0 : ?M::2
|
||
Assignment
|
||
⊢ ?M::0 ≈ Int::add
|
||
Assumption 2
|
||
Failed to solve
|
||
⊢ Bool ≺ ℝ
|
||
Substitution
|
||
⊢ Bool ≺ ?M::8
|
||
(line: 1: pos: 10) Type of argument 2 must be convertible to the expected type in the application of
|
||
?M::0
|
||
with arguments:
|
||
?M::1 1
|
||
⊤
|
||
Assignment
|
||
⊢ ℝ ≈ ?M::8
|
||
Destruct/Decompose
|
||
⊢ ℝ → ℝ ≈ Π x : ?M::8, ?M::9
|
||
Substitution
|
||
⊢ ?M::7[inst:0 (?M::1 1)] ≈ Π x : ?M::8, ?M::9
|
||
(line: 1: pos: 10) Function expected at
|
||
?M::0 (?M::1 1) ⊤
|
||
Assignment
|
||
_ : ℝ ⊢ ℝ → ℝ ≈ ?M::7
|
||
Destruct/Decompose
|
||
⊢ ℝ → ℝ → ℝ ≈ Π x : ?M::6, ?M::7
|
||
Substitution
|
||
⊢ ?M::2 ≈ Π x : ?M::6, ?M::7
|
||
(line: 1: pos: 10) Function expected at
|
||
?M::0 (?M::1 1) ⊤
|
||
Assignment
|
||
⊢ ℝ → ℝ → ℝ ≺ ?M::2
|
||
Propagate type, ?M::0 : ?M::2
|
||
Assignment
|
||
⊢ ?M::0 ≈ Real::add
|
||
Assumption 5
|
||
Assumed: R
|
||
Assumed: T
|
||
Assumed: r2t
|
||
Coercion r2t
|
||
Assumed: t2r
|
||
Coercion t2r
|
||
Assumed: f
|
||
Assumed: a
|
||
Assumed: b
|
||
Set: lean::pp::coercion
|
||
Set: lean::pp::notation
|
||
f a b
|
||
f (r2t b) (t2r a)
|
||
Assumed: g
|
||
f a b
|
||
f (r2t b) (t2r a)
|