31 lines
888 B
Text
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])
|