Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.3. 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.
(* -*- mode: coq; mode: visual-line -*-  *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import HFiber. Require Import Truncations. Require Import Spaces.BAut. Local Open Scope trunc_scope. Local Open Scope path_scope. (** * Rigid types *) Class IsRigid (A : Type) := path_aut_rigid : forall f g : A <~> A, f == g. (** Assuming funext, rigidity is equivalent to contractibility of [A <~> A]. *)
H: Funext
A: Type
H0: IsRigid A

Contr (A <~> A)
H: Funext
A: Type
H0: IsRigid A

Contr (A <~> A)
H: Funext
A: Type
H0: IsRigid A

forall y : A <~> A, 1%equiv = y
intros f; apply path_equiv, path_arrow, path_aut_rigid. Defined. (** Assuming univalence, rigidity is equivalent to contractibility of [BAut A]. *)
H: Univalence
A: Type
H0: IsRigid A

Contr (BAut A)
H: Univalence
A: Type
H0: IsRigid A

Contr (BAut A)
H: Univalence
A: Type
H0: IsRigid A

Contr (BAut A)
H: Univalence
A: Type
H0: IsRigid A

In (Tr 0) (BAut A)
H: Univalence
A: Type
H0: IsRigid A

is_mere_relation (BAut A) paths
H: Univalence
A: Type
H0: IsRigid A

IsHProp (point (BAut A) = point (BAut A))
refine (istrunc_equiv_istrunc (n := -1) (A <~> A) (path_baut (point (BAut A)) (point (BAut A)))). Defined.
H: Univalence
A: Type
Contr0: Contr (BAut A)

IsRigid A
H: Univalence
A: Type
Contr0: Contr (BAut A)

IsRigid A
H: Univalence
A: Type
Contr0: Contr (BAut A)

forall f g : A <~> A, f == g
H: Univalence
A: Type
Contr0: Contr (BAut A)
f: point (BAut A) = point (BAut A)

forall g : A <~> A, (path_baut (point (BAut A)) (point (BAut A)))^-1 f == g
H: Univalence
A: Type
Contr0: Contr (BAut A)
f, g: point (BAut A) = point (BAut A)

(path_baut (point (BAut A)) (point (BAut A)))^-1 f == (path_baut (point (BAut A)) (point (BAut A)))^-1 g
apply ap10, ap, ap, path_contr. Defined. (** ** HProps are rigid *)
A: Type
IsHProp0: IsHProp A

IsRigid A
A: Type
IsHProp0: IsHProp A

IsRigid A
intros f g x; apply path_ishprop. Defined. (** ** Equivalences of BAut *) (** Under a truncatedness/connectedness assumption, multiplying by a rigid type doesn't change the automorphism oo-group. *) (** A lemma: a "monoid homomorphism up to homotopy" between endomorphism monoids restricts to automorphism groups. *)
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f

X <~> X -> Y <~> Y
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f

X <~> X -> Y <~> Y
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f

forall f g : X -> X, (fun x : X => g (f x)) == idmap -> (fun x : Y => M g (M f x)) == idmap
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f
MS: forall f g : X -> X, g o f == idmap -> M g o M f == idmap
X <~> X -> Y <~> Y
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f

forall f g : X -> X, (fun x : X => g (f x)) == idmap -> (fun x : Y => M g (M f x)) == idmap
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f
g, f: X -> X
s: (fun x : X => f (g x)) == idmap
x: Y

M f (M g x) = x
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f
g, f: X -> X
s: (fun x : X => f (g x)) == idmap
x: Y

M f (M g x) = M (f o g) x
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f
g, f: X -> X
s: (fun x : X => f (g x)) == idmap
x: Y
M (f o g) x = x
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f
g, f: X -> X
s: (fun x : X => f (g x)) == idmap
x: Y

M f (M g x) = M (f o g) x
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f
g, f: X -> X
s: (fun x : X => f (g x)) == idmap
x: Y

M (f o g) x = M f (M g x)
refine (MC g f x).
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f
g, f: X -> X
s: (fun x : X => f (g x)) == idmap
x: Y

M (f o g) x = x
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f
g, f: X -> X
s: (fun x : X => f (g x)) == idmap
x: Y

M (f o g) x = M idmap x
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f
g, f: X -> X
s: (fun x : X => f (g x)) == idmap
x: Y
M idmap x = x
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f
g, f: X -> X
s: (fun x : X => f (g x)) == idmap
x: Y

M (f o g) x = M idmap x
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f
g, f: X -> X
s: (fun x : X => f (g x)) == idmap
x: Y

(fun x : X => f (g x)) == idmap
intros y; apply s.
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f
g, f: X -> X
s: (fun x : X => f (g x)) == idmap
x: Y

M idmap x = x
apply Mid.
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f
MS: forall f g : X -> X, g o f == idmap -> M g o M f == idmap

X <~> X -> Y <~> Y
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f
MS: forall f g : X -> X, g o f == idmap -> M g o M f == idmap

forall f : X -> X, IsEquiv f -> IsEquiv (M f)
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f
MS: forall f g : X -> X, g o f == idmap -> M g o M f == idmap
ME: forall f : X -> X, IsEquiv f -> IsEquiv (M f)
X <~> X -> Y <~> Y
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f
MS: forall f g : X -> X, g o f == idmap -> M g o M f == idmap

forall f : X -> X, IsEquiv f -> IsEquiv (M f)
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f
MS: forall f g : X -> X, g o f == idmap -> M g o M f == idmap
f: X -> X
X0: IsEquiv f

IsEquiv (M f)
refine (isequiv_adjointify (M f) (M f^-1) _ _); apply MS; [ apply eisretr | apply eissect ].
H: Funext
X, Y: Type
M: (X -> X) -> Y -> Y
Mid: M idmap == idmap
MC: forall f g : X -> X, M (g o f) == M g o M f
MS: forall f g : X -> X, g o f == idmap -> M g o M f == idmap
ME: forall f : X -> X, IsEquiv f -> IsEquiv (M f)

X <~> X -> Y <~> Y
exact (fun f => (Build_Equiv _ _ (M f) (ME f _))). Defined.
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A

BAut X <~> BAut (X * A)
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A

BAut X <~> BAut (X * A)
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A

IsEquiv (baut_prod_r X A)
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A

IsConnMap (Tr (-1)) (baut_prod_r X A)
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
IsEmbedding (baut_prod_r X A)
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A

IsConnMap (Tr (-1)) (baut_prod_r X A)
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
Z: BAut (X * A)

merely (hfiber (baut_prod_r X A) Z)
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A

merely (hfiber (baut_prod_r X A) (point (BAut (X * A))))
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A

baut_prod_r X A (point (BAut X)) = point (BAut (X * A))
apply path_sigma_hprop; reflexivity.
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A

IsEmbedding (baut_prod_r X A)
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A

IsEmbedding (baut_prod_r X A)
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A

forall x y : BAut X, IsEquiv (ap (baut_prod_r X A))
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
Z, W: BAut X

IsEquiv (ap (baut_prod_r X A))
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
Z, W: BAut X
L:= fun e : Z <~> W => equiv_functor_prod_r e: Z <~> W -> Z * A <~> W * A

IsEquiv (ap (baut_prod_r X A))
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
Z, W: BAut X
L:= fun e : Z <~> W => equiv_functor_prod_r e: Z <~> W -> Z * A <~> W * A

IsEquiv L
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
Z, W: BAut X
L:= fun e : Z <~> W => equiv_functor_prod_r e: Z <~> W -> Z * A <~> W * A

IsConnected (Tr (-1)) A
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
Z, W: BAut X
L:= fun e : Z <~> W => equiv_functor_prod_r e: Z <~> W -> Z * A <~> W * A
A -> IsEquiv L
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
Z, W: BAut X
L:= fun e : Z <~> W => equiv_functor_prod_r e: Z <~> W -> Z * A <~> W * A

IsConnected (Tr (-1)) A
apply contr_inhabited_hprop; [ exact _ | refine (merely_isconnected n A) ].
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
Z, W: BAut X
L:= fun e : Z <~> W => equiv_functor_prod_r e: Z <~> W -> Z * A <~> W * A

A -> IsEquiv L
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
Z, W: BAut X
L:= fun e : Z <~> W => equiv_functor_prod_r e: Z <~> W -> Z * A <~> W * A
a0: A

IsEquiv L
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A

IsEquiv L
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X

IsEquiv L
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X

forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
IsEquiv L
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X

forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X

Unit -> forall (f : X * A -> X * A) (x : X), fst (f (x, a0)) = fst (f (x, a0))
intros; reflexivity.
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))

