use super::*;
#[derive(Copy, Clone)]
pub struct Natc(());
pub fn natc_ty() -> Ty<Natc, Type<Z>> {unimplemented!()}
pub fn natc_def<N: Prop, M: Prop>(
_: Ty<N, Natc>
) -> Or<Eq<N, Zc>, Exists<Ty<M, Natc>, Eq<Sc<M>, N>>> {unimplemented!()}
#[derive(Copy, Clone)]
pub struct Zc(());
pub fn zeroc_ty() -> Ty<Zc, Natc> {unimplemented!()}
#[derive(Copy, Clone)]
pub struct FSc(());
pub type Sc<N> = App<FSc, N>;
pub fn sc_ty() -> Ty<FSc, Pow<Natc, Natc>> {unimplemented!()}
pub fn sc_def<N: Prop>(_ty_n: Ty<N, Natc>) -> Ty<Sc<N>, Natc> {unimplemented!()}
pub fn sc_eq_rev<N: Prop, M: Prop>(_: Eq<Sc<N>, Sc<M>>) -> Eq<N, M> {unimplemented!()}
#[derive(Copy, Clone)]
pub struct FAddc(());
pub type Addc<A, B> = App<FAddc, Tup<A, B>>;
pub fn addc_ty() -> Ty<FAddc, Pow<Natc, Tup<Natc, Natc>>> {unimplemented!()}
pub fn addc_zeroc<N: Prop>(_ty_n: Ty<N, Natc>) -> Eq<Addc<N, Zc>, N> {unimplemented!()}
pub fn addc_sc<N: Prop, M: Prop>(
_ty_sc_n: Ty<Sc<N>, Natc>,
_ty_m: Ty<M, Natc>
) -> Eq<Addc<N, Sc<M>>, Sc<Addc<N, M>>> {unimplemented!()}
pub fn addc_closed<N: Prop, M: Prop>(
_ty_n: Ty<N, Natc>,
_ty_m: Ty<M, Natc>,
_: Q<N, Addc<Sc<N>, M>>
) -> Eq<N, M> {unimplemented!()}
#[derive(Copy, Clone)]
pub struct FMulc(());
pub type Mulc<A, B> = App<FMulc, Tup<A, B>>;
pub fn mulc_ty() -> Ty<FMulc, Pow<Natc, Tup<Natc, Natc>>> {unimplemented!()}
pub fn mulc_zc<N: Prop>(_ty_n: Ty<N, Natc>) -> Eq<Mulc<N, Zc>, Zc> {unimplemented!()}
pub fn mulc_sc<N: Prop, M: Prop>(
_ty_n: Ty<N, Natc>,
_ty_m: Ty<M, Natc>,
) -> Eq<Mulc<N, Sc<M>>, Addc<Mulc<N, M>, N>> {unimplemented!()}
pub fn eq_last_zeroc<N: Prop>(
tauto_ty_n: Tauto<Ty<N, Natc>>,
theory_x: Q<N, Sc<N>>
) -> Eq<N, Zc> {
fn f<N: Prop>(ty_n: Ty<N, Natc>) -> Eq<Sc<N>, Addc<Sc<N>, Zc>> {
eq::symmetry(addc_zeroc(sc_def(ty_n)))
}
let theory_x = hooo::q_in_right_arg(theory_x, tauto_ty_n.trans(f));
addc_closed(tauto_ty_n(True), zeroc_ty(), theory_x)
}