use super::*;
use bool_alg::{AndNotEq, FAnd, FNot};
#[derive(Copy, Clone)]
pub struct Real(());
#[derive(Copy, Clone)]
pub struct Zero(());
pub fn real_ty() -> Ty<Real, Type<Z>> {unimplemented!()}
pub fn real_is_const() -> IsConst<Real> {unimplemented!()}
pub fn zero_ty() -> Ty<Zero, Real> {unimplemented!()}
pub fn zero_is_const() -> IsConst<Zero> {unimplemented!()}
pub type RealRange<Y> = App<FAnd, Tup<App<Lt, Tup<Aleph<Z>, Y>>, App<Lt, Tup<Y, Aleph<Z>>>>>;
pub type Aleph0RealLam<Y> = Lam<Ty<Y, Real>, RealRange<Y>>;
pub type Aleph0RealTy<Y> = DepTupTy<Y, Real, Aleph0RealLam<Y>>;
pub type Aleph0Real<Y, P> = DepTup<Y, Real, P, Aleph0RealLam<Y>>;
pub type AddRealLam<X, A, Y> = Lam<Ty<A, Real>, Eq<X, App<Add, Tup<A, Y>>>>;
pub type AddRealTy<X, A, Y> = DepTupTy<A, Real, AddRealLam<X, A, Y>>;
pub type AddReal<X, A, Q, Y> = DepTup<A, Q, Real, AddRealLam<X, A, Y>>;
pub type RealDef<X, A, Q, Y, P> = Pow<AddReal<X, A, Q, Y>, Aleph0Real<Y, P>>;
pub fn real_def<X: Prop, A: Prop, Q: Prop, Y: Prop, P: Prop>(
_ty_x: Ty<X, Real>
) -> RealDef<X, A, Q, Y, P> {unimplemented!()}
#[derive(Copy, Clone)]
pub struct Add(());
#[derive(Copy, Clone)]
pub struct Neg(());
#[derive(Copy, Clone)]
pub struct Sub(pub Comp<Add, Par<FId, Neg>>);
#[derive(Copy, Clone)]
pub struct Lt(());
#[derive(Copy, Clone)]
pub struct Ge(pub Comp<FNot, Lt>);
#[derive(Copy, Clone)]
pub struct Gt(pub AndNotEq<Ge>);
#[derive(Copy, Clone)]
pub struct Le(pub Comp<FNot, Gt>);
#[derive(Copy, Clone)]
pub struct Aleph<N>(N);