Built with Alectryon. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
From HoTT Require Import Basics.From HoTT Require Import Basics.Require Import Types.Forall Types.Sigma Types.Prod Types.WType.(** In this file we define indexed W-types. We show that indexed W-types can be reduced to W-types whilst still having definitional computation rules. We also characterize the path space of indexed W-types. This allows us to derive sufficient conditions for an indexed W-type to be truncated. *)(** This is mostly adapted from Jasper Hugunin's formalization in Coq: https://github.com/jashug/IWTypes *)(** On a more meta-theoretic note, this partly justifies the use of indexed inductive types in Coq with respect to homotopy type theory. *)InductiveIW
(I : Type) (** The indexing type *)
(A : Type) (** The type of labels / constructors / data *)
(B : A -> Type) (** The type of arities / arguments / children *)
(i : A -> I) (** The index map (for labels) *)
(j : forallx, B x -> I) (** The index map for arguments *)
: I -> Type :=
| iw_sup (x : A)
: (forall (y : B x), IW I A B i j (j x y)) -> IW I A B i j (i x).Definitioniw_label {ABIij} {l : I} (w : IW I A B i j l) : A :=
match w with
| iw_sup x y => x
end.Definitioniw_arity {ABIij} (l : I) (w : IW I A B i j l)
: forall (y : B (iw_label w)), IW I A B i j (j (iw_label w) y) :=
match w with
| iw_sup x y => y
end.
A: Type B: A -> Type I: Type i: A -> I j: forallx : A, B x -> I l: I w: IW I A B i j l
i (iw_label w) = l
A: Type B: A -> Type I: Type i: A -> I j: forallx : A, B x -> I l: I w: IW I A B i j l
i (iw_label w) = l
bydestruct w.Defined.
A: Type B: A -> Type I: Type i: A -> I j: forallx : A, B x -> I l: I w: IW I A B i j l
transport (IW I A B i j) (path_index_iw_label l w)
(iw_sup I A B i j (iw_label w) (iw_arity l w)) =
w
A: Type B: A -> Type I: Type i: A -> I j: forallx : A, B x -> I l: I w: IW I A B i j l
transport (IW I A B i j) (path_index_iw_label l w)
(iw_sup I A B i j (iw_label w) (iw_arity l w)) =
w
bydestruct w.Defined.(** We have a canonical map from the IW-type to the fiber of the index map *)
A: Type B: A -> Type I: Type i: A -> I j: forallx : A, B x -> I l: I
IW I A B i j l -> hfiber i l
A: Type B: A -> Type I: Type i: A -> I j: forallx : A, B x -> I l: I
IW I A B i j l -> hfiber i l
A: Type B: A -> Type I: Type i: A -> I j: forallx : A, B x -> I l: I w: IW I A B i j l
hfiber i l
A: Type B: A -> Type I: Type i: A -> I j: forallx : A, B x -> I l: I w: IW I A B i j l
i (iw_label w) = l
apply path_index_iw_label.Defined.
H: Funext A: Type B: A -> Type a: forallx : A, B x P: forallb0 : forallx : A, B x, a == b0 -> Type f: P a (funx : A => 1) b: forallx : A, B x p: a == b
P b p
H: Funext A: Type B: A -> Type a: forallx : A, B x P: forallb0 : forallx : A, B x, a == b0 -> Type f: P a (funx : A => 1) b: forallx : A, B x p: a == b
P b p
H: Funext A: Type B: A -> Type a: forallx : A, B x P: forallb0 : forallx : A, B x, a == b0 -> Type f: P a (funx : A => 1) b: forallx : A, B x p: a == b
forallx : a = b, P b (apD10 x)
H: Funext A: Type B: A -> Type a: forallx : A, B x P: forallb0 : forallx : A, B x, a == b0 -> Type f: P a (funx : A => 1) b: forallx : A, B x p: a == b
P a (apD10 1)
exact f.Defined.(** * Reduction of indexed W-types to W-types *)(** Jasper Hugunin found this construction (typecheck un-indexed trees) in "Indexed Containers by Thorsten Altenkirch and Peter Morris". http://www.cs.nott.ac.uk/~psztxa/publ/ICont.pdfThis references the following: * M. Abbott, T. Altenkirch, and N. Ghani. Containers - constructing strictly positive types. Theoretical Computer Science, 342:327, September 2005. Applied Semantics: Selected Topics. * N. Gambino and M. Hyland. Well-founded trees and dependent polynomial functors. In S. Berardi, M. Coppo, and F. Damiani, editors, types for Proofs and Programs (TYPES 2003), Lecture Notes in Computer Science, 2004as previous examples of the technique. *)SectionReduction.Context (I : Type) (A : Type) (B : A -> Type)
(i : A -> I) (j : forallx, B x -> I).FixpointIsIndexedBy (x : I) (w : W A B) : Type :=
match w with
| w_sup a b => (i a = x) * (forallc, IsIndexedBy (j a c) (b c))
end.DefinitionIW' (x : I) := sig (IsIndexedBy x).Definitioniw_sup' (x : A) (y : forallz : B x, IW' (j x z)) : IW' (i x)
:= (w_sup A B x (funa => pr1 (y a)); (idpath, (funa => pr2 (y a)))).(** We can derive the induction principle for IW-types *)
I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I P: foralli0 : I, IW' i0 -> Type S: forall (x : A) (y : forallx0 : B x, IW' (j x x0)),
(forallc : B x, P (j x c) (y c)) -> P (i x) (iw_sup' x y)
forall (x : I) (w : IW' x), P x w
I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I P: foralli0 : I, IW' i0 -> Type S: forall (x : A) (y : forallx0 : B x, IW' (j x x0)),
(forallc : B x, P (j x c) (y c)) -> P (i x) (iw_sup' x y)
forall (x : I) (w : IW' x), P x w
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I P: foralli0 : I, IW' i0 -> Type S: forall (x0 : A) (y : forallx1 : B x0, IW' (j x0 x1)),
(forallc : B x0, P (j x0 c) (y c)) -> P (i x0) (iw_sup' x0 y) x: I w: W A B r: IsIndexedBy x w
P x (w; r)
I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I P: foralli0 : I, IW' i0 -> Type S: forall (x : A) (y : forallx0 : B x, IW' (j x x0)),
(forallc : B x, P (j x c) (y c)) -> P (i x) (iw_sup' x y)
forall (w : W A B) (x : I) (r : IsIndexedBy x w), P x (w; r)
I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I P: foralli0 : I, IW' i0 -> Type S: forall (x : A) (y : forallx0 : B x, IW' (j x x0)),
(forallc : B x, P (j x c) (y c)) -> P (i x) (iw_sup' x y) a: A b: B a -> W A B k: forall (b0 : B a) (x : I) (r : IsIndexedBy x (b b0)), P x (b b0; r)
forall (x : I) (r : IsIndexedBy x (w_sup A B a b)), P x (w_sup A B a b; r)
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I P: foralli0 : I, IW' i0 -> Type S: forall (x0 : A) (y : forallx1 : B x0, IW' (j x0 x1)),
(forallc : B x0, P (j x0 c) (y c)) -> P (i x0) (iw_sup' x0 y) a: A b: B a -> W A B k: forall (b0 : B a) (x0 : I) (r : IsIndexedBy x0 (b b0)), P x0 (b b0; r) x: I p: i a = x IH: forallc : B a, IsIndexedBy (j a c) (b c)
P x (w_sup A B a b; (p, IH))
I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I P: foralli0 : I, IW' i0 -> Type S: forall (x : A) (y : forallx0 : B x, IW' (j x x0)),
(forallc : B x, P (j x c) (y c)) -> P (i x) (iw_sup' x y) a: A b: B a -> W A B k: forall (b0 : B a) (x : I) (r : IsIndexedBy x (b b0)), P x (b b0; r) IH: forallc : B a, IsIndexedBy (j a c) (b c)
P (i a) (w_sup A B a b; (1, IH))
I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I P: foralli0 : I, IW' i0 -> Type S: forall (x : A) (y : forallx0 : B x, IW' (j x x0)),
(forallc : B x, P (j x c) (y c)) -> P (i x) (iw_sup' x y) a: A b: B a -> W A B k: forall (b0 : B a) (x : I) (r : IsIndexedBy x (b b0)), P x (b b0; r) IH: forallc : B a, IsIndexedBy (j a c) (b c)
forallc : B a, P (j a c) (b c; IH c)
I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I P: foralli0 : I, IW' i0 -> Type S: forall (x : A) (y : forallx0 : B x, IW' (j x x0)),
(forallc0 : B x, P (j x c0) (y c0)) -> P (i x) (iw_sup' x y) a: A b: B a -> W A B k: forall (b0 : B a) (x : I) (r : IsIndexedBy x (b b0)), P x (b b0; r) IH: forallc0 : B a, IsIndexedBy (j a c0) (b c0) c: B a
P (j a c) (b c; IH c)
apply k.Defined.(** We have definitional computation rules for this eliminator. *)DefinitionIW'_ind_beta_iw_sup' (P : foralli, IW' i -> Type)
(S : forallxy, (forallc, P _ (y c)) -> P _ (iw_sup' x y)) xy
: IW'_ind P S _ (iw_sup' x y) = S x y (func => IW'_ind P S _ (y c))
:= idpath.(** Showing that IW-types are equivalent to W-types requires funext. *)
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I
IW' x <~> IW I A B i j x
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I
IW' x <~> IW I A B i j x
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I
IW' x -> IW I A B i j x
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I
IW I A B i j x -> IW' x
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I
?f o ?g == idmap
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I
?g o ?f == idmap
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I
IW' x -> IW I A B i j x
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I
forallx0 : A,
(forallx1 : B x0, IW' (j x0 x1)) ->
(forallc : B x0, IW I A B i j (j x0 c)) -> IW I A B i j (i x0)
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I a: A b: forallx0 : B a, IW' (j a x0) c: forallc0 : B a, IW I A B i j (j a c0)
IW I A B i j (i a)
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I a: A b: forallx0 : B a, IW' (j a x0) c: forallc0 : B a, IW I A B i j (j a c0)
forally : B a, IW I A B i j (j a y)
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I a: A b: forallx0 : B a, IW' (j a x0) c: forallc0 : B a, IW I A B i j (j a c0) y: B a
IW I A B i j (j a y)
apply c.
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I
IW I A B i j x -> IW' x
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I
IW'_ind (fun (l : I) (_ : IW' l) => IW I A B i j l)
(fun (a : A) (_ : forallx0 : B a, IW' (j a x0))
(c : forallc : B a, IW I A B i j (j a c)) =>
iw_sup I A B i j a (funy : B a => c y))
x
o ?g == idmap
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I
?g
o IW'_ind (fun (l : I) (_ : IW' l) => IW I A B i j l)
(fun (a : A) (_ : forallx0 : B a, IW' (j a x0))
(c : forallc : B a, IW I A B i j (j a c)) =>
iw_sup I A B i j a (funy : B a => c y))
x ==
idmap
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I
IW I A B i j x -> IW' x
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I
forallx0 : A,
(forally : B x0, IW I A B i j (j x0 y)) ->
(forally : B x0, IW' (j x0 y)) -> IW' (i x0)
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I a: A b: forally : B a, IW I A B i j (j a y) c: forally : B a, IW' (j a y)
IW' (i a)
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I a: A b: forally : B a, IW I A B i j (j a y) c: forally : B a, IW' (j a y)
forallz : B a, IW' (j a z)
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I a: A b: forally0 : B a, IW I A B i j (j a y0) c: forally0 : B a, IW' (j a y0) y: B a
IW' (j a y)
apply c.
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I
IW'_ind (fun (l : I) (_ : IW' l) => IW I A B i j l)
(fun (a : A) (_ : forallx0 : B a, IW' (j a x0))
(c : forallc : B a, IW I A B i j (j a c)) =>
iw_sup I A B i j a (funy : B a => c y))
x
o IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a : A) (_ : forally : B a, IW I A B i j (j a y))
(c : forally : B a, IW' (j a y)) =>
iw_sup' a (funy : B a => c y))
x ==
idmap
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I
IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a : A) (_ : forally : B a, IW I A B i j (j a y))
(c : forally : B a, IW' (j a y)) =>
iw_sup' a (funy : B a => c y))
x
o IW'_ind (fun (l : I) (_ : IW' l) => IW I A B i j l)
(fun (a : A) (_ : forallx0 : B a, IW' (j a x0))
(c : forallc : B a, IW I A B i j (j a c)) =>
iw_sup I A B i j a (funy : B a => c y))
x ==
idmap
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I
IW'_ind (fun (l : I) (_ : IW' l) => IW I A B i j l)
(fun (a : A) (_ : forallx0 : B a, IW' (j a x0))
(c : forallc : B a, IW I A B i j (j a c)) =>
iw_sup I A B i j a (funy : B a => c y))
x
o IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a : A) (_ : forally : B a, IW I A B i j (j a y))
(c : forally : B a, IW' (j a y)) =>
iw_sup' a (funy : B a => c y))
x ==
idmap
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I
forall (x0 : A) (i0 : forally : B x0, IW I A B i j (j x0 y)),
(forally : B x0,
IW'_ind (fun (l : I) (_ : IW' l) => IW I A B i j l)
(fun (a : A) (_ : forallx1 : B a, IW' (j a x1))
(c : forallc : B a, IW I A B i j (j a c)) =>
iw_sup I A B i j a (funy0 : B a => c y0))
(j x0 y)
(IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a : A) (_ : forally0 : B a, IW I A B i j (j a y0))
(c : forally0 : B a, IW' (j a y0)) =>
iw_sup' a (funy0 : B a => c y0))
(j x0 y) (i0 y)) =
i0 y) ->
IW'_ind (fun (l : I) (_ : IW' l) => IW I A B i j l)
(fun (a : A) (_ : forallx1 : B a, IW' (j a x1))
(c : forallc : B a, IW I A B i j (j a c)) =>
iw_sup I A B i j a (funy : B a => c y))
(i x0)
(IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a : A) (_ : forally : B a, IW I A B i j (j a y))
(c : forally : B a, IW' (j a y)) =>
iw_sup' a (funy : B a => c y))
(i x0) (iw_sup I A B i j x0 i0)) =
iw_sup I A B i j x0 i0
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I a: A b: forally : B a, IW I A B i j (j a y) c: forally : B a,
IW'_ind (fun (l : I) (_ : IW' l) => IW I A B i j l)
(fun (a0 : A) (_ : forallx0 : B a0, IW' (j a0 x0))
(c0 : forallc0 : B a0, IW I A B i j (j a0 c0)) =>
iw_sup I A B i j a0 (funy0 : B a0 => c0 y0))
(j a y)
(IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a0 : A) (_ : forally0 : B a0, IW I A B i j (j a0 y0))
(c0 : forally0 : B a0, IW' (j a0 y0)) =>
iw_sup' a0 (funy0 : B a0 => c0 y0))
(j a y) (b y)) =
b y
iw_sup I A B i j a
(funy : B a =>
W_rect A B
(funw : W A B => forallx0 : I, IsIndexedBy x0 w -> IW I A B i j x0)
(fun (a0 : A) (b0 : B a0 -> W A B)
(k : forall (b1 : B a0) (x0 : I),
IsIndexedBy x0 (b0 b1) -> IW I A B i j x0)
(x0 : I)
(r : (i a0 = x0) * (forallc0 : B a0, IsIndexedBy (j a0 c0) (b0 c0))) =>
match fst r in (_ = i0) return (IW I A B i j i0) with
| 1 => iw_sup I A B i j a0 (funy0 : B a0 => k y0 (j a0 y0) (snd r y0))
end)
(IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a0 : A) (_ : forally0 : B a0, IW I A B i j (j a0 y0))
(c0 : forally0 : B a0, IW' (j a0 y0)) =>
iw_sup' a0 (funy0 : B a0 => c0 y0))
(j a y) (b y)).1
(j a y)
(IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a0 : A) (_ : forally0 : B a0, IW I A B i j (j a0 y0))
(c0 : forally0 : B a0, IW' (j a0 y0)) =>
iw_sup' a0 (funy0 : B a0 => c0 y0))
(j a y) (b y)).2) =
iw_sup I A B i j a b
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I a: A b: forally : B a, IW I A B i j (j a y) c: forally : B a,
IW'_ind (fun (l : I) (_ : IW' l) => IW I A B i j l)
(fun (a0 : A) (_ : forallx0 : B a0, IW' (j a0 x0))
(c0 : forallc0 : B a0, IW I A B i j (j a0 c0)) =>
iw_sup I A B i j a0 (funy0 : B a0 => c0 y0))
(j a y)
(IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a0 : A) (_ : forally0 : B a0, IW I A B i j (j a0 y0))
(c0 : forally0 : B a0, IW' (j a0 y0)) =>
iw_sup' a0 (funy0 : B a0 => c0 y0))
(j a y) (b y)) =
b y
(funy : B a =>
W_rect A B
(funw : W A B => forallx0 : I, IsIndexedBy x0 w -> IW I A B i j x0)
(fun (a0 : A) (b0 : B a0 -> W A B)
(k : forall (b1 : B a0) (x0 : I),
IsIndexedBy x0 (b0 b1) -> IW I A B i j x0)
(x0 : I)
(r : (i a0 = x0) * (forallc0 : B a0, IsIndexedBy (j a0 c0) (b0 c0))) =>
match fst r in (_ = i0) return (IW I A B i j i0) with
| 1 => iw_sup I A B i j a0 (funy0 : B a0 => k y0 (j a0 y0) (snd r y0))
end)
(IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a0 : A) (_ : forally0 : B a0, IW I A B i j (j a0 y0))
(c0 : forally0 : B a0, IW' (j a0 y0)) =>
iw_sup' a0 (funy0 : B a0 => c0 y0))
(j a y) (b y)).1
(j a y)
(IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a0 : A) (_ : forally0 : B a0, IW I A B i j (j a0 y0))
(c0 : forally0 : B a0, IW' (j a0 y0)) =>
iw_sup' a0 (funy0 : B a0 => c0 y0))
(j a y) (b y)).2) =
b
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I a: A b: forally0 : B a, IW I A B i j (j a y0) c: forally0 : B a,
IW'_ind (fun (l : I) (_ : IW' l) => IW I A B i j l)
(fun (a0 : A) (_ : forallx0 : B a0, IW' (j a0 x0))
(c0 : forallc0 : B a0, IW I A B i j (j a0 c0)) =>
iw_sup I A B i j a0 (funy1 : B a0 => c0 y1))
(j a y0)
(IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a0 : A) (_ : forally1 : B a0, IW I A B i j (j a0 y1))
(c0 : forally1 : B a0, IW' (j a0 y1)) =>
iw_sup' a0 (funy1 : B a0 => c0 y1))
(j a y0) (b y0)) =
b y0 y: B a
W_rect A B
(funw : W A B => forallx0 : I, IsIndexedBy x0 w -> IW I A B i j x0)
(fun (a0 : A) (b0 : B a0 -> W A B)
(k : forall (b1 : B a0) (x0 : I),
IsIndexedBy x0 (b0 b1) -> IW I A B i j x0)
(x0 : I)
(r : (i a0 = x0) * (forallc0 : B a0, IsIndexedBy (j a0 c0) (b0 c0))) =>
match fst r in (_ = i0) return (IW I A B i j i0) with
| 1 => iw_sup I A B i j a0 (funy0 : B a0 => k y0 (j a0 y0) (snd r y0))
end)
(IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a0 : A) (_ : forally0 : B a0, IW I A B i j (j a0 y0))
(c0 : forally0 : B a0, IW' (j a0 y0)) =>
iw_sup' a0 (funy0 : B a0 => c0 y0))
(j a y) (b y)).1
(j a y)
(IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a0 : A) (_ : forally0 : B a0, IW I A B i j (j a0 y0))
(c0 : forally0 : B a0, IW' (j a0 y0)) =>
iw_sup' a0 (funy0 : B a0 => c0 y0))
(j a y) (b y)).2 =
b y
apply c.
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I
IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a : A) (_ : forally : B a, IW I A B i j (j a y))
(c : forally : B a, IW' (j a y)) =>
iw_sup' a (funy : B a => c y))
x
o IW'_ind (fun (l : I) (_ : IW' l) => IW I A B i j l)
(fun (a : A) (_ : forallx0 : B a, IW' (j a x0))
(c : forallc : B a, IW I A B i j (j a c)) =>
iw_sup I A B i j a (funy : B a => c y))
x ==
idmap
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I
(funx0 : IW' x =>
IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a : A) (_ : forally : B a, IW I A B i j (j a y))
(c : forally : B a, IW' (j a y)) =>
iw_sup' a (funy : B a => c y))
x
(IW'_ind (fun (l : I) (_ : IW' l) => IW I A B i j l)
(fun (a : A) (_ : forallx1 : B a, IW' (j a x1))
(c : forallc : B a, IW I A B i j (j a c)) =>
iw_sup I A B i j a (funy : B a => c y))
x x0)) ==
idmap
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I y: IW' x
IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a : A) (_ : forally0 : B a, IW I A B i j (j a y0))
(c : forally0 : B a, IW' (j a y0)) =>
iw_sup' a (funy0 : B a => c y0))
x
(IW'_ind (fun (l : I) (_ : IW' l) => IW I A B i j l)
(fun (a : A) (_ : forallx0 : B a, IW' (j a x0))
(c : forallc : B a, IW I A B i j (j a c)) =>
iw_sup I A B i j a (funy0 : B a => c y0))
x y) =
y
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I y: IW' x
forall (x0 : A) (y0 : forallx1 : B x0, IW' (j x0 x1)),
(forallc : B x0,
IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a : A) (_ : forally1 : B a, IW I A B i j (j a y1))
(c0 : forally1 : B a, IW' (j a y1)) =>
iw_sup' a (funy1 : B a => c0 y1))
(j x0 c)
(IW'_ind (fun (l : I) (_ : IW' l) => IW I A B i j l)
(fun (a : A) (_ : forallx1 : B a, IW' (j a x1))
(c0 : forallc0 : B a, IW I A B i j (j a c0)) =>
iw_sup I A B i j a (funy1 : B a => c0 y1))
(j x0 c) (y0 c)) =
y0 c) ->
IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a : A) (_ : forally1 : B a, IW I A B i j (j a y1))
(c : forally1 : B a, IW' (j a y1)) =>
iw_sup' a (funy1 : B a => c y1))
(i x0)
(IW'_ind (fun (l : I) (_ : IW' l) => IW I A B i j l)
(fun (a : A) (_ : forallx1 : B a, IW' (j a x1))
(c : forallc : B a, IW I A B i j (j a c)) =>
iw_sup I A B i j a (funy1 : B a => c y1))
(i x0) (iw_sup' x0 y0)) =
iw_sup' x0 y0
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I y: IW' x a: A b: forallx0 : B a, IW' (j a x0) c: forallc0 : B a,
IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a0 : A) (_ : forally0 : B a0, IW I A B i j (j a0 y0))
(c1 : forally0 : B a0, IW' (j a0 y0)) =>
iw_sup' a0 (funy0 : B a0 => c1 y0))
(j a c0)
(IW'_ind (fun (l : I) (_ : IW' l) => IW I A B i j l)
(fun (a0 : A) (_ : forallx0 : B a0, IW' (j a0 x0))
(c1 : forallc1 : B a0, IW I A B i j (j a0 c1)) =>
iw_sup I A B i j a0 (funy0 : B a0 => c1 y0))
(j a c0) (b c0)) =
b c0
iw_sup' a
(funy0 : B a =>
IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a0 : A) (_ : forally1 : B a0, IW I A B i j (j a0 y1))
(c0 : forally1 : B a0, IW' (j a0 y1)) =>
iw_sup' a0 (funy1 : B a0 => c0 y1))
(j a y0)
(W_rect A B
(funw : W A B => forallx0 : I, IsIndexedBy x0 w -> IW I A B i j x0)
(fun (a0 : A) (b0 : B a0 -> W A B)
(k : forall (b1 : B a0) (x0 : I),
IsIndexedBy x0 (b0 b1) -> IW I A B i j x0)
(x0 : I)
(r : (i a0 = x0) *
(forallc0 : B a0, IsIndexedBy (j a0 c0) (b0 c0))) =>
match fst r in (_ = i0) return (IW I A B i j i0) with
| 1 =>
iw_sup I A B i j a0 (funy1 : B a0 => k y1 (j a0 y1) (snd r y1))
end)
(b y0).1 (j a y0) (b y0).2)) =
iw_sup' a b
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I y: IW' x a: A b: forallx0 : B a, IW' (j a x0) c: forallc0 : B a,
IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a0 : A) (_ : forally0 : B a0, IW I A B i j (j a0 y0))
(c1 : forally0 : B a0, IW' (j a0 y0)) =>
iw_sup' a0 (funy0 : B a0 => c1 y0))
(j a c0)
(IW'_ind (fun (l : I) (_ : IW' l) => IW I A B i j l)
(fun (a0 : A) (_ : forallx0 : B a0, IW' (j a0 x0))
(c1 : forallc1 : B a0, IW I A B i j (j a0 c1)) =>
iw_sup I A B i j a0 (funy0 : B a0 => c1 y0))
(j a c0) (b c0)) =
b c0
(funy0 : B a =>
IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a0 : A) (_ : forally1 : B a0, IW I A B i j (j a0 y1))
(c0 : forally1 : B a0, IW' (j a0 y1)) =>
iw_sup' a0 (funy1 : B a0 => c0 y1))
(j a y0)
(W_rect A B
(funw : W A B => forallx0 : I, IsIndexedBy x0 w -> IW I A B i j x0)
(fun (a0 : A) (b0 : B a0 -> W A B)
(k : forall (b1 : B a0) (x0 : I),
IsIndexedBy x0 (b0 b1) -> IW I A B i j x0)
(x0 : I)
(r : (i a0 = x0) * (forallc0 : B a0, IsIndexedBy (j a0 c0) (b0 c0))) =>
match fst r in (_ = i0) return (IW I A B i j i0) with
| 1 =>
iw_sup I A B i j a0 (funy1 : B a0 => k y1 (j a0 y1) (snd r y1))
end)
(b y0).1 (j a y0) (b y0).2)) =
b
I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I H: Funext x: I y: IW' x a: A b: forallx0 : B a, IW' (j a x0) c: forallc0 : B a,
IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a0 : A) (_ : forally0 : B a0, IW I A B i j (j a0 y0))
(c1 : forally0 : B a0, IW' (j a0 y0)) =>
iw_sup' a0 (funy0 : B a0 => c1 y0))
(j a c0)
(IW'_ind (fun (l : I) (_ : IW' l) => IW I A B i j l)
(fun (a0 : A) (_ : forallx0 : B a0, IW' (j a0 x0))
(c1 : forallc1 : B a0, IW I A B i j (j a0 c1)) =>
iw_sup I A B i j a0 (funy0 : B a0 => c1 y0))
(j a c0) (b c0)) =
b c0 d: B a
IW_rect I A B i j (fun (l : I) (_ : IW I A B i j l) => IW' l)
(fun (a0 : A) (_ : forally0 : B a0, IW I A B i j (j a0 y0))
(c0 : forally0 : B a0, IW' (j a0 y0)) =>
iw_sup' a0 (funy0 : B a0 => c0 y0))
(j a d)
(W_rect A B
(funw : W A B => forallx0 : I, IsIndexedBy x0 w -> IW I A B i j x0)
(fun (a0 : A) (b0 : B a0 -> W A B)
(k : forall (b1 : B a0) (x0 : I),
IsIndexedBy x0 (b0 b1) -> IW I A B i j x0)
(x0 : I)
(r : (i a0 = x0) * (forallc0 : B a0, IsIndexedBy (j a0 c0) (b0 c0))) =>
match fst r in (_ = i0) return (IW I A B i j i0) with
| 1 => iw_sup I A B i j a0 (funy0 : B a0 => k y0 (j a0 y0) (snd r y0))
end)
(b d).1 (j a d) (b d).2) =
b d
apply c.Defined.EndReduction.(** * Characterization of path types of IW-types. Argument due to Jasper Hugunin. *)SectionPaths.Context `{Funext}
(I : Type) (A : Type) (B : A -> Type)
(i : A -> I) (j : forallx, B x -> I).(** We wish to show that path types of IW-types are IW-types themselves. We do this by showing the path type satisfies the same induction principle as the IW-type hence they are equivalent. *)LetI' : Type := {k : I & IW I A B i j k * IW I A B i j k}.LetA' : Type := {e : A & (forallc, IW I A B i j (j e c)) * (forallc, IW I A B i j (j e c))}.LetB' : A' -> Type := funX => B X.1.Leti' : A' -> I' := functor_sigma i (funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)).Letj' : forallk, B' k -> I' := funkc => (j k.1 c; (fst k.2 c, snd k.2 c)).LetIWPath : I' -> Type := funx => fst (pr2 x) = snd (pr2 x).
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: A'
(forally : B' x, IWPath (j' x y)) -> IWPath (i' x)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: A'
(forally : B' x, IWPath (j' x y)) -> IWPath (i' x)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: A c1, c2: forallc : B x, IW I A B i j (j x c)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: A c1, c2: forallc : B x, IW I A B i j (j x c) y: forally0 : B' (x; (c1, c2)), IWPath (j' (x; (c1, c2)) y0)
IWPath (i' (x; (c1, c2)))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: A c1, c2: forallc : B x, IW I A B i j (j x c) y: forally0 : B' (x; (c1, c2)), IWPath (j' (x; (c1, c2)) y0)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: A c1, c2: forallc : B x, IW I A B i j (j x c) y: forally0 : B' (x; (c1, c2)), IWPath (j' (x; (c1, c2)) y0)
c1 = c2
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: A c1, c2: forallc : B x, IW I A B i j (j x c) y: forally0 : B' (x; (c1, c2)), IWPath (j' (x; (c1, c2)) y0) l: B x
c1 l = c2 l
apply y.Defined.
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: A a: forallc : B x, IW I A B i j (j x c)
iwpath_sup (x; (a, a)) (apD10 1) = 1
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: A a: forallc : B x, IW I A B i j (j x c)
iwpath_sup (x; (a, a)) (apD10 1) = 1
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: A a: forallc : B x, IW I A B i j (j x c)
ap (iw_sup I A B i j x) (path_forall a a (funl : B x => apD10 1 l)) = 1
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: A a: forallc : B x, IW I A B i j (j x c)
ap (iw_sup I A B i j x) 1 = 1
reflexivity.Defined.SectionInd.Context
(P : forallxab, IWPath xab -> Type)
(S : forallab, (forallc, P _ (b c)) -> P (i' a) (iwpath_sup a b)).
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a : A') (b : forallx : B' a, IWPath (j' a x)),
(forallc : B' a, P (j' a c) (b c)) -> P (i' a) (iwpath_sup a b)
forall (l : I) (a : IW I A B i j l), P (l; (a, a)) 1
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a : A') (b : forallx : B' a, IWPath (j' a x)),
(forallc : B' a, P (j' a c) (b c)) -> P (i' a) (iwpath_sup a b)
forall (l : I) (a : IW I A B i j l), P (l; (a, a)) 1
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a : A') (b : forallx : B' a, IWPath (j' a x)),
(forallc : B' a, P (j' a c) (b c)) -> P (i' a) (iwpath_sup a b)
forall (x : A) (i0 : forally : B x, IW I A B i j (j x y)),
(forally : B x, P (j x y; (i0 y, i0 y)) 1) ->
P (i x; (iw_sup I A B i j x i0, iw_sup I A B i j x i0)) 1
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a0 : A') (b : forallx0 : B' a0, IWPath (j' a0 x0)),
(forallc : B' a0, P (j' a0 c) (b c)) -> P (i' a0) (iwpath_sup a0 b) x: A a: forally : B x, IW I A B i j (j x y) q: forally : B x, P (j x y; (a y, a y)) 1
P (i x; (iw_sup I A B i j x a, iw_sup I A B i j x a)) 1
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a0 : A') (b : forallx0 : B' a0, IWPath (j' a0 x0)),
(forallc : B' a0, P (j' a0 c) (b c)) -> P (i' a0) (iwpath_sup a0 b) x: A a: forally : B x, IW I A B i j (j x y) q: forally : B x, P (j x y; (a y, a y)) 1 p:= S (x; (a, a)) (funy : B x => 1) q: P (i' (x; (a, a))) (iwpath_sup (x; (a, a)) (funy : B x => 1))
P (i x; (iw_sup I A B i j x a, iw_sup I A B i j x a)) 1
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a0 : A') (b : forallx0 : B' a0, IWPath (j' a0 x0)),
(forallc : B' a0, P (j' a0 c) (b c)) -> P (i' a0) (iwpath_sup a0 b) x: A a: forally : B x, IW I A B i j (j x y) q: forally : B x, P (j x y; (a y, a y)) 1 p:= S (x; (a, a)) (funy : B x => 1) q: P (i' (x; (a, a)))
(ap (iw_sup I A B i j x) (path_forall a a (funl : B x => 1)))
P (i x; (iw_sup I A B i j x a, iw_sup I A B i j x a)) 1
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a0 : A') (b : forallx0 : B' a0, IWPath (j' a0 x0)),
(forallc : B' a0, P (j' a0 c) (b c)) -> P (i' a0) (iwpath_sup a0 b) x: A a: forally : B x, IW I A B i j (j x y) q: forally : B x, P (j x y; (a y, a y)) 1 p:= S (x; (a, a)) (funy : B x => 1) q: P (i' (x; (a, a)))
(ap (iw_sup I A B i j x) (path_forall a a (funl : B x => 1)))
ap (iw_sup I A B i j x) (path_forall a a (funl : B x => 1)) = 1
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a0 : A') (b : forallx0 : B' a0, IWPath (j' a0 x0)),
(forallc : B' a0, P (j' a0 c) (b c)) -> P (i' a0) (iwpath_sup a0 b) x: A a: forally : B x, IW I A B i j (j x y) q: forally : B x, P (j x y; (a y, a y)) 1 p:= S (x; (a, a)) (funy : B x => 1) q: P (i' (x; (a, a)))
(ap (iw_sup I A B i j x) (path_forall a a (funl : B x => 1)))
ap (iw_sup I A B i j x) (path_forall a a (apD10 1)) =
ap (iw_sup I A B i j x) 1
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a0 : A') (b : forallx0 : B' a0, IWPath (j' a0 x0)),
(forallc : B' a0, P (j' a0 c) (b c)) -> P (i' a0) (iwpath_sup a0 b) x: A a: forally : B x, IW I A B i j (j x y) q: forally : B x, P (j x y; (a y, a y)) 1 p:= S (x; (a, a)) (funy : B x => 1) q: P (i' (x; (a, a)))
(ap (iw_sup I A B i j x) (path_forall a a (funl : B x => 1)))
path_forall a a (apD10 1) = 1
apply eissect.Defined.
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a : A') (b : forallx : B' a, IWPath (j' a x)),
(forallc : B' a, P (j' a c) (b c)) -> P (i' a) (iwpath_sup a b)
forall (x : I') (p : IWPath x), P x p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a : A') (b : forallx : B' a, IWPath (j' a x)),
(forallc : B' a, P (j' a c) (b c)) -> P (i' a) (iwpath_sup a b)
forall (x : I') (p : IWPath x), P x p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a0 : A') (b0 : forallx0 : B' a0, IWPath (j' a0 x0)),
(forallc : B' a0, P (j' a0 c) (b0 c)) -> P (i' a0) (iwpath_sup a0 b0) x: I a, b: IW I A B i j x
forallp : IWPath (x; (a, b)), P (x; (a, b)) p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a0 : A') (b0 : forallx0 : B' a0, IWPath (j' a0 x0)),
(forallc : B' a0, P (j' a0 c) (b0 c)) -> P (i' a0) (iwpath_sup a0 b0) x: I a, b: IW I A B i j x
forallp : a = b, P (x; (a, b)) p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a0 : A') (b : forallx0 : B' a0, IWPath (j' a0 x0)),
(forallc : B' a0, P (j' a0 c) (b c)) -> P (i' a0) (iwpath_sup a0 b) x: I a: IW I A B i j x
P (x; (a, a)) 1
apply IWPath_ind_refl.Defined.(** The computation rule for the induction principle. *)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a : A') (b : forallx0 : B' a, IWPath (j' a x0)),
(forallc : B' a, P (j' a c) (b c)) -> P (i' a) (iwpath_sup a b) x: A' h: forally : B' x, IWPath (j' x y)
IWPath_ind (i' x) (iwpath_sup x h) =
S x h (func : B' x => IWPath_ind (j' x c) (h c))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a : A') (b : forallx0 : B' a, IWPath (j' a x0)),
(forallc : B' a, P (j' a c) (b c)) -> P (i' a) (iwpath_sup a b) x: A' h: forally : B' x, IWPath (j' x y)
IWPath_ind (i' x) (iwpath_sup x h) =
S x h (func : B' x => IWPath_ind (j' x c) (h c))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a0 : A') (b0 : forallx0 : B' a0, IWPath (j' a0 x0)),
(forallc : B' a0, P (j' a0 c) (b0 c)) -> P (i' a0) (iwpath_sup a0 b0) x: A a, b: forallc : B x, IW I A B i j (j x c) h: forally : B' (x; (a, b)), IWPath (j' (x; (a, b)) y)
IWPath_ind (i' (x; (a, b))) (iwpath_sup (x; (a, b)) h) =
S (x; (a, b)) h
(func : B' (x; (a, b)) => IWPath_ind (j' (x; (a, b)) c) (h c))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a0 : A') (b0 : forallx0 : B' a0, IWPath (j' a0 x0)),
(forallc : B' a0, P (j' a0 c) (b0 c)) -> P (i' a0) (iwpath_sup a0 b0) x: A a, b: forallc : B x, IW I A B i j (j x c) h: forally : B x, a y = b y
IWPath_ind (i' (x; (a, b))) (iwpath_sup (x; (a, b)) h) =
S (x; (a, b)) h
(func : B' (x; (a, b)) => IWPath_ind (j' (x; (a, b)) c) (h c))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a0 : A') (b0 : forallx0 : B' a0, IWPath (j' a0 x0)),
(forallc : B' a0, P (j' a0 c) (b0 c)) -> P (i' a0) (iwpath_sup a0 b0) x: A a, b: forallc : B x, IW I A B i j (j x c) h: forally : B x, a y = b y
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a0 : A') (b0 : forallx0 : B' a0, IWPath (j' a0 x0)),
(forallc : B' a0, P (j' a0 c) (b0 c)) -> P (i' a0) (iwpath_sup a0 b0) x: A a, b: forallc : B x, IW I A B i j (j x c) h: forally : B x, a y = b y
?Goal =
S (x; (a, b)) h
(func : B' (x; (a, b)) => IWPath_ind (j' (x; (a, b)) c) (h c))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a0 : A') (b0 : forallx0 : B' a0, IWPath (j' a0 x0)),
(forallc : B' a0, P (j' a0 c) (b0 c)) -> P (i' a0) (iwpath_sup a0 b0) x: A a, b: forallc : B x, IW I A B i j (j x c) h: forally : B x, a y = b y
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a0 : A') (b0 : forallx0 : B' a0, IWPath (j' a0 x0)),
(forallc : B' a0, P (j' a0 c) (b0 c)) -> P (i' a0) (iwpath_sup a0 b0) x: A a, b: forallc : B x, IW I A B i j (j x c) h: forally : B x, a y = b y
IWPath_ind (i' (x; (a, b))) (iwpath_sup (x; (a, b)) h) =
?Goal1 (eisretr (path_forall a b) (path_forall a b h))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a0 : A') (b0 : forallx0 : B' a0, IWPath (j' a0 x0)),
(forallc : B' a0, P (j' a0 c) (b0 c)) -> P (i' a0) (iwpath_sup a0 b0) x: A a, b: forallc : B x, IW I A B i j (j x c) h: forally : B x, a y = b y
paths_ind (iw_sup I A B i j x a)
(fun (r : IW I A B i j (i x)) (p'' : iw_sup I A B i j x a = r) =>
P (i x; (iw_sup I A B i j x a, r)) p'')
(IWPath_ind_refl (i x) (iw_sup I A B i j x a)) (iw_sup I A B i j x a)
(ap (iw_sup I A B i j x) 1) =
paths_rec (path_forall a a (apD10 1))
(funp'' : a = a =>
P (i x; (iw_sup I A B i j x a, iw_sup I A B i j x a))
(ap (iw_sup I A B i j x) p''))
(S (x; (a, a)) (apD10 1)
(func : B' (x; (a, a)) => IWPath_ind (j x c; (a c, a c)) (apD10 1 c)))
1 (eissect apD10 1)
exact (transport_compose _ _ _ _)^.
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forallxab : I', IWPath xab -> Type S: forall (a0 : A') (b0 : forallx0 : B' a0, IWPath (j' a0 x0)),
(forallc : B' a0, P (j' a0 c) (b0 c)) -> P (i' a0) (iwpath_sup a0 b0) x: A a, b: forallc : B x, IW I A B i j (j x c) h: forally : B x, a y = b y
paths_rec
(path_forall a (snd (x; (a, b)).2)
(apD10
(path_forall (fst (x; (a, b)).2) (snd (x; (a, b)).2)
((funl : B (x; (a, b)).1 => h l)
:
fst (x; (a, b)).2 == snd (x; (a, b)).2))))
(funp'' : a = snd (x; (a, b)).2 =>
P (i x; (iw_sup I A B i j x a, iw_sup I A B i j x (snd (x; (a, b)).2)))
(ap (iw_sup I A B i j x) p''))
(S (x; (a, snd (x; (a, b)).2))
(apD10
(path_forall (fst (x; (a, b)).2) (snd (x; (a, b)).2)
((funl : B (x; (a, b)).1 => h l)
:
fst (x; (a, b)).2 == snd (x; (a, b)).2)))
(func : B' (x; (a, snd (x; (a, b)).2)) =>
IWPath_ind (j x c; (a c, snd (x; (a, b)).2 c))
(apD10
(path_forall (fst (x; (a, b)).2) (snd (x; (a, b)).2)
((funl : B (x; (a, b)).1 => h l)
:
fst (x; (a, b)).2 == snd (x; (a, b)).2))
c)))
(path_forall (fst (x; (a, b)).2) (snd (x; (a, b)).2)
((funl : B (x; (a, b)).1 => h l)
:
fst (x; (a, b)).2 == snd (x; (a, b)).2))
(ap (path_forall a b) (eissect (path_forall a b) h)) =
S (x; (a, b)) h
(func : B' (x; (a, b)) => IWPath_ind (j' (x; (a, b)) c) (h c))
bycbn; destruct (eisretr apD10 h).Defined.EndInd.(** The path type of an IW-type is again an IW-type. *)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x
IW I' A' B' i' j' (x; (a, b)) <~> a = b
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x
IW I' A' B' i' j' (x; (a, b)) <~> a = b
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x
IW I' A' B' i' j' (x; (a, b)) <~> IWPath (x; (a, b))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x
IW I' A' B' i' j' (x; (a, b)) -> IWPath (x; (a, b))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x
IWPath (x; (a, b)) -> IW I' A' B' i' j' (x; (a, b))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x
?f o ?g == idmap
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x
?g o ?f == idmap
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x
IW I' A' B' i' j' (x; (a, b)) -> IWPath (x; (a, b))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x y: IW I' A' B' i' j' (x; (a, b))
IWPath (x; (a, b))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e0 : A &
(forallc : B e0, IW I A B i j (j e0 c)) *
(forallc : B e0, IW I A B i j (j e0 c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x e: A' f: forally : B' e, IW I' A' B' i' j' (j' e y) g: forally : B' e, IWPath (j' e y)
IWPath (i' e)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e0 : A &
(forallc : B e0, IW I A B i j (j e0 c)) *
(forallc : B e0, IW I A B i j (j e0 c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x e: A' f: forally : B' e, IW I' A' B' i' j' (j' e y) g: forally : B' e, IWPath (j' e y)
forally : B' e, IWPath (j' e y)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e0 : A &
(forallc : B e0, IW I A B i j (j e0 c)) *
(forallc : B e0, IW I A B i j (j e0 c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x e: A' f: forally0 : B' e, IW I' A' B' i' j' (j' e y0) g: forally0 : B' e, IWPath (j' e y0) y: B' e
IWPath (j' e y)
apply g.
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x
IWPath (x; (a, b)) -> IW I' A' B' i' j' (x; (a, b))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x
(funy : IW I' A' B' i' j' (x; (a, b)) =>
lets := (x; (a, b)) in
IW_rect I' A' B' i' j'
(fun (s0 : I') (_ : IW I' A' B' i' j' s0) => IWPath s0)
(fun (e : A') (_ : forally0 : B' e, IW I' A' B' i' j' (j' e y0))
(g : forally0 : B' e, IWPath (j' e y0)) =>
iwpath_sup e (funy0 : B' e => g y0))
s y)
o ?g == idmap
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x
?g
o (funy : IW I' A' B' i' j' (x; (a, b)) =>
lets := (x; (a, b)) in
IW_rect I' A' B' i' j'
(fun (s0 : I') (_ : IW I' A' B' i' j' s0) => IWPath s0)
(fun (e : A') (_ : forally0 : B' e, IW I' A' B' i' j' (j' e y0))
(g : forally0 : B' e, IWPath (j' e y0)) =>
iwpath_sup e (funy0 : B' e => g y0))
s y) ==
idmap
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x
IWPath (x; (a, b)) -> IW I' A' B' i' j' (x; (a, b))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x y: IWPath (x; (a, b))
IW I' A' B' i' j' (x; (a, b))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e0 : A &
(forallc : B e0, IW I A B i j (j e0 c)) *
(forallc : B e0, IW I A B i j (j e0 c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x e: A' f: forallx0 : B' e, IWPath (j' e x0) g: forallc : B' e, IW I' A' B' i' j' (j' e c)
IW I' A' B' i' j' (i' e)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e0 : A &
(forallc : B e0, IW I A B i j (j e0 c)) *
(forallc : B e0, IW I A B i j (j e0 c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x e: A' f: forallx0 : B' e, IWPath (j' e x0) g: forallc : B' e, IW I' A' B' i' j' (j' e c)
forally : B' e, IW I' A' B' i' j' (j' e y)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e0 : A &
(forallc : B e0, IW I A B i j (j e0 c)) *
(forallc : B e0, IW I A B i j (j e0 c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x e: A' f: forallx0 : B' e, IWPath (j' e x0) g: forallc : B' e, IW I' A' B' i' j' (j' e c) y: B' e
IW I' A' B' i' j' (j' e y)
apply g.
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x
(funy : IW I' A' B' i' j' (x; (a, b)) =>
lets := (x; (a, b)) in
IW_rect I' A' B' i' j'
(fun (s0 : I') (_ : IW I' A' B' i' j' s0) => IWPath s0)
(fun (e : A') (_ : forally0 : B' e, IW I' A' B' i' j' (j' e y0))
(g : forally0 : B' e, IWPath (j' e y0)) =>
iwpath_sup e (funy0 : B' e => g y0))
s y)
o (funy : IWPath (x; (a, b)) =>
lets := (x; (a, b)) in
IWPath_ind (fun (s0 : I') (_ : IWPath s0) => IW I' A' B' i' j' s0)
(fun (e : A') (_ : forallx0 : B' e, IWPath (j' e x0))
(g : forallc : B' e, IW I' A' B' i' j' (j' e c)) =>
iw_sup I' A' B' i' j' e (funy0 : B' e => g y0))
s y) ==
idmap
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x
(funy : IWPath (x; (a, b)) =>
lets := (x; (a, b)) in
IWPath_ind (fun (s0 : I') (_ : IWPath s0) => IW I' A' B' i' j' s0)
(fun (e : A') (_ : forallx0 : B' e, IWPath (j' e x0))
(g : forallc : B' e, IW I' A' B' i' j' (j' e c)) =>
iw_sup I' A' B' i' j' e (funy0 : B' e => g y0))
s y)
o (funy : IW I' A' B' i' j' (x; (a, b)) =>
lets := (x; (a, b)) in
IW_rect I' A' B' i' j'
(fun (s0 : I') (_ : IW I' A' B' i' j' s0) => IWPath s0)
(fun (e : A') (_ : forally0 : B' e, IW I' A' B' i' j' (j' e y0))
(g : forally0 : B' e, IWPath (j' e y0)) =>
iwpath_sup e (funy0 : B' e => g y0))
s y) ==
idmap
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x
(funy : IW I' A' B' i' j' (x; (a, b)) =>
lets := (x; (a, b)) in
IW_rect I' A' B' i' j'
(fun (s0 : I') (_ : IW I' A' B' i' j' s0) => IWPath s0)
(fun (e : A') (_ : forally0 : B' e, IW I' A' B' i' j' (j' e y0))
(g : forally0 : B' e, IWPath (j' e y0)) =>
iwpath_sup e (funy0 : B' e => g y0))
s y)
o (funy : IWPath (x; (a, b)) =>
lets := (x; (a, b)) in
IWPath_ind (fun (s0 : I') (_ : IWPath s0) => IW I' A' B' i' j' s0)
(fun (e : A') (_ : forallx0 : B' e, IWPath (j' e x0))
(g : forallc : B' e, IW I' A' B' i' j' (j' e c)) =>
iw_sup I' A' B' i' j' e (funy0 : B' e => g y0))
s y) ==
idmap
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x y: IWPath (x; (a, b))
IW_rect I' A' B' i' j' (fun (s : I') (_ : IW I' A' B' i' j' s) => IWPath s)
(fun (e : A') (_ : forally0 : B' e, IW I' A' B' i' j' (j' e y0))
(g : forally0 : B' e, IWPath (j' e y0)) =>
iwpath_sup e (funy0 : B' e => g y0))
(x; (a, b))
(IWPath_ind (fun (s : I') (_ : IWPath s) => IW I' A' B' i' j' s)
(fun (e : A') (_ : forallx0 : B' e, IWPath (j' e x0))
(g : forallc : B' e, IW I' A' B' i' j' (j' e c)) =>
iw_sup I' A' B' i' j' e (funy0 : B' e => g y0))
(x; (a, b)) y) =
y
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x a': A' b': forallx0 : B' a', IWPath (j' a' x0) IH: forallc : B' a',
IW_rect I' A' B' i' j' (fun (s : I') (_ : IW I' A' B' i' j' s) => IWPath s)
(fun (e : A') (_ : forally : B' e, IW I' A' B' i' j' (j' e y))
(g : forally : B' e, IWPath (j' e y)) =>
iwpath_sup e (funy : B' e => g y))
(j' a' c)
(IWPath_ind (fun (s : I') (_ : IWPath s) => IW I' A' B' i' j' s)
(fun (e : A') (_ : forallx0 : B' e, IWPath (j' e x0))
(g : forallc0 : B' e, IW I' A' B' i' j' (j' e c0)) =>
iw_sup I' A' B' i' j' e (funy : B' e => g y))
(j' a' c) (b' c)) =
b' c
IW_rect I' A' B' i' j' (fun (s : I') (_ : IW I' A' B' i' j' s) => IWPath s)
(fun (e : A') (_ : forally : B' e, IW I' A' B' i' j' (j' e y))
(g : forally : B' e, IWPath (j' e y)) =>
iwpath_sup e (funy : B' e => g y))
(i' a')
(IWPath_ind (fun (s : I') (_ : IWPath s) => IW I' A' B' i' j' s)
(fun (e : A') (_ : forallx0 : B' e, IWPath (j' e x0))
(g : forallc : B' e, IW I' A' B' i' j' (j' e c)) =>
iw_sup I' A' B' i' j' e (funy : B' e => g y))
(i' a') (iwpath_sup a' b')) =
iwpath_sup a' b'
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x a': A' b': forallx0 : B' a', IWPath (j' a' x0) IH: forallc : B' a',
IW_rect I' A' B' i' j' (fun (s : I') (_ : IW I' A' B' i' j' s) => IWPath s)
(fun (e : A') (_ : forally : B' e, IW I' A' B' i' j' (j' e y))
(g : forally : B' e, IWPath (j' e y)) =>
iwpath_sup e (funy : B' e => g y))
(j' a' c)
(IWPath_ind (fun (s : I') (_ : IWPath s) => IW I' A' B' i' j' s)
(fun (e : A') (_ : forallx0 : B' e, IWPath (j' e x0))
(g : forallc0 : B' e, IW I' A' B' i' j' (j' e c0)) =>
iw_sup I' A' B' i' j' e (funy : B' e => g y))
(j' a' c) (b' c)) =
b' c
IW_rect I' A' B' i' j' (fun (s : I') (_ : IW I' A' B' i' j' s) => IWPath s)
(fun (e : A') (_ : forally : B' e, IW I' A' B' i' j' (j' e y))
(g : forally : B' e, IWPath (j' e y)) =>
iwpath_sup e (funy : B' e => g y))
(i' a')
(iw_sup I' A' B' i' j' a'
(funy : B' a' =>
IWPath_ind (fun (s : I') (_ : IWPath s) => IW I' A' B' i' j' s)
(fun (e : A') (_ : forallx0 : B' e, IWPath (j' e x0))
(g : forallc : B' e, IW I' A' B' i' j' (j' e c)) =>
iw_sup I' A' B' i' j' e (funy0 : B' e => g y0))
(j' a' y) (b' y))) =
iwpath_sup a' b'
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x a': A' b': forallx0 : B' a', IWPath (j' a' x0) IH: forallc : B' a',
IW_rect I' A' B' i' j' (fun (s : I') (_ : IW I' A' B' i' j' s) => IWPath s)
(fun (e : A') (_ : forally : B' e, IW I' A' B' i' j' (j' e y))
(g : forally : B' e, IWPath (j' e y)) =>
iwpath_sup e (funy : B' e => g y))
(j' a' c)
(IWPath_ind (fun (s : I') (_ : IWPath s) => IW I' A' B' i' j' s)
(fun (e : A') (_ : forallx0 : B' e, IWPath (j' e x0))
(g : forallc0 : B' e, IW I' A' B' i' j' (j' e c0)) =>
iw_sup I' A' B' i' j' e (funy : B' e => g y))
(j' a' c) (b' c)) =
b' c
(funy : B' a' =>
IW_rect I' A' B' i' j' (fun (s : I') (_ : IW I' A' B' i' j' s) => IWPath s)
(fun (e : A') (_ : forally0 : B' e, IW I' A' B' i' j' (j' e y0))
(g : forally0 : B' e, IWPath (j' e y0)) =>
iwpath_sup e (funy0 : B' e => g y0))
(j' a' y)
(IWPath_ind (fun (s : I') (_ : IWPath s) => IW I' A' B' i' j' s)
(fun (e : A') (_ : forallx0 : B' e, IWPath (j' e x0))
(g : forallc : B' e, IW I' A' B' i' j' (j' e c)) =>
iw_sup I' A' B' i' j' e (funy0 : B' e => g y0))
(j' a' y) (b' y))) =
b'
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc0 : B e, IW I A B i j (j e c0)) *
(forallc0 : B e, IW I A B i j (j e c0))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c0 : B' k) => (j k.1 c0; (fst k.2 c0, snd k.2 c0)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x a': A' b': forallx0 : B' a', IWPath (j' a' x0) IH: forallc0 : B' a',
IW_rect I' A' B' i' j' (fun (s : I') (_ : IW I' A' B' i' j' s) => IWPath s)
(fun (e : A') (_ : forally : B' e, IW I' A' B' i' j' (j' e y))
(g : forally : B' e, IWPath (j' e y)) =>
iwpath_sup e (funy : B' e => g y))
(j' a' c0)
(IWPath_ind (fun (s : I') (_ : IWPath s) => IW I' A' B' i' j' s)
(fun (e : A') (_ : forallx0 : B' e, IWPath (j' e x0))
(g : forallc1 : B' e, IW I' A' B' i' j' (j' e c1)) =>
iw_sup I' A' B' i' j' e (funy : B' e => g y))
(j' a' c0) (b' c0)) =
b' c0 c: B' a'
IW_rect I' A' B' i' j' (fun (s : I') (_ : IW I' A' B' i' j' s) => IWPath s)
(fun (e : A') (_ : forally : B' e, IW I' A' B' i' j' (j' e y))
(g : forally : B' e, IWPath (j' e y)) =>
iwpath_sup e (funy : B' e => g y))
(j' a' c)
(IWPath_ind (fun (s : I') (_ : IWPath s) => IW I' A' B' i' j' s)
(fun (e : A') (_ : forallx0 : B' e, IWPath (j' e x0))
(g : forallc0 : B' e, IW I' A' B' i' j' (j' e c0)) =>
iw_sup I' A' B' i' j' e (funy : B' e => g y))
(j' a' c) (b' c)) =
b' c
apply IH.
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x
(funy : IWPath (x; (a, b)) =>
lets := (x; (a, b)) in
IWPath_ind (fun (s0 : I') (_ : IWPath s0) => IW I' A' B' i' j' s0)
(fun (e : A') (_ : forallx0 : B' e, IWPath (j' e x0))
(g : forallc : B' e, IW I' A' B' i' j' (j' e c)) =>
iw_sup I' A' B' i' j' e (funy0 : B' e => g y0))
s y)
o (funy : IW I' A' B' i' j' (x; (a, b)) =>
lets := (x; (a, b)) in
IW_rect I' A' B' i' j'
(fun (s0 : I') (_ : IW I' A' B' i' j' s0) => IWPath s0)
(fun (e : A') (_ : forally0 : B' e, IW I' A' B' i' j' (j' e y0))
(g : forally0 : B' e, IWPath (j' e y0)) =>
iwpath_sup e (funy0 : B' e => g y0))
s y) ==
idmap
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x y: IW I' A' B' i' j' (x; (a, b))
IWPath_ind (fun (s : I') (_ : IWPath s) => IW I' A' B' i' j' s)
(fun (e : A') (_ : forallx0 : B' e, IWPath (j' e x0))
(g : forallc : B' e, IW I' A' B' i' j' (j' e c)) =>
iw_sup I' A' B' i' j' e (funy0 : B' e => g y0))
(x; (a, b))
(IW_rect I' A' B' i' j'
(fun (s : I') (_ : IW I' A' B' i' j' s) => IWPath s)
(fun (e : A') (_ : forally0 : B' e, IW I' A' B' i' j' (j' e y0))
(g : forally0 : B' e, IWPath (j' e y0)) =>
iwpath_sup e (funy0 : B' e => g y0))
(x; (a, b)) y) =
y
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e0 : A &
(forallc : B e0, IW I A B i j (j e0 c)) *
(forallc : B e0, IW I A B i j (j e0 c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x e: A' f: forally : B' e, IW I' A' B' i' j' (j' e y) IH: forally : B' e,
IWPath_ind (fun (s : I') (_ : IWPath s) => IW I' A' B' i' j' s)
(fun (e0 : A') (_ : forallx0 : B' e0, IWPath (j' e0 x0))
(g : forallc : B' e0, IW I' A' B' i' j' (j' e0 c)) =>
iw_sup I' A' B' i' j' e0 (funy0 : B' e0 => g y0))
(j' e y)
(IW_rect I' A' B' i' j'
(fun (s : I') (_ : IW I' A' B' i' j' s) => IWPath s)
(fun (e0 : A') (_ : forally0 : B' e0, IW I' A' B' i' j' (j' e0 y0))
(g : forally0 : B' e0, IWPath (j' e0 y0)) =>
iwpath_sup e0 (funy0 : B' e0 => g y0))
(j' e y) (f y)) =
f y
IWPath_ind (fun (s : I') (_ : IWPath s) => IW I' A' B' i' j' s)
(fun (e0 : A') (_ : forallx0 : B' e0, IWPath (j' e0 x0))
(g : forallc : B' e0, IW I' A' B' i' j' (j' e0 c)) =>
iw_sup I' A' B' i' j' e0 (funy : B' e0 => g y))
(i' e)
(IW_rect I' A' B' i' j'
(fun (s : I') (_ : IW I' A' B' i' j' s) => IWPath s)
(fun (e0 : A') (_ : forally : B' e0, IW I' A' B' i' j' (j' e0 y))
(g : forally : B' e0, IWPath (j' e0 y)) =>
iwpath_sup e0 (funy : B' e0 => g y))
(i' e) (iw_sup I' A' B' i' j' e f)) =
iw_sup I' A' B' i' j' e f
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e0 : A &
(forallc : B e0, IW I A B i j (j e0 c)) *
(forallc : B e0, IW I A B i j (j e0 c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x e: A' f: forally : B' e, IW I' A' B' i' j' (j' e y) IH: forally : B' e,
IWPath_ind (fun (s : I') (_ : IWPath s) => IW I' A' B' i' j' s)
(fun (e0 : A') (_ : forallx0 : B' e0, IWPath (j' e0 x0))
(g : forallc : B' e0, IW I' A' B' i' j' (j' e0 c)) =>
iw_sup I' A' B' i' j' e0 (funy0 : B' e0 => g y0))
(j' e y)
(IW_rect I' A' B' i' j'
(fun (s : I') (_ : IW I' A' B' i' j' s) => IWPath s)
(fun (e0 : A') (_ : forally0 : B' e0, IW I' A' B' i' j' (j' e0 y0))
(g : forally0 : B' e0, IWPath (j' e0 y0)) =>
iwpath_sup e0 (funy0 : B' e0 => g y0))
(j' e y) (f y)) =
f y
iw_sup I' A' B' i' j' e
(funy : B' e =>
IWPath_ind (fun (s : I') (_ : IWPath s) => IW I' A' B' i' j' s)
(fun (e0 : A') (_ : forallx0 : B' e0, IWPath (j' e0 x0))
(g : forallc : B' e0, IW I' A' B' i' j' (j' e0 c)) =>
iw_sup I' A' B' i' j' e0 (funy0 : B' e0 => g y0))
(j' e y)
((fix F (y0 : I') (i0 : IW I' A' B' i' j' y0) {struct i0} : IWPath y0 :=
match i0 in (IW _ _ _ _ _ y1) return (IWPath y1) with
| @iw_sup _ _ _ _ _ x0 i1 =>
iwpath_sup x0 (funy1 : B' x0 => F (j' x0 y1) (i1 y1))
end)
(j' e y) (f y))) =
iw_sup I' A' B' i' j' e f
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e0 : A &
(forallc0 : B e0, IW I A B i j (j e0 c0)) *
(forallc0 : B e0, IW I A B i j (j e0 c0))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c0 : B' k) => (j k.1 c0; (fst k.2 c0, snd k.2 c0)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: I a, b: IW I A B i j x e: A' f: forally : B' e, IW I' A' B' i' j' (j' e y) IH: forally : B' e,
IWPath_ind (fun (s : I') (_ : IWPath s) => IW I' A' B' i' j' s)
(fun (e0 : A') (_ : forallx0 : B' e0, IWPath (j' e0 x0))
(g : forallc0 : B' e0, IW I' A' B' i' j' (j' e0 c0)) =>
iw_sup I' A' B' i' j' e0 (funy0 : B' e0 => g y0))
(j' e y)
(IW_rect I' A' B' i' j'
(fun (s : I') (_ : IW I' A' B' i' j' s) => IWPath s)
(fun (e0 : A') (_ : forally0 : B' e0, IW I' A' B' i' j' (j' e0 y0))
(g : forally0 : B' e0, IWPath (j' e0 y0)) =>
iwpath_sup e0 (funy0 : B' e0 => g y0))
(j' e y) (f y)) =
f y c: B' e
IWPath_ind (fun (s : I') (_ : IWPath s) => IW I' A' B' i' j' s)
(fun (e0 : A') (_ : forallx0 : B' e0, IWPath (j' e0 x0))
(g : forallc0 : B' e0, IW I' A' B' i' j' (j' e0 c0)) =>
iw_sup I' A' B' i' j' e0 (funy : B' e0 => g y))
(j' e c)
((fix F (y : I') (i0 : IW I' A' B' i' j' y) {struct i0} : IWPath y :=
match i0 in (IW _ _ _ _ _ y0) return (IWPath y0) with
| @iw_sup _ _ _ _ _ x0 i1 =>
iwpath_sup x0 (funy0 : B' x0 => F (j' x0 y0) (i1 y0))
end)
(j' e c) (f c)) =
f c
apply IH.Defined.(** ** Characterization of fiber *)(** We begin with two auxiliary lemmas that will be explained shortly. *)Local Definitionadjust_hfiber {XY} {f : X -> Y} {yz}
: hfiber f y -> y = z -> hfiber f z
:= fun '(x ; p) => match p with idpath => funq => (x ; q) end.
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX0 : A' => B X0.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type X, Y: Type f: X -> Y y: Y xp: hfiber f y
adjust_hfiber xp (1 : y = y) = xp
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX0 : A' => B X0.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type X, Y: Type f: X -> Y y: Y xp: hfiber f y
adjust_hfiber xp (1 : y = y) = xp
bydestruct xp as [x []].Defined.(** We wish to show an induction principle coming from the path type of the fiber. However to do this we need to be a bit more general by allowing the elements of the IW-type to differ in label up to equality. This allows us to do prove this induction principle easily, and later we will derive the induction principle where the labels are the same. *)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (lalb : I) (le : lb = la) (a : IW I A B i j la)
(b : IW I A B i j lb),
iw_to_hfiber_index la a = adjust_hfiber (iw_to_hfiber_index lb b) le -> Type h: forall (x : A) (ab : forally : B x, IW I A B i j (j x y)),
P (i x) (i x) 1 (iw_sup I A B i j x a) (iw_sup I A B i j x b) 1
forall (lalb : I) (le : lb = la) (a : IW I A B i j la)
(b : IW I A B i j lb)
(p : iw_to_hfiber_index la a = adjust_hfiber (iw_to_hfiber_index lb b) le),
P la lb le a b p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (lalb : I) (le : lb = la) (a : IW I A B i j la)
(b : IW I A B i j lb),
iw_to_hfiber_index la a = adjust_hfiber (iw_to_hfiber_index lb b) le -> Type h: forall (x : A) (ab : forally : B x, IW I A B i j (j x y)),
P (i x) (i x) 1 (iw_sup I A B i j x a) (iw_sup I A B i j x b) 1
forall (lalb : I) (le : lb = la) (a : IW I A B i j la)
(b : IW I A B i j lb)
(p : iw_to_hfiber_index la a = adjust_hfiber (iw_to_hfiber_index lb b) le),
P la lb le a b p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (la0lb0 : I) (le0 : lb0 = la0) (a0 : IW I A B i j la0)
(b0 : IW I A B i j lb0),
iw_to_hfiber_index la0 a0 = adjust_hfiber (iw_to_hfiber_index lb0 b0) le0 ->
Type h: forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
P (i x) (i x) 1 (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1 la, lb: I le: lb = la a: IW I A B i j la b: IW I A B i j lb
forallp : iw_to_hfiber_index la a = adjust_hfiber (iw_to_hfiber_index lb b) le,
P la lb le a b p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (lalb : I) (le0 : lb = la) (a : IW I A B i j la)
(b : IW I A B i j lb),
iw_to_hfiber_index la a = adjust_hfiber (iw_to_hfiber_index lb b) le0 -> Type h: forall (x : A) (ab : forally : B x, IW I A B i j (j x y)),
P (i x) (i x) 1 (iw_sup I A B i j x a) (iw_sup I A B i j x b) 1 xa, xb: A le: i xb = i xa cha: forally : B xa, IW I A B i j (j xa y) chb: forally : B xb, IW I A B i j (j xb y)
forallp : iw_to_hfiber_index (i xa) (iw_sup I A B i j xa cha) =
adjust_hfiber (iw_to_hfiber_index (i xb) (iw_sup I A B i j xb chb)) le,
P (i xa) (i xb) le (iw_sup I A B i j xa cha) (iw_sup I A B i j xb chb) p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (lalb : I) (le0 : lb = la) (a : IW I A B i j la)
(b : IW I A B i j lb),
iw_to_hfiber_index la a = adjust_hfiber (iw_to_hfiber_index lb b) le0 -> Type h: forall (x : A) (ab : forally : B x, IW I A B i j (j x y)),
P (i x) (i x) 1 (iw_sup I A B i j x a) (iw_sup I A B i j x b) 1 xa, xb: A le: i xb = i xa cha: forally : B xa, IW I A B i j (j xa y) chb: forally : B xb, IW I A B i j (j xb y) p: iw_to_hfiber_index (i xa) (iw_sup I A B i j xa cha) =
adjust_hfiber (iw_to_hfiber_index (i xb) (iw_sup I A B i j xb chb)) le
P (i xa) (i xb) le (iw_sup I A B i j xa cha) (iw_sup I A B i j xb chb) p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (lalb : I) (le0 : lb = la) (a : IW I A B i j la)
(b : IW I A B i j lb),
iw_to_hfiber_index la a = adjust_hfiber (iw_to_hfiber_index lb b) le0 -> Type h: forall (x : A) (ab : forally : B x, IW I A B i j (j x y)),
P (i x) (i x) 1 (iw_sup I A B i j x a) (iw_sup I A B i j x b) 1 xa, xb: A le: i xb = i xa cha: forally : B xa, IW I A B i j (j xa y) chb: forally : B xb, IW I A B i j (j xb y) p: iw_to_hfiber_index (i xa) (iw_sup I A B i j xa cha) =
adjust_hfiber (iw_to_hfiber_index (i xb) (iw_sup I A B i j xb chb)) le
forallchb0 : forally : B (iw_to_hfiber_index (i xa) (iw_sup I A B i j xa cha)).1,
IW I A B i j
(j (iw_to_hfiber_index (i xa) (iw_sup I A B i j xa cha)).1 y),
P (i xa) (i (iw_to_hfiber_index (i xa) (iw_sup I A B i j xa cha)).1)
(iw_to_hfiber_index (i xa) (iw_sup I A B i j xa cha)).2
(iw_sup I A B i j xa cha)
(iw_sup I A B i j (iw_to_hfiber_index (i xa) (iw_sup I A B i j xa cha)).1
chb0)
1
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forall (lalb : I) (le0 : lb = la) (a : IW I A B i j la)
(b : IW I A B i j lb),
iw_to_hfiber_index la a = adjust_hfiber (iw_to_hfiber_index lb b) le0 -> Type h: forall (x0 : A) (ab : forally : B x0, IW I A B i j (j x0 y)),
P (i x0) (i x0) 1 (iw_sup I A B i j x0 a) (iw_sup I A B i j x0 b) 1 xa, xb: A le: i xb = i xa cha: forally : B xa, IW I A B i j (j xa y) chb: forally : B xb, IW I A B i j (j xb y) p: iw_to_hfiber_index (i xa) (iw_sup I A B i j xa cha) =
adjust_hfiber (iw_to_hfiber_index (i xb) (iw_sup I A B i j xb chb)) le x: forally : B (iw_to_hfiber_index (i xa) (iw_sup I A B i j xa cha)).1,
IW I A B i j (j (iw_to_hfiber_index (i xa) (iw_sup I A B i j xa cha)).1 y)
P (i xa) (i (iw_to_hfiber_index (i xa) (iw_sup I A B i j xa cha)).1)
(iw_to_hfiber_index (i xa) (iw_sup I A B i j xa cha)).2
(iw_sup I A B i j xa cha)
(iw_sup I A B i j (iw_to_hfiber_index (i xa) (iw_sup I A B i j xa cha)).1 x)
1
apply h.Defined.(** Induction principle for paths in the fiber. *)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (l : I) (ab : IW I A B i j l),
iw_to_hfiber_index l a = iw_to_hfiber_index l b -> Type h: forall (x : A) (ab : forally : B x, IW I A B i j (j x y)),
P (i x) (iw_sup I A B i j x a) (iw_sup I A B i j x b) 1
forall (l : I) (ab : IW I A B i j l)
(p : iw_to_hfiber_index l a = iw_to_hfiber_index l b),
P l a b p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (l : I) (ab : IW I A B i j l),
iw_to_hfiber_index l a = iw_to_hfiber_index l b -> Type h: forall (x : A) (ab : forally : B x, IW I A B i j (j x y)),
P (i x) (iw_sup I A B i j x a) (iw_sup I A B i j x b) 1
forall (l : I) (ab : IW I A B i j l)
(p : iw_to_hfiber_index l a = iw_to_hfiber_index l b),
P l a b p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0),
iw_to_hfiber_index l0 a0 = iw_to_hfiber_index l0 b0 -> Type h: forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
P (i x) (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1 l: I a, b: IW I A B i j l p: iw_to_hfiber_index l a = iw_to_hfiber_index l b
P l a b p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0),
iw_to_hfiber_index l0 a0 = iw_to_hfiber_index l0 b0 -> Type h: forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
P (i x) (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1 l: I a, b: IW I A B i j l p: iw_to_hfiber_index l a = iw_to_hfiber_index l b
forall (lalb : I) (le : lb = la) (a0 : IW I A B i j la)
(b0 : IW I A B i j lb),
iw_to_hfiber_index la a0 = adjust_hfiber (iw_to_hfiber_index lb b0) le ->
Type
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0),
iw_to_hfiber_index l0 a0 = iw_to_hfiber_index l0 b0 -> Type h: forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
P (i x) (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1 l: I a, b: IW I A B i j l p: iw_to_hfiber_index l a = iw_to_hfiber_index l b Q:= ?Goal: forall (lalb : I) (le : lb = la) (a0 : IW I A B i j la)
(b0 : IW I A B i j lb),
iw_to_hfiber_index la a0 = adjust_hfiber (iw_to_hfiber_index lb b0) le ->
Type
P l a b p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0),
iw_to_hfiber_index l0 a0 = iw_to_hfiber_index l0 b0 -> Type h: forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
P (i x) (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1 l: I a, b: IW I A B i j l p: iw_to_hfiber_index l a = iw_to_hfiber_index l b
forall (lalb : I) (le : lb = la) (a0 : IW I A B i j la)
(b0 : IW I A B i j lb),
iw_to_hfiber_index la a0 = adjust_hfiber (iw_to_hfiber_index lb b0) le ->
Type
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0),
iw_to_hfiber_index l0 a0 = iw_to_hfiber_index l0 b0 -> Type h: forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
P (i x) (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1 l: I a, b: IW I A B i j l p: iw_to_hfiber_index l a = iw_to_hfiber_index l b la, lb: I le: lb = la
forall (a0 : IW I A B i j la) (b0 : IW I A B i j lb),
iw_to_hfiber_index la a0 = adjust_hfiber (iw_to_hfiber_index lb b0) le ->
Type
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0),
iw_to_hfiber_index l0 a0 = iw_to_hfiber_index l0 b0 -> Type h: forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
P (i x) (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1 l: I a, b: IW I A B i j l p: iw_to_hfiber_index l a = iw_to_hfiber_index l b lb: I
foralla0b0 : IW I A B i j lb,
iw_to_hfiber_index lb a0 = adjust_hfiber (iw_to_hfiber_index lb b0) 1 -> Type
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0),
iw_to_hfiber_index l0 a0 = iw_to_hfiber_index l0 b0 -> Type h: forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
P (i x) (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1 l: I a, b: IW I A B i j l p: iw_to_hfiber_index l a = iw_to_hfiber_index l b lb: I a', b': IW I A B i j lb p': iw_to_hfiber_index lb a' = adjust_hfiber (iw_to_hfiber_index lb b') 1
Type
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0),
iw_to_hfiber_index l0 a0 = iw_to_hfiber_index l0 b0 -> Type h: forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
P (i x) (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1 l: I a, b: IW I A B i j l p: iw_to_hfiber_index l a = iw_to_hfiber_index l b lb: I a', b': IW I A B i j lb p': iw_to_hfiber_index lb a' = adjust_hfiber (iw_to_hfiber_index lb b') 1
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0),
iw_to_hfiber_index l0 a0 = iw_to_hfiber_index l0 b0 -> Type h: forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
P (i x) (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1 l: I a, b: IW I A B i j l p: iw_to_hfiber_index l a = iw_to_hfiber_index l b Q:= fun (lalb : I) (le : lb = la) =>
match
le as p0 in (_ = i0)
return
(forall (a0 : IW I A B i j i0) (b0 : IW I A B i j lb),
iw_to_hfiber_index i0 a0 = adjust_hfiber (iw_to_hfiber_index lb b0) p0 ->
Type)
with
| 1 =>
fun (a'b' : IW I A B i j lb)
(p' : iw_to_hfiber_index lb a' =
adjust_hfiber (iw_to_hfiber_index lb b') 1) =>
P lb a' b' (p' @ adjust_hfiber_idpath)
end: forall (lalb : I) (le : lb = la) (a0 : IW I A B i j la)
(b0 : IW I A B i j lb),
iw_to_hfiber_index la a0 = adjust_hfiber (iw_to_hfiber_index lb b0) le ->
Type
P l a b p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0),
iw_to_hfiber_index l0 a0 = iw_to_hfiber_index l0 b0 -> Type h: forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
P (i x) (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1 l: I a, b: IW I A B i j l p: iw_to_hfiber_index l a = iw_to_hfiber_index l b Q:= fun (lalb : I) (le : lb = la) =>
match
le as p0 in (_ = i0)
return
(forall (a0 : IW I A B i j i0) (b0 : IW I A B i j lb),
iw_to_hfiber_index i0 a0 = adjust_hfiber (iw_to_hfiber_index lb b0) p0 ->
Type)
with
| 1 =>
fun (a'b' : IW I A B i j lb)
(p' : iw_to_hfiber_index lb a' =
adjust_hfiber (iw_to_hfiber_index lb b') 1) =>
P lb a' b' (p' @ adjust_hfiber_idpath)
end: forall (lalb : I) (le : lb = la) (a0 : IW I A B i j la)
(b0 : IW I A B i j lb),
iw_to_hfiber_index la a0 = adjust_hfiber (iw_to_hfiber_index lb b0) le ->
Type
forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
Q (i x) (i x) 1 (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0),
iw_to_hfiber_index l0 a0 = iw_to_hfiber_index l0 b0 -> Type h: forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
P (i x) (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1 l: I a, b: IW I A B i j l p: iw_to_hfiber_index l a = iw_to_hfiber_index l b Q:= fun (lalb : I) (le : lb = la) =>
match
le as p0 in (_ = i0)
return
(forall (a0 : IW I A B i j i0) (b0 : IW I A B i j lb),
iw_to_hfiber_index i0 a0 = adjust_hfiber (iw_to_hfiber_index lb b0) p0 ->
Type)
with
| 1 =>
fun (a'b' : IW I A B i j lb)
(p' : iw_to_hfiber_index lb a' =
adjust_hfiber (iw_to_hfiber_index lb b') 1) =>
P lb a' b' (p' @ adjust_hfiber_idpath)
end: forall (lalb : I) (le : lb = la) (a0 : IW I A B i j la)
(b0 : IW I A B i j lb),
iw_to_hfiber_index la a0 = adjust_hfiber (iw_to_hfiber_index lb b0) le ->
Type h':= ?Goal: forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
Q (i x) (i x) 1 (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1
P l a b p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0),
iw_to_hfiber_index l0 a0 = iw_to_hfiber_index l0 b0 -> Type h: forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
P (i x) (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1 l: I a, b: IW I A B i j l p: iw_to_hfiber_index l a = iw_to_hfiber_index l b Q:= fun (lalb : I) (le : lb = la) =>
match
le as p0 in (_ = i0)
return
(forall (a0 : IW I A B i j i0) (b0 : IW I A B i j lb),
iw_to_hfiber_index i0 a0 = adjust_hfiber (iw_to_hfiber_index lb b0) p0 ->
Type)
with
| 1 =>
fun (a'b' : IW I A B i j lb)
(p' : iw_to_hfiber_index lb a' =
adjust_hfiber (iw_to_hfiber_index lb b') 1) =>
P lb a' b' (p' @ adjust_hfiber_idpath)
end: forall (lalb : I) (le : lb = la) (a0 : IW I A B i j la)
(b0 : IW I A B i j lb),
iw_to_hfiber_index la a0 = adjust_hfiber (iw_to_hfiber_index lb b0) le ->
Type
forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
Q (i x) (i x) 1 (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0),
iw_to_hfiber_index l0 a0 = iw_to_hfiber_index l0 b0 -> Type h: forall (x0 : A) (a0b0 : forally : B x0, IW I A B i j (j x0 y)),
P (i x0) (iw_sup I A B i j x0 a0) (iw_sup I A B i j x0 b0) 1 l: I a, b: IW I A B i j l p: iw_to_hfiber_index l a = iw_to_hfiber_index l b Q:= fun (lalb : I) (le : lb = la) =>
match
le as p0 in (_ = i0)
return
(forall (a0 : IW I A B i j i0) (b0 : IW I A B i j lb),
iw_to_hfiber_index i0 a0 = adjust_hfiber (iw_to_hfiber_index lb b0) p0 ->
Type)
with
| 1 =>
fun (a'0b'0 : IW I A B i j lb)
(p' : iw_to_hfiber_index lb a'0 =
adjust_hfiber (iw_to_hfiber_index lb b'0) 1) =>
P lb a'0 b'0 (p' @ adjust_hfiber_idpath)
end: forall (lalb : I) (le : lb = la) (a0 : IW I A B i j la)
(b0 : IW I A B i j lb),
iw_to_hfiber_index la a0 = adjust_hfiber (iw_to_hfiber_index lb b0) le ->
Type x: A a', b': forally : B x, IW I A B i j (j x y)
Q (i x) (i x) 1 (iw_sup I A B i j x a') (iw_sup I A B i j x b') 1
apply h.
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0),
iw_to_hfiber_index l0 a0 = iw_to_hfiber_index l0 b0 -> Type h: forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
P (i x) (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1 l: I a, b: IW I A B i j l p: iw_to_hfiber_index l a = iw_to_hfiber_index l b Q:= fun (lalb : I) (le : lb = la) =>
match
le as p0 in (_ = i0)
return
(forall (a0 : IW I A B i j i0) (b0 : IW I A B i j lb),
iw_to_hfiber_index i0 a0 = adjust_hfiber (iw_to_hfiber_index lb b0) p0 ->
Type)
with
| 1 =>
fun (a'b' : IW I A B i j lb)
(p' : iw_to_hfiber_index lb a' =
adjust_hfiber (iw_to_hfiber_index lb b') 1) =>
P lb a' b' (p' @ adjust_hfiber_idpath)
end: forall (lalb : I) (le : lb = la) (a0 : IW I A B i j la)
(b0 : IW I A B i j lb),
iw_to_hfiber_index la a0 = adjust_hfiber (iw_to_hfiber_index lb b0) le ->
Type h':= fun (x : A) (a'b' : forally : B x, IW I A B i j (j x y)) => h x a' b': forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
Q (i x) (i x) 1 (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1
P l a b p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0),
iw_to_hfiber_index l0 a0 = iw_to_hfiber_index l0 b0 -> Type h: forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
P (i x) (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1 l: I a, b: IW I A B i j l p: iw_to_hfiber_index l a = iw_to_hfiber_index l b Q:= fun (lalb : I) (le : lb = la) =>
match
le as p0 in (_ = i0)
return
(forall (a0 : IW I A B i j i0) (b0 : IW I A B i j lb),
iw_to_hfiber_index i0 a0 = adjust_hfiber (iw_to_hfiber_index lb b0) p0 ->
Type)
with
| 1 =>
fun (a'b' : IW I A B i j lb)
(p' : iw_to_hfiber_index lb a' =
adjust_hfiber (iw_to_hfiber_index lb b') 1) =>
P lb a' b' (p' @ adjust_hfiber_idpath)
end: forall (lalb : I) (le : lb = la) (a0 : IW I A B i j la)
(b0 : IW I A B i j lb),
iw_to_hfiber_index la a0 = adjust_hfiber (iw_to_hfiber_index lb b0) le ->
Type h':= fun (x : A) (a'b' : forally : B x, IW I A B i j (j x y)) => h x a' b': forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
Q (i x) (i x) 1 (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1 q:= path_iw_to_hfiber_ind' Q h' l l 1 a b (p @ adjust_hfiber_idpath^): Q l l 1 a b (p @ adjust_hfiber_idpath^)
P l a b p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0),
iw_to_hfiber_index l0 a0 = iw_to_hfiber_index l0 b0 -> Type h: forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
P (i x) (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1 l: I a, b: IW I A B i j l p: iw_to_hfiber_index l a = iw_to_hfiber_index l b Q:= fun (lalb : I) (le : lb = la) =>
match
le as p0 in (_ = i0)
return
(forall (a0 : IW I A B i j i0) (b0 : IW I A B i j lb),
iw_to_hfiber_index i0 a0 = adjust_hfiber (iw_to_hfiber_index lb b0) p0 ->
Type)
with
| 1 =>
fun (a'b' : IW I A B i j lb)
(p' : iw_to_hfiber_index lb a' =
adjust_hfiber (iw_to_hfiber_index lb b') 1) =>
P lb a' b' (p' @ adjust_hfiber_idpath)
end: forall (lalb : I) (le : lb = la) (a0 : IW I A B i j la)
(b0 : IW I A B i j lb),
iw_to_hfiber_index la a0 = adjust_hfiber (iw_to_hfiber_index lb b0) le ->
Type h':= fun (x : A) (a'b' : forally : B x, IW I A B i j (j x y)) => h x a' b': forall (x : A) (a0b0 : forally : B x, IW I A B i j (j x y)),
Q (i x) (i x) 1 (iw_sup I A B i j x a0) (iw_sup I A B i j x b0) 1 q:= path_iw_to_hfiber_ind' Q h' l l 1 a b (p @ adjust_hfiber_idpath^): Q l l 1 a b (p @ adjust_hfiber_idpath^)
(p @ adjust_hfiber_idpath^) @ adjust_hfiber_idpath = p
apply concat_pV_p.Defined.(** Induction principle for families over hfiber of i' *)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (l : I) (ab : IW I A B i j l), hfiber i' (l; (a, b)) -> Type h: forall (x : A) (ab : forally : B x, IW I A B i j (j x y)),
P (i x) (iw_sup I A B i j x a) (iw_sup I A B i j x b) ((x; (a, b)); 1)
forall (l : I) (ab : IW I A B i j l) (p : hfiber i' (l; (a, b))), P l a b p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type P: forall (l : I) (ab : IW I A B i j l), hfiber i' (l; (a, b)) -> Type h: forall (x : A) (ab : forally : B x, IW I A B i j (j x y)),
P (i x) (iw_sup I A B i j x a) (iw_sup I A B i j x b) ((x; (a, b)); 1)
forall (l : I) (ab : IW I A B i j l) (p : hfiber i' (l; (a, b))), P l a b p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0), hfiber i' (l0; (a0, b0)) -> Type h: forall (x0 : A) (a0b0 : forally0 : B x0, IW I A B i j (j x0 y0)),
P (i x0) (iw_sup I A B i j x0 a0) (iw_sup I A B i j x0 b0)
((x0; (a0, b0)); 1) l: I a, b: IW I A B i j l x: A y, z: forallc : B x, IW I A B i j (j x c) p: i' (x; (y, z)) = (l; (a, b))
P l a b ((x; (y, z)); p)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0), hfiber i' (l0; (a0, b0)) -> Type h: forall (x0 : A) (a0b0 : forally0 : B x0, IW I A B i j (j x0 y0)),
P (i x0) (iw_sup I A B i j x0 a0) (iw_sup I A B i j x0 b0)
((x0; (a0, b0)); 1) l: I a, b: IW I A B i j l x: A y, z: forallc : B x, IW I A B i j (j x c) p: (i x; (iw_sup I A B i j x y, iw_sup I A B i j x z)) = (l; (a, b))
P l a b ((x; (y, z)); p)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0), hfiber i' (l0; (a0, b0)) -> Type h: forall (x0 : A) (a0b0 : forally0 : B x0, IW I A B i j (j x0 y0)),
P (i x0) (iw_sup I A B i j x0 a0) (iw_sup I A B i j x0 b0)
((x0; (a0, b0)); 1) l: I a, b: IW I A B i j l x: A y, z: forallc : B x, IW I A B i j (j x c)
forallp : (i x; (iw_sup I A B i j x y, iw_sup I A B i j x z)) = (l; (a, b)),
P l a b ((x; (y, z)); p)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0), hfiber i' (l0; (a0, b0)) -> Type h: forall (x0 : A) (a0b0 : forally0 : B x0, IW I A B i j (j x0 y0)),
P (i x0) (iw_sup I A B i j x0 a0) (iw_sup I A B i j x0 b0)
((x0; (a0, b0)); 1) l: I a, b: IW I A B i j l x: A y, z: forallc : B x, IW I A B i j (j x c)
forallx0 : {p
: (i x; (iw_sup I A B i j x y, iw_sup I A B i j x z)).1 = (l; (a, b)).1
&
transport (funk : I => IW I A B i j k * IW I A B i j k) p
(i x; (iw_sup I A B i j x y, iw_sup I A B i j x z)).2 =
(l; (a, b)).2},
P l a b
((x; (y, z));
equiv_path_sigma (funk : I => IW I A B i j k * IW I A B i j k)
(i x; (iw_sup I A B i j x y, iw_sup I A B i j x z))
(l; (a, b)) x0)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forall (l0 : I) (a0b0 : IW I A B i j l0), hfiber i' (l0; (a0, b0)) -> Type h: forall (x0 : A) (a0b0 : forally0 : B x0, IW I A B i j (j x0 y0)),
P (i x0) (iw_sup I A B i j x0 a0) (iw_sup I A B i j x0 b0)
((x0; (a0, b0)); 1) l: I a, b: IW I A B i j l x: A y, z: forallc : B x, IW I A B i j (j x c) p: i x = l q: transport (funk : I => IW I A B i j k * IW I A B i j k) p
(iw_sup I A B i j x y, iw_sup I A B i j x z) =
(a, b)
P l a b
((x; (y, z));
equiv_path_sigma (funk : I => IW I A B i j k * IW I A B i j k)
(i x; (iw_sup I A B i j x y, iw_sup I A B i j x z))
(l; (a, b)) (p; q))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forall (l : I) (a0b0 : IW I A B i j l), hfiber i' (l; (a0, b0)) -> Type h: forall (x0 : A) (a0b0 : forally0 : B x0, IW I A B i j (j x0 y0)),
P (i x0) (iw_sup I A B i j x0 a0) (iw_sup I A B i j x0 b0)
((x0; (a0, b0)); 1) x: A a, b: IW I A B i j (i x) y, z: forallc : B x, IW I A B i j (j x c) q: transport (funk : I => IW I A B i j k * IW I A B i j k) 1
(iw_sup I A B i j x y, iw_sup I A B i j x z) =
(a, b)
P (i x) a b
((x; (y, z));
equiv_path_sigma (funk : I => IW I A B i j k * IW I A B i j k)
(i x; (iw_sup I A B i j x y, iw_sup I A B i j x z))
(i x; (a, b)) (1; q))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forall (l : I) (a0b0 : IW I A B i j l), hfiber i' (l; (a0, b0)) -> Type h: forall (x0 : A) (a0b0 : forally0 : B x0, IW I A B i j (j x0 y0)),
P (i x0) (iw_sup I A B i j x0 a0) (iw_sup I A B i j x0 b0)
((x0; (a0, b0)); 1) x: A a, b: IW I A B i j (i x) y, z: forallc : B x, IW I A B i j (j x c)
forallq : (iw_sup I A B i j x y, iw_sup I A B i j x z) = (a, b),
P (i x) a b
((x; (y, z));
path_sigma_uncurried (funk : I => IW I A B i j k * IW I A B i j k)
(i x; (iw_sup I A B i j x y, iw_sup I A B i j x z))
(i x; (a, b)) (1; q))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forall (l : I) (a0b0 : IW I A B i j l), hfiber i' (l; (a0, b0)) -> Type h: forall (x0 : A) (a0b0 : forally0 : B x0, IW I A B i j (j x0 y0)),
P (i x0) (iw_sup I A B i j x0 a0) (iw_sup I A B i j x0 b0)
((x0; (a0, b0)); 1) x: A a, b: IW I A B i j (i x) y, z: forallc : B x, IW I A B i j (j x c)
forallx0 : (fst (iw_sup I A B i j x y, iw_sup I A B i j x z) = fst (a, b)) *
(snd (iw_sup I A B i j x y, iw_sup I A B i j x z) = snd (a, b)),
P (i x) a b
((x; (y, z));
path_sigma_uncurried (funk : I => IW I A B i j k * IW I A B i j k)
(i x; (iw_sup I A B i j x y, iw_sup I A B i j x z))
(i x; (a, b))
(1;
equiv_path_prod (iw_sup I A B i j x y, iw_sup I A B i j x z) (a, b) x0))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forall (l : I) (a0b0 : IW I A B i j l), hfiber i' (l; (a0, b0)) -> Type h: forall (x0 : A) (a0b0 : forally0 : B x0, IW I A B i j (j x0 y0)),
P (i x0) (iw_sup I A B i j x0 a0) (iw_sup I A B i j x0 b0)
((x0; (a0, b0)); 1) x: A a, b: IW I A B i j (i x) y, z: forallc : B x, IW I A B i j (j x c) p: iw_sup I A B i j x y = a q: iw_sup I A B i j x z = b
P (i x) a b
((x; (y, z));
path_sigma_uncurried (funk : I => IW I A B i j k * IW I A B i j k)
(i x; (iw_sup I A B i j x y, iw_sup I A B i j x z))
(i x; (a, b))
(1;
path_prod_uncurried (iw_sup I A B i j x y, iw_sup I A B i j x z)
(a, b) (p, q)))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type P: forall (l : I) (ab : IW I A B i j l), hfiber i' (l; (a, b)) -> Type h: forall (x0 : A) (ab : forally0 : B x0, IW I A B i j (j x0 y0)),
P (i x0) (iw_sup I A B i j x0 a) (iw_sup I A B i j x0 b) ((x0; (a, b)); 1) x: A y, z: forallc : B x, IW I A B i j (j x c)
P (i x) (iw_sup I A B i j x y) (iw_sup I A B i j x z)
((x; (y, z));
path_sigma_uncurried (funk : I => IW I A B i j k * IW I A B i j k)
(i x; (iw_sup I A B i j x y, iw_sup I A B i j x z))
(i x; (iw_sup I A B i j x y, iw_sup I A B i j x z))
(1;
path_prod_uncurried (iw_sup I A B i j x y, iw_sup I A B i j x z)
(iw_sup I A B i j x y, iw_sup I A B i j x z)
(1, 1)))
apply h.Defined.Local Definitionpath_iw_to_hfiberlab
: iw_to_hfiber_index l a = iw_to_hfiber_index l b -> hfiber i' (l; (a, b))
:= path_iw_to_hfiber_ind (funlab_ => hfiber i' (l ; (a, b)))
(funxab => ((x ; (a, b)); idpath)) l a b.Local Definitionhfiber_to_path_iwlab
: hfiber i' (l; (a, b)) -> iw_to_hfiber_index l a = iw_to_hfiber_index l b
:= hfiber_ind
(funlab_ => iw_to_hfiber_index l a = iw_to_hfiber_index l b)
(funxab => idpath) l a b.
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type
forall (l : I) (ab : IW I A B i j l) (p : hfiber i' (l; (a, b))),
path_iw_to_hfiber l a b (hfiber_to_path_iw l a b p) = p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type
forall (l : I) (ab : IW I A B i j l) (p : hfiber i' (l; (a, b))),
path_iw_to_hfiber l a b (hfiber_to_path_iw l a b p) = p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type
forall (x : A) (ab : forally : B x, IW I A B i j (j x y)),
path_iw_to_hfiber (i x) (iw_sup I A B i j x a) (iw_sup I A B i j x b)
(hfiber_to_path_iw (i x) (iw_sup I A B i j x a)
(iw_sup I A B i j x b) ((x; (a, b)); 1)) =
((x; (a, b)); 1)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: A a, b: forally : B x, IW I A B i j (j x y)
path_iw_to_hfiber (i x) (iw_sup I A B i j x a) (iw_sup I A B i j x b)
(hfiber_to_path_iw (i x) (iw_sup I A B i j x a)
(iw_sup I A B i j x b) ((x; (a, b)); 1)) =
((x; (a, b)); 1)
reflexivity.Defined.
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type
forall (l : I) (ab : IW I A B i j l)
(p : iw_to_hfiber_index l a = iw_to_hfiber_index l b),
hfiber_to_path_iw l a b (path_iw_to_hfiber l a b p) = p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type
forall (l : I) (ab : IW I A B i j l)
(p : iw_to_hfiber_index l a = iw_to_hfiber_index l b),
hfiber_to_path_iw l a b (path_iw_to_hfiber l a b p) = p
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type
forall (x : A) (ab : forally : B x, IW I A B i j (j x y)),
hfiber_to_path_iw (i x) (iw_sup I A B i j x a) (iw_sup I A B i j x b)
(path_iw_to_hfiber (i x) (iw_sup I A B i j x a) (iw_sup I A B i j x b) 1) =
1
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx0 : I' => fst x0.2 = snd x0.2: I' -> Type x: A a, b: forally : B x, IW I A B i j (j x y)
hfiber_to_path_iw (i x) (iw_sup I A B i j x a) (iw_sup I A B i j x b)
(path_iw_to_hfiber (i x) (iw_sup I A B i j x a) (iw_sup I A B i j x b) 1) =
1
reflexivity.Defined.(** The path type of the fibers of [i] is equivalent to the fibers of [i']. *)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type l: I a, b: IW I A B i j l
iw_to_hfiber_index l a = iw_to_hfiber_index l b <~> hfiber i' (l; (a, b))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type l: I a, b: IW I A B i j l
iw_to_hfiber_index l a = iw_to_hfiber_index l b <~> hfiber i' (l; (a, b))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type l: I a, b: IW I A B i j l
iw_to_hfiber_index l a = iw_to_hfiber_index l b -> hfiber i' (l; (a, b))
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type l: I a, b: IW I A B i j l
hfiber i' (l; (a, b)) -> iw_to_hfiber_index l a = iw_to_hfiber_index l b
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type l: I a, b: IW I A B i j l
?f o ?g == idmap
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type l: I a, b: IW I A B i j l
?g o ?f == idmap
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type l: I a, b: IW I A B i j l
iw_to_hfiber_index l a = iw_to_hfiber_index l b -> hfiber i' (l; (a, b))
apply path_iw_to_hfiber.
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type l: I a, b: IW I A B i j l
hfiber i' (l; (a, b)) -> iw_to_hfiber_index l a = iw_to_hfiber_index l b
apply hfiber_to_path_iw.
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type l: I a, b: IW I A B i j l
path_iw_to_hfiber l a b o hfiber_to_path_iw l a b == idmap
rapply path_iw_to_hfiber_to_path_iw.
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I I':= {k : I & IW I A B i j k * IW I A B i j k}: Type A':= {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}: Type B':= funX : A' => B X.1: A' -> Type i':= functor_sigma i
(funa0 : A => functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)): A' -> I' j':= fun (k : A') (c : B' k) => (j k.1 c; (fst k.2 c, snd k.2 c)): forallk : A', B' k -> I' IWPath:= funx : I' => fst x.2 = snd x.2: I' -> Type l: I a, b: IW I A B i j l
hfiber_to_path_iw l a b o path_iw_to_hfiber l a b == idmap
rapply hfiber_to_path_iw_to_hfiber.Defined.EndPaths.(** Some properties of the (fibers of the) index map [i] hold for the IW-type as well. For example, if [i] is an embedding then the corresponding IW-type is a hprop. *)(** ** IW-types preserve truncation *)(** We can show that if the index map is an embedding then the IW-type is a hprop. *)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I h: IsEmbedding i
forallx : I, IsHProp (IW I A B i j x)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I h: IsEmbedding i
forallx : I, IsHProp (IW I A B i j x)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I h: IsEmbedding i l: I
IsHProp (IW I A B i j l)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I h: IsEmbedding i l: I
forallxy : IW I A B i j l, x = y
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I h: IsEmbedding i l: I x: IW I A B i j l
forally : IW I A B i j l, x = y
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I h: IsEmbedding i x: A x': forally : B x, IW I A B i j (j x y) IHx: forall (y : B x) (y0 : IW I A B i j (j x y)), x' y = y0
forally : IW I A B i j (i x), iw_sup I A B i j x x' = y
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I h: IsEmbedding i x: A x': forally0 : B x, IW I A B i j (j x y0) IHx: forall (y0 : B x) (y1 : IW I A B i j (j x y0)), x' y0 = y1 y: IW I A B i j (i x)
iw_sup I A B i j x x' = y
(** We need to induct on y and at the same time generalize the goal to become a dependent equality. This can be difficult to do with tactics so we just refine the corresponding match statement. All we have done is turn the RHS into a transport over an equality allowing the induction on y to go through. *)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I h: IsEmbedding i x: A x': forally1 : B x, IW I A B i j (j x y1) IHx: forall (y1 : B x) (y2 : IW I A B i j (j x y1)), x' y1 = y2 y0: IW I A B i j (i x) y: A y': forally1 : B y, IW I A B i j (j y y1)
forallq : i y = i x,
iw_sup I A B i j x x' = transport (IW I A B i j) q (iw_sup I A B i j y y')
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I h: IsEmbedding i x: A x': forally1 : B x, IW I A B i j (j x y1) IHx: forall (y1 : B x) (y2 : IW I A B i j (j x y1)), x' y1 = y2 y0: IW I A B i j (i x) y: A y': forally1 : B y, IW I A B i j (j y y1) q: i y = i x
iw_sup I A B i j x x' = transport (IW I A B i j) q (iw_sup I A B i j y y')
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I h: IsEmbedding i x: A x': forally1 : B x, IW I A B i j (j x y1) IHx: forall (y1 : B x) (y2 : IW I A B i j (j x y1)), x' y1 = y2 y0: IW I A B i j (i x) y: A y': forally1 : B y, IW I A B i j (j y y1) q: i y = i x r:= path_ishprop (x; 1) (y; q): (x; 1) = (y; q)
iw_sup I A B i j x x' = transport (IW I A B i j) q (iw_sup I A B i j y y')
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I h: IsEmbedding i x: A x': forally1 : B x, IW I A B i j (j x y1) IHx: forall (y1 : B x) (y2 : IW I A B i j (j x y1)), x' y1 = y2 y0: IW I A B i j (i x) y: A y': forally1 : B y, IW I A B i j (j y y1) q: i y = i x r:= path_ishprop (x; 1) (y; q): (x; 1) = (y; q) r2:= r ..2: transport (funx0 : A => i x0 = i x) r ..11 = q
iw_sup I A B i j x x' = transport (IW I A B i j) q (iw_sup I A B i j y y')
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I h: IsEmbedding i x: A x': forally1 : B x, IW I A B i j (j x y1) IHx: forall (y1 : B x) (y2 : IW I A B i j (j x y1)), x' y1 = y2 y0: IW I A B i j (i x) y: A y': forally1 : B y, IW I A B i j (j y y1) q: i y = i x r:= path_ishprop (x; 1) (y; q): (x; 1) = (y; q) r1:= r ..1: x = y r2:= r ..2: transport (funx0 : A => i x0 = i x) r1 1 = q
iw_sup I A B i j x x' = transport (IW I A B i j) q (iw_sup I A B i j y y')
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I h: IsEmbedding i x: A x': forally1 : B x, IW I A B i j (j x y1) IHx: forall (y1 : B x) (y2 : IW I A B i j (j x y1)), x' y1 = y2 y0: IW I A B i j (i x) y: A y': forally1 : B y, IW I A B i j (j y y1) q: i y = i x r:= path_ishprop (x; 1) (y; q): (x; 1) = (y; q) r1: x = y r2: transport (funx0 : A => i x0 = i x) r1 1 = q
iw_sup I A B i j x x' = transport (IW I A B i j) q (iw_sup I A B i j y y')
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I h: IsEmbedding i x: A x': forally : B x, IW I A B i j (j x y) IHx: forall (y : B x) (y1 : IW I A B i j (j x y)), x' y = y1 y0: IW I A B i j (i x) y': forally : B x, IW I A B i j (j x y) q: i x = i x r:= path_ishprop (x; 1) (x; q): (x; 1) = (x; q) r2: transport (funx0 : A => i x0 = i x) 11 = q
iw_sup I A B i j x x' = transport (IW I A B i j) q (iw_sup I A B i j x y')
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I h: IsEmbedding i x: A x': forally : B x, IW I A B i j (j x y) IHx: forall (y : B x) (y1 : IW I A B i j (j x y)), x' y = y1 y0: IW I A B i j (i x) y': forally : B x, IW I A B i j (j x y) q: i x = i x r:= path_ishprop (x; 1) (x; q): (x; 1) = (x; q) r2: 1 = q
iw_sup I A B i j x x' = transport (IW I A B i j) q (iw_sup I A B i j x y')
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I h: IsEmbedding i x: A x': forally : B x, IW I A B i j (j x y) IHx: forall (y : B x) (y1 : IW I A B i j (j x y)), x' y = y1 y0: IW I A B i j (i x) y': forally : B x, IW I A B i j (j x y) r:= path_ishprop (x; 1) (x; 1): (x; 1) = (x; 1)
iw_sup I A B i j x x' = transport (IW I A B i j) 1 (iw_sup I A B i j x y')
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I h: IsEmbedding i x: A x': forally : B x, IW I A B i j (j x y) IHx: forall (y : B x) (y1 : IW I A B i j (j x y)), x' y = y1 y0: IW I A B i j (i x) y': forally : B x, IW I A B i j (j x y) r:= path_ishprop (x; 1) (x; 1): (x; 1) = (x; 1)
x' = y'
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I h: IsEmbedding i x: A x': forally : B x, IW I A B i j (j x y) IHx: forall (y : B x) (y1 : IW I A B i j (j x y)), x' y = y1 y0: IW I A B i j (i x) y': forally : B x, IW I A B i j (j x y) r:= path_ishprop (x; 1) (x; 1): (x; 1) = (x; 1) a: B x
x' a = y' a
apply IHx.Defined.(** Now by induction on truncation indices we show that IW-types are n.+1 truncated if the index maps are also n.+1 truncated. *)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I n: trunc_index h: IsTruncMap n.+1 i l: I
IsTrunc n.+1 (IW I A B i j l)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I n: trunc_index h: IsTruncMap n.+1 i l: I
IsTrunc n.+1 (IW I A B i j l)
(** We need a general induction hypothesis *)
H: Funext
forall (n : trunc_index) (IA : Type) (B : A -> Type)
(i : A -> I) (j : forallx : A, B x -> I),
IsTruncMap n.+1 i -> foralll : I, IsTrunc n.+1 (IW I A B i j l)
H: Funext
forall (IA : Type) (B : A -> Type) (i : A -> I)
(j : forallx : A, B x -> I),
IsEmbedding i -> foralll : I, IsHProp (IW I A B i j l)
H: Funext n: trunc_index IHn: forall (IA : Type) (B : A -> Type) (i : A -> I)
(j : forallx : A, B x -> I),
IsTruncMap n.+1 i -> foralll : I, IsTrunc n.+1 (IW I A B i j l)
forall (IA : Type) (B : A -> Type) (i : A -> I)
(j : forallx : A, B x -> I),
IsTruncMap n.+2 i -> foralll : I, IsTrunc n.+2 (IW I A B i j l)
H: Funext n: trunc_index IHn: forall (IA : Type) (B : A -> Type) (i : A -> I)
(j : forallx : A, B x -> I),
IsTruncMap n.+1 i -> foralll : I, IsTrunc n.+1 (IW I A B i j l)
forall (IA : Type) (B : A -> Type) (i : A -> I)
(j : forallx : A, B x -> I),
IsTruncMap n.+2 i -> foralll : I, IsTrunc n.+2 (IW I A B i j l)
H: Funext n: trunc_index IHn: forall (I0A0 : Type) (B0 : A0 -> Type) (i0 : A0 -> I0)
(j0 : forallx : A0, B0 x -> I0),
IsTruncMap n.+1 i0 -> foralll0 : I0, IsTrunc n.+1 (IW I0 A0 B0 i0 j0 l0) I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I h: IsTruncMap n.+2 i l: I
IsTrunc n.+2 (IW I A B i j l)
H: Funext n: trunc_index IHn: forall (I0A0 : Type) (B0 : A0 -> Type) (i0 : A0 -> I0)
(j0 : forallx : A0, B0 x -> I0),
IsTruncMap n.+1 i0 -> foralll0 : I0, IsTrunc n.+1 (IW I0 A0 B0 i0 j0 l0) I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I h: IsTruncMap n.+2 i l: I
forallxy : IW I A B i j l, IsTrunc n.+1 (x = y)
H: Funext n: trunc_index IHn: forall (I0A0 : Type) (B0 : A0 -> Type) (i0 : A0 -> I0)
(j0 : forallx0 : A0, B0 x0 -> I0),
IsTruncMap n.+1 i0 -> foralll0 : I0, IsTrunc n.+1 (IW I0 A0 B0 i0 j0 l0) I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I h: IsTruncMap n.+2 i l: I x, y: IW I A B i j l
IsTrunc n.+1 (x = y)
H: Funext n: trunc_index IHn: forall (I0A0 : Type) (B0 : A0 -> Type) (i0 : A0 -> I0)
(j0 : forallx0 : A0, B0 x0 -> I0),
IsTruncMap n.+1 i0 -> foralll0 : I0, IsTrunc n.+1 (IW I0 A0 B0 i0 j0 l0) I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I h: IsTruncMap n.+2 i l: I x, y: IW I A B i j l
IsTrunc n.+1
(IW {k : I & IW I A B i j k * IW I A B i j k}
{e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))}
(funX : {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))} =>
B X.1)
(functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)))
(fun
(k : {e : A &
(forallc : B e, IW I A B i j (j e c)) *
(forallc : B e, IW I A B i j (j e c))})
(c : B k.1) =>
(j k.1 c; (fst k.2 c, snd k.2 c)))
(l; (x, y)))
H: Funext n: trunc_index IHn: forall (I0A0 : Type) (B0 : A0 -> Type) (i0 : A0 -> I0)
(j0 : forallx0 : A0, B0 x0 -> I0),
IsTruncMap n.+1 i0 -> foralll0 : I0, IsTrunc n.+1 (IW I0 A0 B0 i0 j0 l0) I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I h: IsTruncMap n.+2 i l: I x, y: IW I A B i j l
IsTruncMap n.+1
(functor_sigma i
(funa : A => functor_prod (iw_sup I A B i j a) (iw_sup I A B i j a)))
H: Funext n: trunc_index IHn: forall (I0A0 : Type) (B0 : A0 -> Type) (i0 : A0 -> I0)
(j0 : forallx0 : A0, B0 x0 -> I0),
IsTruncMap n.+1 i0 -> foralll0 : I0, IsTrunc n.+1 (IW I0 A0 B0 i0 j0 l0) I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I h: IsTruncMap n.+2 i l: I x, y: IW I A B i j l k: I a, b: IW I A B i j k
IsTrunc n.+1
(hfiber
(functor_sigma i
(funa0 : A =>
functor_prod (iw_sup I A B i j a0) (iw_sup I A B i j a0)))
(k; (a, b)))
(** The crucial step is to characterize the fiber of [i'] which was done previously. *)exact (istrunc_equiv_istrunc _
(equiv_path_hfiber_index I A B i j k a b)).Defined.(** ** Decidable equality for IW-types *)(** If A has decidable paths then it is a hset and therefore equality of sigma types over it are determined by the second component. *)
A: Type A_dec: DecidablePaths A P: A -> Type x: A y, y': P x H: (x; y) = (x; y')
y = y'
A: Type A_dec: DecidablePaths A P: A -> Type x: A y, y': P x H: (x; y) = (x; y')
y = y'
A: Type A_dec: DecidablePaths A P: A -> Type x: A y, y': P x H: {p : (x; y).1 = (x; y').1 & transport P p (x; y).2 = (x; y').2}
y = y'
A: Type A_dec: DecidablePaths A P: A -> Type x: A y, y': P x p: x = x q: transport P p y = y'
y = y'
A: Type A_dec: DecidablePaths A P: A -> Type x: A y, y': P x p: x = x q: transport P p y = y' r: 1 = p
y = y'
A: Type A_dec: DecidablePaths A P: A -> Type x: A y, y': P x q: transport P 1 y = y'
y = y'
exact q.Defined.(** IW-types have decidable equality if [liftP] holds and the fibers of the indexing map have decidable paths. Notably, if B x is finitely enumerable, then [liftP] holds. *)SectionDecidablePaths.Context `{Funext}
(I : Type) (A : Type) (B : A -> Type) (i : A -> I) (j : forallx, B x -> I)
(liftP : forall (x : A) (P : B x -> Type),
(forallc, Decidable (P c)) -> Decidable (forallc, P c))
(fibers_dec : forallx, DecidablePaths (hfiber i x)).Letchildren_for (x : A) : Type := forallc, IW I A B i j (j x c).Letgetfib {x} (a : IW I A B i j x) : hfiber i x
:= match a with iw_sup x _ => (x ; idpath) end.Letgetfib_computesxychildrenp
: getfib (paths_rec (i y) _ (iw_sup _ _ _ _ _ y children) (i x) p) = exist _ y p
:= match p
return getfib (paths_rec _ _ (iw_sup _ _ _ _ _ y children) _ p) = exist _ y p
with idpath => idpath end.Letgetfib_plus {x} (a : IW I A B i j x)
: {f : hfiber i x & children_for (pr1 f)}
:= match a with iw_sup x c => ((x; idpath); c) end.Letchildren_eq (x : A) (c1c2 : forallc, IW I A B i j (j x c))
: iw_sup I A B i j x c1 = iw_sup I A B i j x c2 -> c1 = c2
:= funr => inj_right_pair_on (funf => children_for (pr1 f))
(x; idpath) _ _ (ap getfib_plus r).
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I liftP: forall (x : A) (P : B x -> Type),
(forallc : B x, Decidable (P c)) -> Decidable (forallc : B x, P c) fibers_dec: forallx : I, DecidablePaths (hfiber i x) children_for:= funx : A => forallc : B x, IW I A B i j (j x c): A -> Type getfib:= fun (x : I) (a0 : IW I A B i j x) =>
match a0 in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x0 _ => (x0; 1)
end: forallx : I, IW I A B i j x -> hfiber i x getfib_computes:= fun (xy : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) i0 p0) =
(y; p0))
with
| 1 => 1end: forall (xy : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x),
getfib (paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) (i x) p) =
(y; p) getfib_plus:= fun (x : I) (a0 : IW I A B i j x) =>
match
a0 in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1}
with
| @iw_sup _ _ _ _ _ x0 c => ((x0; 1); c)
end: forallx : I, IW I A B i j x -> {f : hfiber i x & children_for f.1} children_eq:= fun (x : A) (c1c2 : forallc : B x, IW I A B i j (j x c))
(r : iw_sup I A B i j x c1 = iw_sup I A B i j x c2) =>
inj_right_pair_on (funf : {x0 : A & i x0 = i x} => children_for f.1)
(x; 1) c1 c2 (ap getfib_plus r): forall (x : A) (c1c2 : forallc : B x, IW I A B i j (j x c)),
iw_sup I A B i j x c1 = iw_sup I A B i j x c2 -> c1 = c2 decide_eq: forall (l0 : I) (a0b : IW I A B i j l0), Decidable (a0 = b) l: I a: IW I A B i j l
forallb : IW I A B i j l, Decidable (a = b)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I liftP: forall (x : A) (P : B x -> Type),
(forallc : B x, Decidable (P c)) -> Decidable (forallc : B x, P c) fibers_dec: forallx : I, DecidablePaths (hfiber i x) children_for:= funx : A => forallc : B x, IW I A B i j (j x c): A -> Type getfib:= fun (x : I) (a0 : IW I A B i j x) =>
match a0 in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x0 _ => (x0; 1)
end: forallx : I, IW I A B i j x -> hfiber i x getfib_computes:= fun (xy : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) i0 p0) =
(y; p0))
with
| 1 => 1end: forall (xy : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x),
getfib (paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) (i x) p) =
(y; p) getfib_plus:= fun (x : I) (a0 : IW I A B i j x) =>
match
a0 in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1}
with
| @iw_sup _ _ _ _ _ x0 c => ((x0; 1); c)
end: forallx : I, IW I A B i j x -> {f : hfiber i x & children_for f.1} children_eq:= fun (x : A) (c1c2 : forallc : B x, IW I A B i j (j x c))
(r : iw_sup I A B i j x c1 = iw_sup I A B i j x c2) =>
inj_right_pair_on (funf : {x0 : A & i x0 = i x} => children_for f.1)
(x; 1) c1 c2 (ap getfib_plus r): forall (x : A) (c1c2 : forallc : B x, IW I A B i j (j x c)),
iw_sup I A B i j x c1 = iw_sup I A B i j x c2 -> c1 = c2 decide_eq: forall (l0 : I) (a0b : IW I A B i j l0), Decidable (a0 = b) l: I a: IW I A B i j l
forallb : IW I A B i j l, Decidable (a = b)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) i0 p0) =
(y; p0))
with
| 1 => 1end: forall (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x0),
getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) (i x0) p) =
(y; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c2 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c2) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c2 (ap getfib_plus r): forall (x0 : A) (c0c2 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c2 -> c0 = c2 decide_eq: forall (l : I) (ab : IW I A B i j l), Decidable (a = b) x: A c1: forally : B x, IW I A B i j (j x y)
forallb : IW I A B i j (i x), Decidable (iw_sup I A B i j x c1 = b)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) i0 p0) =
(y; p0))
with
| 1 => 1end: forall (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x0),
getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) (i x0) p) =
(y; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c2 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c2) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c2 (ap getfib_plus r): forall (x0 : A) (c0c2 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c2 -> c0 = c2 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally : B x, IW I A B i j (j x y) b: IW I A B i j (i x)
Decidable (iw_sup I A B i j x c1 = b)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) i0 p0) =
(y; p0))
with
| 1 => 1end: forall (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x0),
getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) (i x0) p) =
(y; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c2 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c2) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c2 (ap getfib_plus r): forall (x0 : A) (c0c2 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c2 -> c0 = c2 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally : B x, IW I A B i j (j x y) b: IW I A B i j (i x)
forallc2 : forally : B x, IW I A B i j (j x y), Decidable (c1 = c2)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) i0 p0) =
(y; p0))
with
| 1 => 1end: forall (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x0),
getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) (i x0) p) =
(y; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c2 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c2) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c2 (ap getfib_plus r): forall (x0 : A) (c0c2 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c2 -> c0 = c2 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally : B x, IW I A B i j (j x y) b: IW I A B i j (i x) decide_children:= ?Goal: forallc2 : forally : B x, IW I A B i j (j x y), Decidable (c1 = c2)
Decidable (iw_sup I A B i j x c1 = b)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) i0 p0) =
(y; p0))
with
| 1 => 1end: forall (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x0),
getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) (i x0) p) =
(y; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c2 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c2) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c2 (ap getfib_plus r): forall (x0 : A) (c0c2 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c2 -> c0 = c2 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally : B x, IW I A B i j (j x y) b: IW I A B i j (i x)
forallc2 : forally : B x, IW I A B i j (j x y), Decidable (c1 = c2)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) i0 p0) =
(y; p0))
with
| 1 => 1end: forall (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x0),
getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) (i x0) p) =
(y; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c3 (ap getfib_plus r): forall (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3 -> c0 = c3 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally : B x, IW I A B i j (j x y) b: IW I A B i j (i x) c2: forally : B x, IW I A B i j (j x y)
Decidable (c1 = c2)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p0 : i y = i x0) =>
match
p0 as p1 in (_ = i0)
return
(getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) i0 p1) =
(y; p1))
with
| 1 => 1end: forall (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p0 : i y = i x0),
getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) (i x0) p0) =
(y; p0) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c3 (ap getfib_plus r): forall (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3 -> c0 = c3 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally : B x, IW I A B i j (j x y) b: IW I A B i j (i x) c2: forally : B x, IW I A B i j (j x y) p: forallc : B x, c1 c = c2 c
Decidable (c1 = c2)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p0 : i y = i x0) =>
match
p0 as p1 in (_ = i0)
return
(getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) i0 p1) =
(y; p1))
with
| 1 => 1end: forall (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p0 : i y = i x0),
getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) (i x0) p0) =
(y; p0) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c3 (ap getfib_plus r): forall (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3 -> c0 = c3 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally : B x, IW I A B i j (j x y) b: IW I A B i j (i x) c2: forally : B x, IW I A B i j (j x y) p: ~ (forallc : B x, c1 c = c2 c)
Decidable (c1 = c2)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p0 : i y = i x0) =>
match
p0 as p1 in (_ = i0)
return
(getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) i0 p1) =
(y; p1))
with
| 1 => 1end: forall (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p0 : i y = i x0),
getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) (i x0) p0) =
(y; p0) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c3 (ap getfib_plus r): forall (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3 -> c0 = c3 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally : B x, IW I A B i j (j x y) b: IW I A B i j (i x) c2: forally : B x, IW I A B i j (j x y) p: forallc : B x, c1 c = c2 c
Decidable (c1 = c2)
left; byapply path_forall.
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p0 : i y = i x0) =>
match
p0 as p1 in (_ = i0)
return
(getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) i0 p1) =
(y; p1))
with
| 1 => 1end: forall (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p0 : i y = i x0),
getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) (i x0) p0) =
(y; p0) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c3 (ap getfib_plus r): forall (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3 -> c0 = c3 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally : B x, IW I A B i j (j x y) b: IW I A B i j (i x) c2: forally : B x, IW I A B i j (j x y) p: ~ (forallc : B x, c1 c = c2 c)
Decidable (c1 = c2)
right; intro h; byapply p, apD10.
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) i0 p0) =
(y; p0))
with
| 1 => 1end: forall (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x0),
getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) (i x0) p) =
(y; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c2 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c2) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c2 (ap getfib_plus r): forall (x0 : A) (c0c2 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c2 -> c0 = c2 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally : B x, IW I A B i j (j x y) b: IW I A B i j (i x) decide_children:= func2 : forally : B x, IW I A B i j (j x y) =>
letd :=
liftP x (func : B x => c1 c = c2 c)
(func : B x => decide_eq (j x c) (c1 c) (c2 c))
inmatch d with
| inl p =>
(funp0 : forallc : B x, c1 c = c2 c => inl (path_forall c1 c2 p0)) p
| inr n =>
(funp : ~ (forallc : B x, c1 c = c2 c) =>
inr ((funh : c1 = c2 => p (apD10 h)) : c1 <> c2)) n
end: forallc2 : forally : B x, IW I A B i j (j x y), Decidable (c1 = c2)
Decidable (iw_sup I A B i j x c1 = b)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) i0 p0) =
(y0; p0))
with
| 1 => 1end: forall (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0),
getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) (i x0) p) =
(y0; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c3 (ap getfib_plus r): forall (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3 -> c0 = c3 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally0 : B x, IW I A B i j (j x y0) b: IW I A B i j (i x) decide_children:= func0 : forally0 : B x, IW I A B i j (j x y0) =>
letd :=
liftP x (func : B x => c1 c = c0 c)
(func : B x => decide_eq (j x c) (c1 c) (c0 c))
inmatch d with
| inl p =>
(funp0 : forallc : B x, c1 c = c0 c => inl (path_forall c1 c0 p0)) p
| inr n =>
(funp : ~ (forallc : B x, c1 c = c0 c) =>
inr ((funh : c1 = c0 => p (apD10 h)) : c1 <> c0)) n
end: forallc0 : forally0 : B x, IW I A B i j (j x y0), Decidable (c1 = c0) y: A c2: forally0 : B y, IW I A B i j (j y y0) iy: i y = i x
Decidable
(iw_sup I A B i j x c1 =
paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y c2) (i x) iy)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) i0 p0) =
(y0; p0))
with
| 1 => 1end: forall (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0),
getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) (i x0) p) =
(y0; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c3 (ap getfib_plus r): forall (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3 -> c0 = c3 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally0 : B x, IW I A B i j (j x y0) b: IW I A B i j (i x) decide_children:= func0 : forally0 : B x, IW I A B i j (j x y0) =>
letd :=
liftP x (func : B x => c1 c = c0 c)
(func : B x => decide_eq (j x c) (c1 c) (c0 c))
inmatch d with
| inl p =>
(funp0 : forallc : B x, c1 c = c0 c => inl (path_forall c1 c0 p0)) p
| inr n =>
(funp : ~ (forallc : B x, c1 c = c0 c) =>
inr ((funh : c1 = c0 => p (apD10 h)) : c1 <> c0)) n
end: forallc0 : forally0 : B x, IW I A B i j (j x y0), Decidable (c1 = c0) y: A c2: forally0 : B y, IW I A B i j (j y y0) iy: i y = i x feq: (x; 1) = (y; iy)
Decidable
(iw_sup I A B i j x c1 =
paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y c2) (i x) iy)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) i0 p0) =
(y0; p0))
with
| 1 => 1end: forall (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0),
getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) (i x0) p) =
(y0; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c3 (ap getfib_plus r): forall (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3 -> c0 = c3 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally0 : B x, IW I A B i j (j x y0) b: IW I A B i j (i x) decide_children:= func0 : forally0 : B x, IW I A B i j (j x y0) =>
letd :=
liftP x (func : B x => c1 c = c0 c)
(func : B x => decide_eq (j x c) (c1 c) (c0 c))
inmatch d with
| inl p =>
(funp0 : forallc : B x, c1 c = c0 c => inl (path_forall c1 c0 p0)) p
| inr n =>
(funp : ~ (forallc : B x, c1 c = c0 c) =>
inr ((funh : c1 = c0 => p (apD10 h)) : c1 <> c0)) n
end: forallc0 : forally0 : B x, IW I A B i j (j x y0), Decidable (c1 = c0) y: A c2: forally0 : B y, IW I A B i j (j y y0) iy: i y = i x fneq: (x; 1) <> (y; iy)
Decidable
(iw_sup I A B i j x c1 =
paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y c2) (i x) iy)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) i0 p0) =
(y0; p0))
with
| 1 => 1end: forall (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0),
getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) (i x0) p) =
(y0; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c3 (ap getfib_plus r): forall (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3 -> c0 = c3 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally0 : B x, IW I A B i j (j x y0) b: IW I A B i j (i x) decide_children:= func0 : forally0 : B x, IW I A B i j (j x y0) =>
letd :=
liftP x (func : B x => c1 c = c0 c)
(func : B x => decide_eq (j x c) (c1 c) (c0 c))
inmatch d with
| inl p =>
(funp0 : forallc : B x, c1 c = c0 c => inl (path_forall c1 c0 p0)) p
| inr n =>
(funp : ~ (forallc : B x, c1 c = c0 c) =>
inr ((funh : c1 = c0 => p (apD10 h)) : c1 <> c0)) n
end: forallc0 : forally0 : B x, IW I A B i j (j x y0), Decidable (c1 = c0) y: A c2: forally0 : B y, IW I A B i j (j y y0) iy: i y = i x feq: (x; 1) = (y; iy)
Decidable
(iw_sup I A B i j x c1 =
paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y c2) (i x) iy)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) i0 p0) =
(y0; p0))
with
| 1 => 1end: forall (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0),
getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) (i x0) p) =
(y0; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c3 (ap getfib_plus r): forall (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3 -> c0 = c3 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally0 : B x, IW I A B i j (j x y0) b: IW I A B i j (i x) decide_children:= func0 : forally0 : B x, IW I A B i j (j x y0) =>
letd :=
liftP x (func : B x => c1 c = c0 c)
(func : B x => decide_eq (j x c) (c1 c) (c0 c))
inmatch d with
| inl p =>
(funp0 : forallc : B x, c1 c = c0 c => inl (path_forall c1 c0 p0)) p
| inr n =>
(funp : ~ (forallc : B x, c1 c = c0 c) =>
inr ((funh : c1 = c0 => p (apD10 h)) : c1 <> c0)) n
end: forallc0 : forally0 : B x, IW I A B i j (j x y0), Decidable (c1 = c0) y: A c2: forally0 : B y, IW I A B i j (j y y0) iy: i y = i x feq: (x; 1) = (y; iy)
forall (iV := (x; 1)) (y0 := iV.1) (iy0 := iV.2)
(c0 : forally1 : B y0, IW I A B i j (j y0 y1)),
Decidable
(iw_sup I A B i j x c1 =
paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 c0) (i x) iy0)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) i0 p0) =
(y0; p0))
with
| 1 => 1end: forall (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0),
getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) (i x0) p) =
(y0; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c4 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c4) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c4 (ap getfib_plus r): forall (x0 : A) (c0c4 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c4 -> c0 = c4 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally0 : B x, IW I A B i j (j x y0) b: IW I A B i j (i x) decide_children:= func0 : forally0 : B x, IW I A B i j (j x y0) =>
letd :=
liftP x (func : B x => c1 c = c0 c)
(func : B x => decide_eq (j x c) (c1 c) (c0 c))
inmatch d with
| inl p =>
(funp0 : forallc : B x, c1 c = c0 c => inl (path_forall c1 c0 p0)) p
| inr n =>
(funp : ~ (forallc : B x, c1 c = c0 c) =>
inr ((funh : c1 = c0 => p (apD10 h)) : c1 <> c0)) n
end: forallc0 : forally0 : B x, IW I A B i j (j x y0), Decidable (c1 = c0) y: A c2: forally0 : B y, IW I A B i j (j y y0) iy: i y = i x feq: (x; 1) = (y; iy) c3: forally0 : B x, IW I A B i j (j x y0)
Decidable (iw_sup I A B i j x c1 = iw_sup I A B i j x c3)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) i0 p0) =
(y0; p0))
with
| 1 => 1end: forall (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0),
getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) (i x0) p) =
(y0; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c4 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c4) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c4 (ap getfib_plus r): forall (x0 : A) (c0c4 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c4 -> c0 = c4 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally0 : B x, IW I A B i j (j x y0) b: IW I A B i j (i x) decide_children:= func0 : forally0 : B x, IW I A B i j (j x y0) =>
letd :=
liftP x (func : B x => c1 c = c0 c)
(func : B x => decide_eq (j x c) (c1 c) (c0 c))
inmatch d with
| inl p =>
(funp0 : forallc : B x, c1 c = c0 c => inl (path_forall c1 c0 p0)) p
| inr n =>
(funp : ~ (forallc : B x, c1 c = c0 c) =>
inr ((funh : c1 = c0 => p (apD10 h)) : c1 <> c0)) n
end: forallc0 : forally0 : B x, IW I A B i j (j x y0), Decidable (c1 = c0) y: A c2: forally0 : B y, IW I A B i j (j y y0) iy: i y = i x feq: (x; 1) = (y; iy) c3: forally0 : B x, IW I A B i j (j x y0) ceq: c1 = c3
Decidable (iw_sup I A B i j x c1 = iw_sup I A B i j x c3)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) i0 p0) =
(y0; p0))
with
| 1 => 1end: forall (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0),
getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) (i x0) p) =
(y0; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c4 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c4) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c4 (ap getfib_plus r): forall (x0 : A) (c0c4 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c4 -> c0 = c4 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally0 : B x, IW I A B i j (j x y0) b: IW I A B i j (i x) decide_children:= func0 : forally0 : B x, IW I A B i j (j x y0) =>
letd :=
liftP x (func : B x => c1 c = c0 c)
(func : B x => decide_eq (j x c) (c1 c) (c0 c))
inmatch d with
| inl p =>
(funp0 : forallc : B x, c1 c = c0 c => inl (path_forall c1 c0 p0)) p
| inr n =>
(funp : ~ (forallc : B x, c1 c = c0 c) =>
inr ((funh : c1 = c0 => p (apD10 h)) : c1 <> c0)) n
end: forallc0 : forally0 : B x, IW I A B i j (j x y0), Decidable (c1 = c0) y: A c2: forally0 : B y, IW I A B i j (j y y0) iy: i y = i x feq: (x; 1) = (y; iy) c3: forally0 : B x, IW I A B i j (j x y0) cneq: c1 <> c3
Decidable (iw_sup I A B i j x c1 = iw_sup I A B i j x c3)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) i0 p0) =
(y0; p0))
with
| 1 => 1end: forall (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0),
getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) (i x0) p) =
(y0; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c4 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c4) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c4 (ap getfib_plus r): forall (x0 : A) (c0c4 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c4 -> c0 = c4 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally0 : B x, IW I A B i j (j x y0) b: IW I A B i j (i x) decide_children:= func0 : forally0 : B x, IW I A B i j (j x y0) =>
letd :=
liftP x (func : B x => c1 c = c0 c)
(func : B x => decide_eq (j x c) (c1 c) (c0 c))
inmatch d with
| inl p =>
(funp0 : forallc : B x, c1 c = c0 c => inl (path_forall c1 c0 p0)) p
| inr n =>
(funp : ~ (forallc : B x, c1 c = c0 c) =>
inr ((funh : c1 = c0 => p (apD10 h)) : c1 <> c0)) n
end: forallc0 : forally0 : B x, IW I A B i j (j x y0), Decidable (c1 = c0) y: A c2: forally0 : B y, IW I A B i j (j y y0) iy: i y = i x feq: (x; 1) = (y; iy) c3: forally0 : B x, IW I A B i j (j x y0) ceq: c1 = c3
Decidable (iw_sup I A B i j x c1 = iw_sup I A B i j x c3)
left; exact (ap _ ceq).
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) i0 p0) =
(y0; p0))
with
| 1 => 1end: forall (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0),
getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) (i x0) p) =
(y0; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c4 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c4) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c4 (ap getfib_plus r): forall (x0 : A) (c0c4 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c4 -> c0 = c4 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally0 : B x, IW I A B i j (j x y0) b: IW I A B i j (i x) decide_children:= func0 : forally0 : B x, IW I A B i j (j x y0) =>
letd :=
liftP x (func : B x => c1 c = c0 c)
(func : B x => decide_eq (j x c) (c1 c) (c0 c))
inmatch d with
| inl p =>
(funp0 : forallc : B x, c1 c = c0 c => inl (path_forall c1 c0 p0)) p
| inr n =>
(funp : ~ (forallc : B x, c1 c = c0 c) =>
inr ((funh : c1 = c0 => p (apD10 h)) : c1 <> c0)) n
end: forallc0 : forally0 : B x, IW I A B i j (j x y0), Decidable (c1 = c0) y: A c2: forally0 : B y, IW I A B i j (j y y0) iy: i y = i x feq: (x; 1) = (y; iy) c3: forally0 : B x, IW I A B i j (j x y0) cneq: c1 <> c3
Decidable (iw_sup I A B i j x c1 = iw_sup I A B i j x c3)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) i0 p0) =
(y0; p0))
with
| 1 => 1end: forall (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0),
getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) (i x0) p) =
(y0; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c4 : forallc : B x0, IW I A B i j (j x0 c))
(r0 : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c4) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c4 (ap getfib_plus r0): forall (x0 : A) (c0c4 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c4 -> c0 = c4 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally0 : B x, IW I A B i j (j x y0) b: IW I A B i j (i x) decide_children:= func0 : forally0 : B x, IW I A B i j (j x y0) =>
letd :=
liftP x (func : B x => c1 c = c0 c)
(func : B x => decide_eq (j x c) (c1 c) (c0 c))
inmatch d with
| inl p =>
(funp0 : forallc : B x, c1 c = c0 c => inl (path_forall c1 c0 p0)) p
| inr n =>
(funp : ~ (forallc : B x, c1 c = c0 c) =>
inr ((funh : c1 = c0 => p (apD10 h)) : c1 <> c0)) n
end: forallc0 : forally0 : B x, IW I A B i j (j x y0), Decidable (c1 = c0) y: A c2: forally0 : B y, IW I A B i j (j y y0) iy: i y = i x feq: (x; 1) = (y; iy) c3: forally0 : B x, IW I A B i j (j x y0) cneq: c1 <> c3 r: iw_sup I A B i j x c1 = iw_sup I A B i j x c3
c1 = c3
exact (children_eq x c1 c3 r).
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) i0 p0) =
(y0; p0))
with
| 1 => 1end: forall (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0),
getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) (i x0) p) =
(y0; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c3 (ap getfib_plus r): forall (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3 -> c0 = c3 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally0 : B x, IW I A B i j (j x y0) b: IW I A B i j (i x) decide_children:= func0 : forally0 : B x, IW I A B i j (j x y0) =>
letd :=
liftP x (func : B x => c1 c = c0 c)
(func : B x => decide_eq (j x c) (c1 c) (c0 c))
inmatch d with
| inl p =>
(funp0 : forallc : B x, c1 c = c0 c => inl (path_forall c1 c0 p0)) p
| inr n =>
(funp : ~ (forallc : B x, c1 c = c0 c) =>
inr ((funh : c1 = c0 => p (apD10 h)) : c1 <> c0)) n
end: forallc0 : forally0 : B x, IW I A B i j (j x y0), Decidable (c1 = c0) y: A c2: forally0 : B y, IW I A B i j (j y y0) iy: i y = i x fneq: (x; 1) <> (y; iy)
Decidable
(iw_sup I A B i j x c1 =
paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y c2) (i x) iy)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) i0 p0) =
(y0; p0))
with
| 1 => 1end: forall (x0y0 : A) (children : forally1 : B y0, IW I A B i j (j y0 y1))
(p : i y0 = i x0),
getfib
(paths_rec (i y0) (IW I A B i j) (iw_sup I A B i j y0 children) (i x0) p) =
(y0; p) getfib_plus:= fun (x0 : I) (a : IW I A B i j x0) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c))
(r0 : iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c0 c3 (ap getfib_plus r0): forall (x0 : A) (c0c3 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c0 = iw_sup I A B i j x0 c3 -> c0 = c3 decide_eq: forall (l : I) (ab0 : IW I A B i j l), Decidable (a = b0) x: A c1: forally0 : B x, IW I A B i j (j x y0) b: IW I A B i j (i x) decide_children:= func0 : forally0 : B x, IW I A B i j (j x y0) =>
letd :=
liftP x (func : B x => c1 c = c0 c)
(func : B x => decide_eq (j x c) (c1 c) (c0 c))
inmatch d with
| inl p =>
(funp0 : forallc : B x, c1 c = c0 c => inl (path_forall c1 c0 p0)) p
| inr n =>
(funp : ~ (forallc : B x, c1 c = c0 c) =>
inr ((funh : c1 = c0 => p (apD10 h)) : c1 <> c0)) n
end: forallc0 : forally0 : B x, IW I A B i j (j x y0), Decidable (c1 = c0) y: A c2: forally0 : B y, IW I A B i j (j y y0) iy: i y = i x fneq: (x; 1) <> (y; iy) r: iw_sup I A B i j x c1 =
paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y c2) (i x) iy
(x; 1) = (y; iy)
exact (ap getfib r @ getfib_computes x y c2 iy).Defined.
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I liftP: forall (x : A) (P : B x -> Type),
(forallc : B x, Decidable (P c)) -> Decidable (forallc : B x, P c) fibers_dec: forallx : I, DecidablePaths (hfiber i x) children_for:= funx : A => forallc : B x, IW I A B i j (j x c): A -> Type getfib:= fun (x : I) (a : IW I A B i j x) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x0 _ => (x0; 1)
end: forallx : I, IW I A B i j x -> hfiber i x getfib_computes:= fun (xy : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) i0 p0) =
(y; p0))
with
| 1 => 1end: forall (xy : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x),
getfib (paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) (i x) p) =
(y; p) getfib_plus:= fun (x : I) (a : IW I A B i j x) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x0 c => ((x0; 1); c)
end: forallx : I, IW I A B i j x -> {f : hfiber i x & children_for f.1} children_eq:= fun (x : A) (c1c2 : forallc : B x, IW I A B i j (j x c))
(r : iw_sup I A B i j x c1 = iw_sup I A B i j x c2) =>
inj_right_pair_on (funf : {x0 : A & i x0 = i x} => children_for f.1)
(x; 1) c1 c2 (ap getfib_plus r): forall (x : A) (c1c2 : forallc : B x, IW I A B i j (j x c)),
iw_sup I A B i j x c1 = iw_sup I A B i j x c2 -> c1 = c2
forallx : I, DecidablePaths (IW I A B i j x)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx : A, B x -> I liftP: forall (x : A) (P : B x -> Type),
(forallc : B x, Decidable (P c)) -> Decidable (forallc : B x, P c) fibers_dec: forallx : I, DecidablePaths (hfiber i x) children_for:= funx : A => forallc : B x, IW I A B i j (j x c): A -> Type getfib:= fun (x : I) (a : IW I A B i j x) =>
match a in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x0 _ => (x0; 1)
end: forallx : I, IW I A B i j x -> hfiber i x getfib_computes:= fun (xy : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) i0 p0) =
(y; p0))
with
| 1 => 1end: forall (xy : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x),
getfib (paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) (i x) p) =
(y; p) getfib_plus:= fun (x : I) (a : IW I A B i j x) =>
match a in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1} with
| @iw_sup _ _ _ _ _ x0 c => ((x0; 1); c)
end: forallx : I, IW I A B i j x -> {f : hfiber i x & children_for f.1} children_eq:= fun (x : A) (c1c2 : forallc : B x, IW I A B i j (j x c))
(r : iw_sup I A B i j x c1 = iw_sup I A B i j x c2) =>
inj_right_pair_on (funf : {x0 : A & i x0 = i x} => children_for f.1)
(x; 1) c1 c2 (ap getfib_plus r): forall (x : A) (c1c2 : forallc : B x, IW I A B i j (j x c)),
iw_sup I A B i j x c1 = iw_sup I A B i j x c2 -> c1 = c2
forallx : I, DecidablePaths (IW I A B i j x)
H: Funext I, A: Type B: A -> Type i: A -> I j: forallx0 : A, B x0 -> I liftP: forall (x0 : A) (P : B x0 -> Type),
(forallc : B x0, Decidable (P c)) -> Decidable (forallc : B x0, P c) fibers_dec: forallx0 : I, DecidablePaths (hfiber i x0) children_for:= funx0 : A => forallc : B x0, IW I A B i j (j x0 c): A -> Type getfib:= fun (x0 : I) (a0 : IW I A B i j x0) =>
match a0 in (IW _ _ _ _ _ i0) return (hfiber i i0) with
| @iw_sup _ _ _ _ _ x1 _ => (x1; 1)
end: forallx0 : I, IW I A B i j x0 -> hfiber i x0 getfib_computes:= fun (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x0) =>
match
p as p0 in (_ = i0)
return
(getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) i0 p0) =
(y; p0))
with
| 1 => 1end: forall (x0y : A) (children : forally0 : B y, IW I A B i j (j y y0))
(p : i y = i x0),
getfib
(paths_rec (i y) (IW I A B i j) (iw_sup I A B i j y children) (i x0) p) =
(y; p) getfib_plus:= fun (x0 : I) (a0 : IW I A B i j x0) =>
match
a0 in (IW _ _ _ _ _ i0) return {f : hfiber i i0 & children_for f.1}
with
| @iw_sup _ _ _ _ _ x1 c => ((x1; 1); c)
end: forallx0 : I, IW I A B i j x0 -> {f : hfiber i x0 & children_for f.1} children_eq:= fun (x0 : A) (c1c2 : forallc : B x0, IW I A B i j (j x0 c))
(r : iw_sup I A B i j x0 c1 = iw_sup I A B i j x0 c2) =>
inj_right_pair_on (funf : {x1 : A & i x1 = i x0} => children_for f.1)
(x0; 1) c1 c2 (ap getfib_plus r): forall (x0 : A) (c1c2 : forallc : B x0, IW I A B i j (j x0 c)),
iw_sup I A B i j x0 c1 = iw_sup I A B i j x0 c2 -> c1 = c2 x: I a, b: IW I A B i j x