import data.finset data.num data.nat data.int algebra.ring open finset num nat int algebra check @finset.insert _ _ 1 (@finset.empty ℕ) check '{1, 2, 3} -- finset num check ('{1, 2, 3} : finset ℕ) check ('{1, 2, 3} : finset ℕ) -- finset ℕ check ('{1, 2, 3} : finset ℤ) -- finset ℤ example : finset nat := insert 1 (insert 2 (insert 3 empty)) check insert 1 (insert 2 (insert 3 empty)) -- finset num check (insert 1 (insert 2 (insert 3 empty)) : finset nat) check (insert (1:nat) (insert (2:nat) (insert (3:nat) empty))) definition foo_nat (x : finset ℕ) : finset ℕ := x definition foo_int (x : finset ℤ) : finset ℤ := x check foo_nat '{1, 2, 3} -- finset ℕ check foo_int '{1, 2, 3} -- finset ℤ