Peel the outermost constant offset: returns `(base, n)` where `self = Succ^n(base)` and `base` is not `Succ`.
(&self)
| 114 | } |
| 115 | |
| 116 | /// True if this level is an explicit numeral: `Succ^n(Zero)` for some n ≥ 0. |
| 117 | pub fn is_explicit(&self) -> bool { |
| 118 | match self.data() { |
| 119 | UnivData::Zero(_) => true, |
| 120 | UnivData::Succ(inner, _) => inner.is_explicit(), |
| 121 | _ => false, |
| 122 | } |
| 123 | } |
| 124 | |
| 125 | /// True if this level is `Succ^n(base)` with n > 0. Such a level is never |
| 126 | /// zero under any parameter assignment. |
| 127 | pub fn is_never_zero(&self) -> bool { |
| 128 | match self.data() { |
| 129 | UnivData::Succ(..) => true, |
| 130 | UnivData::Max(a, b, _) => a.is_never_zero() || b.is_never_zero(), |
| 131 | UnivData::IMax(_, b, _) => b.is_never_zero(), |