lean2/tests/lean/bad/t2.lean
2013-09-07 19:40:40 -07:00

36 lines
No EOL
1,013 B
Text

Variable list : Type -> Type
Variable nil {A : Type} : list A
Variable cons {A : Type} (head : A) (tail : list A) : list A
Definition n1 : list Int := cons (nat_to_int 10) nil
Definition n2 : list Nat := cons 10 nil
(*
The following example demonstrates that the expected type (list Int)
does not influece whether coercions are used or not.
*)
Definition n3 : list Int := cons 10 nil
(*
Here are some workarounds for the example above.
The 'let' construct is one of the main tools for providing
hints.
*)
Definition n3a : list Int :=
let a : Int := 10
in cons a nil
(* Solution b: we manually provide the coercion *)
Definition n3b : list Int := cons (nat_to_int 10) nil
(* The folowing example works *)
Definition n4 : list Int := nil
(*
The following example demonstrates that we do not do type inference.
In the current implementation, we first elaborate the type and
then the body.
*)
Definition n5 : _ := cons 10 nil
Set pp::coercion true
Set pp::implicit true
Show Environment 1.