IsEquiv L
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))

forall f g : X * A -> X * A, M (fun x : X * A => g (f x)) == (fun x : X => M g (M f x))
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
IsEquiv L
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))

forall f g : X * A -> X * A, M (fun x : X * A => g (f x)) == (fun x : X => M g (M f x))
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
f, g: X * A -> X * A
x: X

fst (g (f (x, a0))) = fst (g (fst (f (x, a0)), a0))
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
f, g: X * A -> X * A
x: X

fst (g (f (x, a0))) = fst (g (fst (f (x, a0)), snd (f (x, a0))))
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
f, g: X * A -> X * A
x: X
fst (g (fst (f (x, a0)), snd (f (x, a0)))) = fst (g (fst (f (x, a0)), a0))
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
f, g: X * A -> X * A
x: X

fst (g (f (x, a0))) = fst (g (fst (f (x, a0)), snd (f (x, a0))))
reflexivity.
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
f, g: X * A -> X * A
x: X

fst (g (fst (f (x, a0)), snd (f (x, a0)))) = fst (g (fst (f (x, a0)), a0))
apply MH.
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f

IsEquiv L
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X

IsEquiv L
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X

forall f : X * A <~> X * A, M' f == 1%equiv -> f == 1%equiv
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
Mker: forall f : X * A <~> X * A, M' f == 1%equiv -> f == 1%equiv
IsEquiv L
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X

