fact: Definition square x := match x with | N0 wx => reduce_1 (w0_square_c wx) | N1 wx => N2 (w1_square_c wx) | N2 wx => N3 (w2_square_c wx) | N3 wx => N4 (w3_square_c wx) | N4 wx => N5 (w4_square_c wx) | N5 wx => N6 (w5_square_c wx) | N6 wx => N7 (w6_square_c wx) | N7 wx => N8 (w7_square_c wx) | N8 wx => N9 (w8_square_c wx) | N9 wx => N10 (w9_square_c wx) | N10 wx => N11 (w10_square_c wx) | N11 wx => N12 (w11_square_c wx) | N12 wx => Nn 0 (w12_square_c wx) | Nn n wx => let op := make_op n in Nn (S n) (op.(znz_square_c) wx) end.
imports: ZArith Basic_type ZnZ Zn2Z Nbasic GenMul GenDivn1