proposition: Fact Σ2_is_tot_spec n l s ψ : ⟪Σ2_is_tot n l s⟫ ψ <-> mb_is_tot mem n (ψ l) (ψ s).
proof: Proof. unfold Σ2_is_tot, mb_is_tot. rewrite fol_sem_mforall. fol equiv; intros v. rewrite fol_sem_bin_fix. fol equiv imp. + rewrite fol_sem_vec_fa. fol equiv; intros p. rew vec; simpl. rewrite env_vlift_fix0, env_vlift_fix1; tauto. + rewrite fol_sem_quant_fix; fol equiv ex; intros x. rewrite fol_sem_quant_fix; fol equiv ex; intros p. rewrite fol_sem_quant_fix; fol equiv ex; intros t. do 3 (rewrite fol_sem_bin_fix). repeat fol equiv conj. * simpl; rewrite env_vlift_fix1; tauto. * simpl; rewrite env_vlift_fix1; tauto. * rewrite Σ2_is_opair_spec; simpl; tauto. * rewrite Σ2_is_tuple_spec; simpl. fol equiv. apply vec_pos_ext; intros q; rew vec. simpl; rewrite env_vlift_fix0; auto. Qed.
imports: List Arith Nat Lia Max Wellfounded Coq.Setoids.Setoid Undecidability.Shared.Libs.DLW.Utils(utils_tac utils_list finite) Undecidability.Shared.Libs.DLW.Vec(pos vec) Undecidability.FOL.TRAKHTENBROT(notations fol_ops fo_sig fo_terms fo_logic)