lean2/tests/lean/run/congr_tac2.lean
Leonardo de Moura 1cbace9df6 feat(library/tactic/congruence_tactic): add congruence lemma generator
The generated congruence theorems ignore arguments that are subsingleton types.
2015-06-05 22:00:10 -07:00

49 lines
1.3 KiB
Text

import data.finset
open finset list
example (A : Type) (f : nat → nat → nat → nat) (a b : nat) : a = b → f a = f b :=
begin
intros,
congruence,
assumption
end
structure finite_set [class] {T : Type} (xs : set T) :=
(to_finset : finset T) (is_equiv : to_set to_finset = xs)
definition finset_set.is_subsingleton [instance] (T : Type) (xs : set T) : subsingleton (finite_set xs) :=
begin
constructor, intro a b,
induction a with f₁ h₁,
induction b with f₂ h₂,
subst xs,
let e := to_set.inj h₂,
subst e
end
open finite_set
definition card {T : Type} (xs : set T) [fxs : finite_set xs] :=
finset.card (to_finset xs)
example (A : Type) (s₁ s₂ : set A) [fxs₁ : finite_set s₁] [fxs₂ : finite_set s₂] : s₁ = s₂ → card s₁ = card s₂ :=
begin
intros,
congruence,
assumption
end
example {A : Type} (l₁ l₂ : list A) (h₁ : l₁ ≠ []) (h₂ : l₂ ≠ []) : l₁ = l₂ → last l₁ h₁ = last l₂ h₂ :=
begin
intros,
congruence,
assumption
end
example (A : Type) (last₁ last₂ : Π l : list A, l ≠ [] → A) (l₁ l₂ : list A) (h₁ : l₁ ≠ []) (h₂ : l₂ ≠ []) :
last₁ = last₂ → l₁ = l₂ → last₁ l₁ h₁ = last₂ l₂ h₂ :=
begin
intro e₁ e₂,
congruence,
repeat assumption
end