+corec theorem sor_distr_dx: ∀g0,g1,g2,g. g1 ⋓ g2 ≘ g →
+ ∀f1,f2,f. g1 ⋓ g0 ≘ f1 → g2 ⋓ g0 ≘ f2 → g ⋓ g0 ≘ f →
+ f1 ⋓ f2 ≘ f.
+#g0 cases (pn_split g0) * #y0 #H0 #g1 #g2 #g
+[ * -g1 -g2 -g #y1 #y2 #y #g1 #g2 #g #Hy #Hy1 #Hy2 #Hy #f1 #f2 #f #Hf1 #Hf2 #Hf
+ [ cases (sor_inv_ppx … Hf1 … Hy1 H0) -g1
+ cases (sor_inv_ppx … Hf2 … Hy2 H0) -g2
+ cases (sor_inv_ppx … Hf … Hy H0) -g
+ | cases (sor_inv_npx … Hf1 … Hy1 H0) -g1
+ cases (sor_inv_ppx … Hf2 … Hy2 H0) -g2
+ cases (sor_inv_npx … Hf … Hy H0) -g
+ | cases (sor_inv_ppx … Hf1 … Hy1 H0) -g1
+ cases (sor_inv_npx … Hf2 … Hy2 H0) -g2
+ cases (sor_inv_npx … Hf … Hy H0) -g
+ | cases (sor_inv_npx … Hf1 … Hy1 H0) -g1
+ cases (sor_inv_npx … Hf2 … Hy2 H0) -g2
+ cases (sor_inv_npx … Hf … Hy H0) -g
+ ] -g0 #y #Hy #H #y2 #Hy2 #H2 #y1 #Hy1 #H1
+ /3 width=8 by sor_nn, sor_np, sor_pn, sor_pp/
+| #H #f1 #f2 #f #Hf1 #Hf2 #Hf
+ cases (sor_xnx_tl … Hf1 … H0) -Hf1
+ cases (sor_xnx_tl … Hf2 … H0) -Hf2
+ cases (sor_xnx_tl … Hf … H0) -Hf
+ -g0 #y #x #Hx #Hy #H #y2 #x2 #Hx2 #Hy2 #H2 #y1 #x1 #Hx1 #Hy1 #H1
+ /4 width=8 by sor_tl, sor_nn/
+]
+qed-.