forall f : X * A <~> X * A, M' f == 1%equiv -> f == 1%equiv
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X

forall f : X * A <~> X * A, (fun x : X => fst (f (x, a0))) == idmap -> f == idmap
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
f: X * A <~> X * A
p: (fun x : X => fst (f (x, a0))) == idmap

f == idmap
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
f: X * A <~> X * A
p: (fun x : X => fst (f (x, a0))) == idmap
fh:= fun (x : X) (a : A) => MH a f x @ p x: forall (x : X) (a : A), fst (f (x, a)) = x

f == idmap
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
f: X * A <~> X * A
p: (fun x : X => fst (f (x, a0))) == idmap
fh:= fun (x : X) (a : A) => MH a f x @ p x: forall (x : X) (a : A), fst (f (x, a)) = x
g:= fun (x : X) (a : A) => snd (f (x, a)): X -> A -> A

f == idmap
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
f: X * A <~> X * A
p: (fun x : X => fst (f (x, a0))) == idmap
fh:= fun (x : X) (a : A) => MH a f x @ p x: forall (x : X) (a : A), fst (f (x, a)) = x
g:= fun (x : X) (a : A) => snd (f (x, a)): X -> A -> A

forall x : X, IsEquiv (g x)
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
f: X * A <~> X * A
p: (fun x : X => fst (f (x, a0))) == idmap
fh:= fun (x : X) (a : A) => MH a f x @ p x: forall (x : X) (a : A), fst (f (x, a)) = x
g:= fun (x : X) (a : A) => snd (f (x, a)): X -> A -> A
ge: forall x : X, IsEquiv (g x)
f == idmap
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
f: X * A <~> X * A
p: (fun x : X => fst (f (x, a0))) == idmap
fh:= fun (x : X) (a : A) => MH a f x @ p x: forall (x : X) (a : A), fst (f (x, a)) = x
g:= fun (x : X) (a : A) => snd (f (x, a)): X -> A -> A

forall x : X, IsEquiv (g x)
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
f: X * A <~> X * A
p: (fun x : X => fst (f (x, a0))) == idmap
fh:= fun (x : X) (a : A) => MH a f x @ p x: forall (x : X) (a : A), fst (f (x, a)) = x
g:= fun (x : X) (a : A) => snd (f (x, a)): X -> A -> A

