lean2/hott/types/prod.hlean

49 lines
1.3 KiB
Text
Raw Normal View History

2014-12-12 04:14:53 +00:00
/-
Copyright (c) 2014 Floris van Doorn. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Module: types.prod
2014-12-12 04:14:53 +00:00
Author: Floris van Doorn
Ported from Coq HoTT
2014-12-12 04:14:53 +00:00
Theorems about products
-/
open eq equiv is_equiv is_trunc prod
2014-12-12 04:14:53 +00:00
variables {A A' B B' C D : Type}
{a a' a'' : A} {b b₁ b₂ b' b'' : B} {u v w : A × B}
namespace prod
-- prod.eta is already used for the eta rule for strict equality
protected definition eta (u : A × B) : (pr₁ u , pr₂ u) = u :=
by cases u; apply idp
2014-12-12 04:14:53 +00:00
definition pair_eq (pa : a = a') (pb : b = b') : (a , b) = (a' , b') :=
by cases pa; cases pb; apply idp
2014-12-12 04:14:53 +00:00
definition prod_eq (H₁ : pr₁ u = pr₁ v) (H₂ : pr₂ u = pr₂ v) : u = v :=
2014-12-12 04:14:53 +00:00
begin
cases u with [a₁, b₁],
cases v with [a₂, b₂],
apply (transport _ (eta (a₁, b₁))),
apply (transport _ (eta (a₂, b₂))),
apply (pair_eq H₁ H₂),
2014-12-12 04:14:53 +00:00
end
/- Symmetry -/
definition is_equiv_flip [instance] (A B : Type) : is_equiv (@flip A B) :=
2014-12-12 04:14:53 +00:00
adjointify flip
flip
(λu, destruct u (λb a, idp))
(λu, destruct u (λa b, idp))
definition prod_comm_equiv (A B : Type) : A × B ≃ B × A :=
2014-12-12 04:14:53 +00:00
equiv.mk flip _
-- is_trunc_prod is defined in sigma
2014-12-12 04:14:53 +00:00
end prod