unfold injective_left in |- *.
unfold enc_synthesis_left in |- *.
unfold op_synthesis_left in |- *.
unfold pair_free_left in |- *.
intro h.
intro.
intro.
intro.
intro.
intros M N H3.
induction  H3
as
[M
N
H3|
M
N
K
L
H3_1
HrecH3_1
H3_0
HrecH3_0|
M1
N1
M2
N2
H3_1
HrecH3_1
H3_0
HrecH3_0|
o
M
N
H3
HrecH3]; intros M' N' H4;
[ induction  H4
as
[M0
N0
H4|
M0
N0
K
L
H4_1
HrecH4_1
H4_0
HrecH4_0|
M1
N1
M2
N2
H4_1
HrecH4_1
H4_0
HrecH4_0|
o
M0
N0
H4
HrecH4]
| induction  H4
as
[M0
N0
H3|
M0
N0
K0
L0
H4_1
HrecH4_1
H4_0
HrecH4_0|
M1
N1
M2
N2
H4_1
HrecH4_1
H4_0
HrecH4_0|
o
M0
N0
H4
HrecH4]
| induction  H4
as
[M
N
H3|
M
N
K
L
H4_1
HrecH4_1
H4_0
HrecH4_0|
M0
N0
M3
N3
H4_1
HrecH4_1
H4_0
HrecH4_0|
o
M
N
H4
HrecH4]
| induction  H4
as
[M0
N0
H4|
M0
N0
K
L
H4_1
HrecH4_1
H4_0
HrecH4_0|
M1
N1
M2
N2
H4_1
HrecH4_1
H4_0
HrecH4_0|
o0
M0
N0
H4
HrecH4] ].
intro.
exact (H M N H3 M0 N0 H4 H5).
intro.
cut (~ synthesis h M0 N0 \/ ~ synthesis h K L).
intro.
case H5; intro H6; red in H6; tauto.
apply (H0 M N H3 M0 K H4).
intro.
rewrite H4 in H3.
cut False.
tauto.
apply (H2 M1 M2 N); trivial.
intro.
cut (~ synthesis h M0 N0).
intro.
tauto.
apply (H1 o M N H3 M0 H5); trivial.
intro.
cut (~ synthesis h M N \/ ~ synthesis h K L).
intro.
case H5; intro H6; red in H6; tauto.
apply (H0 M0 N0 H3 M K); auto.
intro.
inversion H3.
rewrite (HrecH3_1 M0 N0 H4_1 H5).
rewrite (HrecH3_0 K0 L0 H4_0 H6).
trivial.
intro.
inversion H3.
intro.
inversion H3.
intro.
rewrite <- H4 in H3.
cut False.
tauto.
apply (H2 M1 M2 N H3).
intro.
inversion H3.
intro.
inversion H3.
rewrite (HrecH3_1 M0 N0 H4_1 H5).
rewrite (HrecH3_0 M3 N3 H4_0 H6); trivial.
intro.
inversion H3.
intro.
cut (~ synthesis h M N).
intro.
tauto.
apply (H1 o M0 N0 H4 M); auto.
intro.
inversion H4.
intro.
inversion H4.
case (op_eq_dec o o0).
intro.
rewrite <- e.
intro.
inversion H5.
rewrite (HrecH3 M0 N0 H4 H7).
trivial.
intros.
inversion H5.
tauto.
Qed.

(* Specifications: *)
Theorem inj_inv_left_syn :
forall h : hedge,
injective_left h ->
enc_synthesis_left h ->
op_synthesis_left h ->
pair_free_left h -> injective_inv_left h -> injective_inv_left (synthesis h).