IsEquiv (functor_sigma idmap g)
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
f: X * A <~> X * A
p: (fun x : X => fst (f (x, a0))) == idmap
fh:= fun (x : X) (a : A) => MH a f x @ p x: forall (x : X) (a : A), fst (f (x, a)) = x
g:= fun (x : X) (a : A) => snd (f (x, a)): X -> A -> A

(fun x : {_ : X & A} => f (equiv_sigma_prod0 X A x)) == (fun x : {_ : X & A} => equiv_sigma_prod0 X A (functor_sigma idmap g x))
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
f: X * A <~> X * A
p: (fun x : X => fst (f (x, a0))) == idmap
fh:= fun (x : X) (a : A) => MH a f x @ p x: forall (x : X) (a : A), fst (f (x, a)) = x
g:= fun (x : X) (a : A) => snd (f (x, a)): X -> A -> A
x: X
a: A

f (x, a) = (x, g x a)
apply path_prod; [ apply fh | reflexivity ].
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
f: X * A <~> X * A
p: (fun x : X => fst (f (x, a0))) == idmap
fh:= fun (x : X) (a : A) => MH a f x @ p x: forall (x : X) (a : A), fst (f (x, a)) = x
g:= fun (x : X) (a : A) => snd (f (x, a)): X -> A -> A
ge: forall x : X, IsEquiv (g x)

f == idmap
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
f: X * A <~> X * A
p: (fun x : X => fst (f (x, a0))) == idmap
fh:= fun (x : X) (a : A) => MH a f x @ p x: forall (x : X) (a : A), fst (f (x, a)) = x
g:= fun (x : X) (a : A) => snd (f (x, a)): X -> A -> A
ge: forall x : X, IsEquiv (g x)
x: X
a: A

f (x, a) = (x, a)
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
f: X * A <~> X * A
p: (fun x : X => fst (f (x, a0))) == idmap
fh:= fun (x : X) (a : A) => MH a f x @ p x: forall (x : X) (a : A), fst (f (x, a)) = x
g:= fun (x : X) (a : A) => snd (f (x, a)): X -> A -> A
ge: forall x : X, IsEquiv (g x)
x: X
a: A
gisid:= path_aut_rigid {| equiv_fun := g x; equiv_isequiv := ge x |} 1: {| equiv_fun := g x; equiv_isequiv := ge x |} == 1%equiv

f (x, a) = (x, a)
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
f: X * A <~> X * A
p: (fun x : X => fst (f (x, a0))) == idmap
fh:= fun (x : X) (a : A) => MH a f x @ p x: forall (x : X) (a : A), fst (f (x, a)) = x
g:= fun (x : X) (a : A) => snd (f (x, a)): X -> A -> A
ge: forall x : X, IsEquiv (g x)
x: X
a: A
gisid:= path_aut_rigid {| equiv_fun := g x; equiv_isequiv := ge x |} 1: {| equiv_fun := g x; equiv_isequiv := ge x |} == 1%equiv

fst (f (x, a)) = fst (x, a)
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
f: X * A <~> X * A
p: (fun x : X => fst (f (x, a0))) == idmap
fh:= fun (x : X) (a : A) => MH a f x @ p x: forall (x : X) (a : A), fst (f (x, a)) = x
g:= fun (x : X) (a : A) => snd (f (x, a)): X -> A -> A
ge: forall x : X, IsEquiv (g x)
x: X
a: A
gisid:= path_aut_rigid {| equiv_fun := g x; equiv_isequiv := ge x |} 1: {| equiv_fun := g x; equiv_isequiv := ge x |} == 1%equiv
snd (f (x, a)) = snd (x, a)
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
f: X * A <~> X * A
p: (fun x : X => fst (f (x, a0))) == idmap
fh:= fun (x : X) (a : A) => MH a f x @ p x: forall (x : X) (a : A), fst (f (x, a)) = x
g:= fun (x : X) (a : A) => snd (f (x, a)): X -> A -> A
ge: forall x : X, IsEquiv (g x)
x: X
a: A
gisid:= path_aut_rigid {| equiv_fun := g x; equiv_isequiv := ge x |} 1: {| equiv_fun := g x; equiv_isequiv := ge x |} == 1%equiv

