lean4-htt/tests/lean/run/simplifier_synth_congr.lean
2016-09-08 14:02:23 -07:00

31 lines
1.2 KiB
Text

open tactic
universe variable l
constants (ss₁ : Type.{l} → Type.{l})
(ss₂ : Π {A : Type.{l}}, A → Type.{l})
[sss₁ : ∀ T, subsingleton (ss₁ T)]
[sss₂ : ∀ T (t : T), subsingleton (ss₂ t)]
(A B : Type.{l}) (HAB : A = B)
(ss_A : ss₁ A) (ss_B : ss₁ B)
(a₁ a₁' a₂ a₂' : A)
(H₁ : a₁ = a₁') (H₂ : a₂ = a₂')
(ss_a₁ : ss₂ a₁)
(ss_a₁' : ss₂ a₁')
(ss_a₂ : ss₂ a₂)
(ss_a₂' : ss₂ a₂')
(f : Π (X : Type.{l}) (ss_X : ss₁ X) (x₁ x₂ : X) (ss_x₁ : ss₂ x₁) (ss_x₂ : ss₂ x₂), Type.{l})
attribute sss₁ [instance]
attribute sss₂ [instance]
attribute HAB [simp]
attribute H₁ [simp]
attribute H₂ [simp]
example : f A ss_A a₁ a₂ ss_a₁ ss_a₂ = f A ss_A a₁' a₂' ss_a₁' ss_a₂' := by simp
attribute [reducible] noncomputable definition c₁' := a₁'
attribute [reducible] noncomputable definition c₂' := a₂'
example : f A ss_A a₁' a₂' ss_a₁' ss_a₂' = f A ss_A c₁' c₂' ss_a₁' ss_a₂' := by simp
example : f A ss_A a₁ a₂ ss_a₁ ss_a₂ = f A ss_A c₁' c₂' ss_a₁' ss_a₂' := by simp