{A B C A' P} (f : A -> A') (g : JoinRecData B C P) : functor_join f (join_rec g) == trijoin_rec {| j1 := joinl o f; j2 := joinr o jl g; j3 := joinr o jr g; j12 := fun a b => jglue (f a) (jl g b); j13 := fun a c => jglue (f a) (jr g c); j23 := fun b c => ap joinr (jg g b c); j123 := fun a b c => triangle_v (f a) (jg g b c); |}. Proof. refine (moveL_equiv_V_0gpd (trijoin_rec_inv_natequiv A B C _) _ _ _). unfold trijoin_rec_inv_natequiv, equiv_fun_0gpd; simpl. unfold trijoinrecdata_fun, trijoinrecdata_trijoin; simpl. bundle_trijoinrecpath; intros; cbn. - exact (functor_join_beta_jglue f _ a (joinl b)). - exact (functor_join_beta_jglue f _ a (joinr c)). - unfold join23. refine ((ap_compose joinr _ _)^ @ _). simpl. refine (ap_compose _ joinr (jglue b c) @ _). refine (ap (ap joinr) _). apply join_rec_beta_jg. - unfold prism'. change (join123 a b c) with (triangle_v a (jglue b c)). exact (ap_triangle_functor_join f (join_rec g) a (jglue b c) (jg g b c) (Join_rec_beta_jglue _ _ _ b c)). Defined.
Require Import Basics Types.Paths WildCat Join.Core HoTT.Tactics.