fst (f (x, a)) = fst (x, a)
apply fh.
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
f: X * A <~> X * A
p: (fun x : X => fst (f (x, a0))) == idmap
fh:= fun (x : X) (a : A) => MH a f x @ p x: forall (x : X) (a : A), fst (f (x, a)) = x
g:= fun (x : X) (a : A) => snd (f (x, a)): X -> A -> A
ge: forall x : X, IsEquiv (g x)
x: X
a: A
gisid:= path_aut_rigid {| equiv_fun := g x; equiv_isequiv := ge x |} 1: {| equiv_fun := g x; equiv_isequiv := ge x |} == 1%equiv

snd (f (x, a)) = snd (x, a)
apply gisid.
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
Mker: forall f : X * A <~> X * A, M' f == 1%equiv -> f == 1%equiv

IsEquiv L
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
Mker: forall f : X * A <~> X * A, M' f == 1%equiv -> f == 1%equiv

forall f g : X * A <~> X * A, M' f == M' g -> f == g
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
Mker: forall f : X * A <~> X * A, M' f == 1%equiv -> f == 1%equiv
Minj: forall f g : X * A <~> X * A, M' f == M' g -> f == g
IsEquiv L
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
Mker: forall f : X * A <~> X * A, M' f == 1%equiv -> f == 1%equiv

forall f g : X * A <~> X * A, M' f == M' g -> f == g
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
Mker: forall f : X * A <~> X * A, M' f == 1%equiv -> f == 1%equiv
f, g: X * A <~> X * A
p: M' f == M' g
z: X * A

f z = g z
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
Mker: forall f : X * A <~> X * A, M' f == 1%equiv -> f == 1%equiv
f, g: X * A <~> X * A
p: M' f == M' g
z: X * A

g^-1 (f z) = z
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
Mker: forall f : X * A <~> X * A, M' f == 1%equiv -> f == 1%equiv
f, g: X * A <~> X * A
p: M' f == M' g

forall z : X * A, g^-1 (f z) = z
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
Mker: forall f : X * A <~> X * A, M' f == 1%equiv -> f == 1%equiv
f, g: X * A <~> X * A
p: M' f == M' g

M' (g^-1 oE f) == 1%equiv
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
Mker: forall f : X * A <~> X * A, M' f == 1%equiv -> f == 1%equiv
f, g: X * A <~> X * A
p: M' f == M' g
x: X

M' (g^-1 oE f) x = 1%equiv x
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
Mker: forall f : X * A <~> X * A, M' f == 1%equiv -> f == 1%equiv
f, g: X * A <~> X * A
p: M' f == M' g
x: X

M g^-1 (M f x) = 1%equiv x
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
Mker: forall f : X * A <~> X * A, M' f == 1%equiv -> f == 1%equiv
f, g: X * A <~> X * A
p: M' f == M' g
x: X

(M' g)^-1 (M f x) = x
apply moveR_equiv_V, p.
H: Univalence
X, A: Type
n: trunc_index
IsTrunc0: IsTrunc n.+1 X
H0: IsRigid A
H1: IsConnected (Tr n.+1) A
L:= fun e : point (BAut X) <~> point (BAut X) => equiv_functor_prod_r e: point (BAut X) <~> point (BAut X) -> point (BAut X) * A <~> point (BAut X) * A
a0: A
M:= fun (f : X * A -> X * A) (x : X) => fst (f (x, a0)): (X * A -> X * A) -> X -> X
MH: forall (a : A) (f : X * A -> X * A) (x : X), fst (f (x, a)) = fst (f (x, a0))
MC: forall f g : X * A -> X * A, M (g o f) == M g o M f
M':= aut_homomorphism_end M (fun x : X => 1) MC: X * A <~> X * A -> X <~> X
Mker: forall f : X * A <~> X * A, M' f == 1%equiv -> f == 1%equiv
Minj: forall f g : X * A <~> X * A, M' f == M' g -> f == g

IsEquiv L
refine (isequiv_adjointify L M' _ _); intros e; apply path_equiv, path_arrow; try apply Minj; intros x; reflexivity. } Defined.