lean4-htt/tests/lean/unify1.lean

31 lines
888 B
Text

import data.list
open list
definition ID {A : Type} (a : A) := a
-- set_option trace.type_context.is_def_eq_detail true
-- set_option pp.purify_metavars false
#unify id (_ ++ (_ : list nat)), ([1, 2] ++ [(3:nat), 4])
#unify (_ ++ (_ : list nat)), id ([1, 2] ++ [(3:nat), 4])
#unify (_ ++ (_ : list nat)), ID ([1, 2] ++ [(3:nat), 4])
#unify (_ ++ (_ : list nat)), ID (ID ([1, 2] ++ [(3:nat), 4]))
#unify ID (_ ++ (_ : list nat)), ID ([1, 2] ++ [(3:nat), 4])
#unify ID (_ ++ (_ : list nat)), ([1, 2] ++ [(3:nat), 4])
-- The following one fails because both sides are productive, and
-- we need to unfolding steps in the lhs to get the same
-- head symbol in the rhs
-- #unify ID (ID (_ ++ (_ : list nat))), ([1, 2] ++ [(3:nat), 4])
#unify ([(1:nat)] ++ [2, 3, 4]), ([1, 2] ++ [(3:nat), 4])
constant y1 : nat
constant y2 : nat
#unify (y1 :: _) ++ _, (let l := [y1] in l ++ [y2])