feat(library/hott) port the rest of Funext_Varieties.v
This commit is contained in:
parent
6296f8e092
commit
b5d564431a
1 changed files with 35 additions and 7 deletions
|
@ -4,7 +4,7 @@
|
|||
-- Ported from Coq HoTT
|
||||
import hott.path hott.trunc hott.equiv
|
||||
|
||||
open path truncation sigma
|
||||
open path truncation sigma function
|
||||
|
||||
/- In hott.axioms.funext, we defined function extensionality to be the assertion
|
||||
that the map apD10 is an equivalence. We now prove that this follows
|
||||
|
@ -36,12 +36,17 @@ definition funext_implies_naive_funext : funext_type → naive_funext :=
|
|||
eq1
|
||||
)
|
||||
|
||||
/-definition naive_funext_implies_weak_funext : naive_funext → weak_funext :=
|
||||
definition naive_funext_implies_weak_funext : naive_funext → weak_funext :=
|
||||
(λ nf A P Pc,
|
||||
let c := λx, @center (P x) (Pc x) in
|
||||
let p : Π (f : Πx, P x) (x : A), (c x) ≈ (f x) := sorry in
|
||||
is_contr.mk c (λ f, nf A P c f (λx, p f x))
|
||||
)-/
|
||||
is_contr.mk c (λ f,
|
||||
have eq' : (λx, @center (P x) (Pc x)) ∼ f,
|
||||
from (λx, @contr (P x) (Pc x) (f x)),
|
||||
have eq : (λx, @center (P x) (Pc x)) ≈ f,
|
||||
from nf A P (λx, @center (P x) (Pc x)) f eq',
|
||||
eq
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
/- The less obvious direction is that WeakFunext implies Funext
|
||||
|
@ -54,7 +59,7 @@ context
|
|||
|
||||
protected definition idhtpy : f ∼ f := (λx, idp)
|
||||
|
||||
definition contr_basedhtpy : is_contr (Σ (g : Πx, B x), f ∼ g) :=
|
||||
definition contr_basedhtpy [instance] : is_contr (Σ (g : Πx, B x), f ∼ g) :=
|
||||
is_contr.mk (dpair f idhtpy)
|
||||
(λ dp, sigma.rec_on dp
|
||||
(λ (g : Πx, B x) (h : f ∼ g),
|
||||
|
@ -62,7 +67,7 @@ context
|
|||
@dpair _ (λg, f ∼ g)
|
||||
(λx, dpr1 (k x)) (λx, dpr2 (k x)) in
|
||||
let s := λ g h x, @dpair _ (λy, f x ≈ y) (g x) (h x) in
|
||||
have t1 : Πx, is_contr (Σ y, f x ≈ y),
|
||||
have t1 [visible] : Πx, is_contr (Σ y, f x ≈ y),
|
||||
from (λx, !contr_basedpaths),
|
||||
have t2 : is_contr (Πx, Σ (y : B x), f x ≈ y),
|
||||
from wf _ _ t1,
|
||||
|
@ -78,6 +83,29 @@ context
|
|||
|
||||
parameters (Q : Π g (h : f ∼ g), Type) (d : Q f idhtpy)
|
||||
|
||||
definition htpy_ind (g : Πx, B x) (h : f ∼ g) : Q g h :=
|
||||
@transport _ (λ gh, Q (dpr1 gh) (dpr2 gh)) (dpair f idhtpy) (dpair g h)
|
||||
(@path_contr _ contr_basedhtpy _ _) d
|
||||
|
||||
definition htpy_ind_beta : htpy_ind f idhtpy ≈ d :=
|
||||
(@path2_contr _ _ _ _ !path_contr idp)⁻¹ ▹ idp
|
||||
|
||||
end
|
||||
|
||||
-- Now the proof is fairly easy; we can just use the same induction principle on both sides.
|
||||
theorem weak_funext_implies_funext : weak_funext → funext_type :=
|
||||
(λ wf A B f g,
|
||||
let eq_to_f := (λ g' x, f ≈ g') in
|
||||
let sim2path := htpy_ind wf f eq_to_f idp in
|
||||
have t1 : sim2path f (idhtpy f) ≈ idp,
|
||||
proof htpy_ind_beta wf f eq_to_f idp qed,
|
||||
have t2 : apD10 (sim2path f (idhtpy f)) ≈ (idhtpy f),
|
||||
proof ap apD10 t1 qed,
|
||||
have sect : Sect (sim2path g) apD10,
|
||||
proof (htpy_ind wf f (λ g' x, apD10 (sim2path g' x) ≈ x) t2) g qed,
|
||||
have retr : Sect apD10 (sim2path g),
|
||||
from (λ h, path.rec_on h (htpy_ind_beta wf f _ idp)),
|
||||
IsEquiv.adjointify apD10 (sim2path g) sect retr)
|
||||
|
||||
definition naive_funext_implies_funext : naive_funext -> funext_type :=
|
||||
compose weak_funext_implies_funext naive_funext_implies_weak_funext
|
||||
|
|
Loading…
Reference in a new issue