lean2/tests/lean/congr_print.lean.expected.out

20 lines
1.3 KiB
Text

theorem perm.perm_erase_dup_of_perm [congr] : ∀ {A : Type} [H : decidable_eq A] {l₁ l₂ : list A}, l₁ ~ l₂ → erase_dup l₁ ~ erase_dup l₂ :=
λ (A : Type) (H : decidable_eq A) (l₁ l₂ : list A) (p : l₁ ~ l₂),
perm_induction_on p nil
(λ (x : A) (t₁ t₂ : list A) (p : t₁ ~ t₂) (r : erase_dup t₁ ~ erase_dup t₂),
decidable.by_cases
(λ (xint₁ : x ∈ t₁), assert xint₂ : x ∈ t₂, from mem_of_mem_erase_dup …, … …)
(λ (nxint₁ : x ∉ t₁),
assert nxint₂ : x ∉ t₂, from λ (xint₂ : x ∈ t₂), … nxint₁,
eq.rec … (eq.symm …)))
(λ (y x : A) (t₁ t₂ : list A) (p : t₁ ~ t₂) (r : erase_dup t₁ ~ erase_dup t₂),
decidable.by_cases
(λ (xinyt₁ : x ∈ y :: t₁),
decidable.by_cases (λ (yint₁ : …), …)
(λ (nyint₁ : y ∉ t₁), assert nyint₂ : …, from …, …))
(λ (nxinyt₁ : x ∉ y :: t₁),
have xney : x ≠ y, from ne_of_not_mem_cons nxinyt₁,
have nxint₁ : x ∉ t₁, from not_mem_of_not_mem_cons nxinyt₁,
assert nxint₂ : x ∉ t₂, from λ (xint₂ : …), …,
… …))
(λ (t₁ t₂ t₃ : list A) (p₁ : t₁ ~ t₂) (p₂ : t₂ ~ t₃), trans)