Library MetaCoq.Translations.times_bool_fun2




Definition isequiv {A B} (f : A B) :=
   (g : B A) (H1 : x, paths (g (f x)) x), ( y, paths (f (g y)) y).

Definition idequiv A : @isequiv A A (fun xx).
Defined.

Definition equiv A B := f, @isequiv A B f.

Definition coe {A B} (p : A = B) : A B
  := transport idmap p.

Definition transport_pV {A : Type} (P : A Type) {x y : A} (p : x = y)
  : z : P y, p # p^ # z = z
  := paths_ind x (fun y p z : P y, p # p^ # z = z) (fun z ⇒ 1) y p.

Definition transport_Vp {A : Type} (P : A Type) {x y : A} (p : x = y)
  : z : P x, p^ # p # z = z
  := paths_ind x (fun y p z : P x, p^ # p # z = z) (fun z ⇒ 1) y p.

Definition id2equiv A B (p : A = B) : equiv A B.
Defined.

Definition UA := A B, isequiv (id2equiv A B).


Definition contr A := x : A, y, x = y.
Definition weakFunext
  := (A : Type) (P : A Type), ( x, contr (P x)) contr ( x, P x).


Goal weakFunext False.

Definition retract A B := (f : A B) (g : B A), g o f == idmap.

Definition contr_retract {A B} (R : retract A B) (C : contr B) : contr A.
Defined.

Definition postcompose_equiv
  := A B (e : equiv A B) A', isequiv (fun (g : A' A) ⇒ e.1 o g).

Definition UA_postcomposeequiv : UA postcompose_equiv.
Admitted.

Definition α {A} (P : A Type) := fun (g : A sigT P) ⇒ pr1 o g.

Definition contr_isequivα := A P, ( x, contr (P x)) isequiv (@α A P).

Definition postcomposeequiv_αequiv
  : postcompose_equiv contr_isequivα.
Defined.

Definition fib {A B} (f : A B) y := x, f x = y.

Definition equiv_contrfib {A B} (f : A B) (Hf : isequiv f) y : contr (fib f y).
Admitted.

Definition contr_retractα
  := A P, ( x, contr (P x)) retract ( x : A, P x) (fib (α P) idmap).

Definition contr_retract_α : contr_retractα.
Defined.


Definition UA_postcomposeequiv' : UA postcompose_equiv.

Admitted.

Definition αequiv_weakfunext : contr_isequivα weakFunext.
Defined.