lean2/tests/lean/cast1.lean
Leonardo de Moura 7726ccad28 chore(builtin): rename nat, int and real modules to Nat, Int and Real.
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
2014-01-01 13:52:25 -08:00

23 lines
735 B
Text

Import cast.
Import Int.
Variable vector : Type -> Nat -> Type
Axiom N0 (n : Nat) : n + 0 = n
Theorem V0 (T : Type) (n : Nat) : (vector T (n + 0)) = (vector T n) :=
Congr (Refl (vector T)) (N0 n)
Variable f (n : Nat) (v : vector Int n) : Int
Variable m : Nat
Variable v1 : vector Int (m + 0)
(*
The following application will fail because (vector Int (m + 0)) and (vector Int m)
are not definitionally equal.
*)
Check f m v1
(*
The next one succeeds using the "casting" operator.
We can do it, because (V0 Int m) is a proof that
(vector Int (m + 0)) and (vector Int m) are propositionally equal.
That is, they have the same interpretation in the lean set theoretic
semantics.
*)
Check f m (cast (V0 Int m) v1)