Documentation

Foundation.Vorspiel.Arith

theorem Nat.pos_of_eq_one {n : } (h : n = 1) :
0 < n
def Nat.isEqNat (n : ) (m : ) :
Equations
  • n.isEqNat m = if n = m then 1 else 0
Instances For
    def Nat.isLtNat (n : ) (m : ) :
    Equations
    • n.isLtNat m = if n < m then 1 else 0
    Instances For
      def Nat.isLeNat (n : ) (m : ) :
      Equations
      • n.isLeNat m = if n m then 1 else 0
      Instances For
        def Nat.isDvdNat (n : ) (m : ) :
        Equations
        • n.isDvdNat m = if n m then 1 else 0
        Instances For
          @[simp]
          theorem Nat.isEqNat_pos_iff {n : } {m : } :
          0 < n.isEqNat m n = m
          @[simp]
          theorem Nat.isLtNat_pos_iff {n : } {m : } :
          0 < n.isLtNat m n < m
          @[simp]
          theorem Nat.isLeNat_pos_iff {n : } {m : } :
          0 < n.isLeNat m n m
          @[simp]
          theorem Nat.isDvdNat_pos_iff {n : } {m : } :
          0 < n.isDvdNat m n m
          def Nat.inv (n : ) :
          Equations
          • n.inv = n.isEqNat 0
          Instances For
            def Nat.pos (n : ) :
            Equations
            Instances For
              @[simp]
              theorem Nat.inv_zero :
              @[simp]
              theorem Nat.inv_iff_ne_zero {n : } :
              n.inv = 0 0 < n
              @[simp]
              theorem Nat.inv_ne_zero {n : } (h : n 0) :
              n.inv = 0
              @[simp]
              theorem Nat.pos_zero :
              @[simp]
              theorem Nat.pos_ne_zero {n : } (h : n 0) :
              n.pos = 1
              def Nat.and (n : ) (m : ) :
              Equations
              Instances For
                def Nat.or (n : ) (m : ) :
                Equations
                Instances For
                  theorem Nat.and_eq (n : ) (m : ) :
                  n.and m = if 0 < n 0 < m then 1 else 0
                  theorem Nat.and_eq_one (n : ) (m : ) :
                  n.and m = 1 0 < n 0 < m
                  theorem Nat.or_eq (n : ) (m : ) :
                  n.or m = if 0 < n 0 < m then 1 else 0
                  @[simp]
                  theorem Nat.and_pos_iff (n : ) (m : ) :
                  0 < n.and m 0 < n 0 < m
                  @[simp]
                  theorem Nat.or_pos_iff (n : ) (m : ) :
                  0 < n.or m 0 < n 0 < m
                  @[simp]
                  theorem Nat.inv_pos_iff (n : ) :
                  0 < n.inv ¬0 < n
                  @[simp]
                  theorem Nat.pos_pos_iff (n : ) :
                  0 < n.pos 0 < n
                  def Nat.ball (n : ) (p : ) :
                  Equations
                  • n.ball p = Nat.rec 1 (fun (n ih : ) => (p n).pos.and ih) n
                  Instances For
                    @[simp]
                    theorem Nat.ball_pos_iff {p : } {n : } :
                    0 < n.ball p m < n, 0 < p m
                    @[simp]
                    theorem Nat.ball_eq_zero_iff {p : } {n : } :
                    n.ball p = 0 m < n, p m = 0
                    theorem Nat.ball_pos_iff_eq_one {p : } {n : } :
                    n.ball p = 1 0 < n.ball p
                    Instances For
                      def Nat.Arith₁ {n : } (f : Mathlib.Vector n) :
                      Equations
                      Instances For
                        theorem Nat.ArithPart₁.bind {n : } (f : Mathlib.Vector n →. ) (hf : Nat.ArithPart₁ fun (v : Mathlib.Vector (n + 1)) => f v.tail v.head) {g : Mathlib.Vector n →. } (hg : Nat.ArithPart₁ g) :
                        Nat.ArithPart₁ fun (v : Mathlib.Vector n) => (g v).bind (f v)
                        theorem Nat.ArithPart₁.map {n : } (f : Mathlib.Vector n) (hf : Nat.Arith₁ fun (v : Mathlib.Vector (n + 1)) => f v.tail v.head) {g : Mathlib.Vector n →. } (hg : Nat.ArithPart₁ g) :
                        Nat.ArithPart₁ fun (v : Mathlib.Vector n) => Part.map (f v) (g v)
                        theorem Nat.ArithPart₁.comp₁ (f : →. ) (hf : Nat.ArithPart₁ fun (v : Mathlib.Vector 1) => f (v.get 0)) {n : } {g : Mathlib.Vector n} (hg : Nat.Arith₁ g) :
                        Nat.ArithPart₁ fun (v : Mathlib.Vector n) => f (g v)
                        theorem Nat.ArithPart₁.comp₂ (f : →. ) (hf : Nat.ArithPart₁ fun (v : Mathlib.Vector 2) => f (v.get 0) (v.get 1)) {n : } {g : Mathlib.Vector n} {h : Mathlib.Vector n} (hg : Nat.Arith₁ g) (hh : Nat.Arith₁ h) :
                        Nat.ArithPart₁ fun (v : Mathlib.Vector n) => f (g v) (h v)
                        theorem Nat.ArithPart₁.rfind' {n : } {f : Mathlib.Vector n} (h : Nat.Arith₁ fun (v : Mathlib.Vector (n + 1)) => f v.head v.tail) :
                        Nat.ArithPart₁ fun (v : Mathlib.Vector n) => Nat.rfind fun (n : ) => Part.some (decide (f n v = 0))
                        theorem Nat.ArithPart₁.rfind'₁ {n : } (i : Fin n) {f : } (h : Nat.Arith₁ fun (v : Mathlib.Vector 2) => f (v.get 0) (v.get 1)) :
                        Nat.ArithPart₁ fun (v : Mathlib.Vector n) => Nat.rfind fun (n_1 : ) => Part.some (decide (f n_1 (v.get i) = 0))
                        theorem Nat.Arith₁.of_eq {n : } {f : Mathlib.Vector n} {g : Mathlib.Vector n} (hf : Nat.Arith₁ f) (H : ∀ (i : Mathlib.Vector n), f i = g i) :
                        theorem Nat.Arith₁.one {n : } :
                        theorem Nat.Arith₁.add {n : } (i : Fin n) (j : Fin n) :
                        Nat.Arith₁ fun (v : Mathlib.Vector n) => v.get i + v.get j
                        theorem Nat.Arith₁.mul {n : } (i : Fin n) (j : Fin n) :
                        Nat.Arith₁ fun (v : Mathlib.Vector n) => v.get i * v.get j
                        theorem Nat.Arith₁.proj {n : } (i : Fin n) :
                        Nat.Arith₁ fun (v : Mathlib.Vector n) => v.get i
                        theorem Nat.Arith₁.head {n : } :
                        Nat.Arith₁ fun (v : Mathlib.Vector (n + 1)) => v.head
                        theorem Nat.Arith₁.equal {n : } (i : Fin n) (j : Fin n) :
                        Nat.Arith₁ fun (v : Mathlib.Vector n) => (v.get i).isEqNat (v.get j)
                        theorem Nat.Arith₁.lt {n : } (i : Fin n) (j : Fin n) :
                        Nat.Arith₁ fun (v : Mathlib.Vector n) => (v.get i).isLtNat (v.get j)
                        theorem Nat.Arith₁.comp {m : } {n : } {f : Mathlib.Vector n} (g : Fin nMathlib.Vector m) (hf : Nat.Arith₁ f) (hg : ∀ (i : Fin n), Nat.Arith₁ (g i)) :
                        Nat.Arith₁ fun (v : Mathlib.Vector m) => f (Mathlib.Vector.ofFn fun (i : Fin n) => g i v)
                        Equations
                        Instances For
                          theorem Nat.Arith₁.nil {n : } :
                          Nat.Arith₁.Vec fun (x : Mathlib.Vector n) => Mathlib.Vector.nil
                          theorem Nat.Arith₁.cons {n : } {m : } {f : Mathlib.Vector n} {g : Mathlib.Vector nMathlib.Vector m} (hf : Nat.Arith₁ f) (hg : Nat.Arith₁.Vec g) :
                          Nat.Arith₁.Vec fun (v : Mathlib.Vector n) => f v ::ᵥ g v
                          theorem Nat.Arith₁.tail {n : } {f : Mathlib.Vector n} (hf : Nat.Arith₁ f) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n.succ) => f v.tail
                          theorem Nat.Arith₁.comp' {n : } {m : } {f : Mathlib.Vector m} {g : Mathlib.Vector nMathlib.Vector m} (hf : Nat.Arith₁ f) (hg : Nat.Arith₁.Vec g) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n) => f (g v)
                          theorem Nat.Arith₁.comp₁ (f : ) (hf : Nat.Arith₁ fun (v : Mathlib.Vector 1) => f (v.get 0)) {n : } {g : Mathlib.Vector n} (hg : Nat.Arith₁ g) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n) => f (g v)
                          theorem Nat.Arith₁.comp₂ (f : ) (hf : Nat.Arith₁ fun (v : Mathlib.Vector 2) => f (v.get 0) (v.get 1)) {n : } {g : Mathlib.Vector n} {h : Mathlib.Vector n} (hg : Nat.Arith₁ g) (hh : Nat.Arith₁ h) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n) => f (g v) (h v)
                          theorem Nat.Arith₁.succ {n : } (i : Fin n) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n) => v.get i + 1
                          theorem Nat.Arith₁.const {n : } (m : ) :
                          theorem Nat.Arith₁.inv {n : } (i : Fin n) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n) => (v.get i).inv
                          theorem Nat.Arith₁.pos {n : } (i : Fin n) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n) => (v.get i).pos
                          theorem Nat.Arith₁.and {n : } (i : Fin n) (j : Fin n) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n) => (v.get i).and (v.get j)
                          theorem Nat.Arith₁.or {n : } (i : Fin n) (j : Fin n) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n) => (v.get i).or (v.get j)
                          theorem Nat.Arith₁.le {n : } (i : Fin n) (j : Fin n) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n) => (v.get i).isLeNat (v.get j)
                          theorem Nat.Arith₁.if_pos {n : } {f : Mathlib.Vector n} {g : Mathlib.Vector n} {h : Mathlib.Vector n} (hf : Nat.Arith₁ f) (hg : Nat.Arith₁ g) (hh : Nat.Arith₁ h) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n) => if 0 < f v then g v else h v
                          theorem Nat.Arith₁.to_arith₁ {n : } {f : Mathlib.Vector n} (h : Nat.Arith₁ f) :
                          Nat.ArithPart₁ fun (x : Mathlib.Vector n) => (some (f x))
                          theorem Nat.ArithPart₁.rfindPos {n : } {f : Mathlib.Vector (n + 1)} (h : Nat.Arith₁ f) :
                          Nat.ArithPart₁ fun (v : Mathlib.Vector n) => Nat.rfind fun (n_1 : ) => Part.some (decide (0 < f (n_1 ::ᵥ v)))
                          theorem Nat.ArithPart₁.rfindPos₁ {n : } (i : Fin n) {f : } (h : Nat.Arith₁ fun (v : Mathlib.Vector 2) => f (v.get 0) (v.get 1)) :
                          Nat.ArithPart₁ fun (v : Mathlib.Vector n) => Nat.rfind fun (n_1 : ) => Part.some (decide (0 < f n_1 (v.get i)))
                          theorem Nat.ArithPart₁.inv_fun {n : } (i : Fin n) (f : ) (hf : Nat.Arith₁ fun (v : Mathlib.Vector 1) => f (v.get 0)) :
                          Nat.ArithPart₁ fun (v : Mathlib.Vector n) => Nat.rfind fun (x : ) => Part.some (decide (f x v.get i v.get i < f (x + 1)))
                          theorem Nat.ArithPart₁.implicit_fun {n : } (i : Fin n) (f : Mathlib.Vector n) (hf : Nat.Arith₁ fun (v : Mathlib.Vector (n + 1)) => f v.tail v.head) :
                          Nat.ArithPart₁ fun (v : Mathlib.Vector n) => Nat.rfind fun (x : ) => Part.some (decide (f v x v.get i v.get i < f v (x + 1)))
                          theorem Nat.Arith₁.sqrt {n : } (i : Fin n) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n) => (v.get i).sqrt
                          theorem Nat.Arith₁.sub {n : } (i : Fin n) (j : Fin n) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n) => v.get i - v.get j
                          theorem Nat.Arith₁.pair {n : } (i : Fin n) (j : Fin n) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n) => Nat.pair (v.get i) (v.get j)
                          theorem Nat.Arith₁.unpair₁ {n : } (i : Fin n) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n) => (Nat.unpair (v.get i)).1
                          theorem Nat.Arith₁.unpair₂ {n : } (i : Fin n) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n) => (Nat.unpair (v.get i)).2
                          theorem Nat.Arith₁.dvd {n : } (i : Fin n) (j : Fin n) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n) => (v.get i).isDvdNat (v.get j)
                          theorem Nat.Arith₁.rem {n : } (i : Fin n) (j : Fin n) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n) => v.get i % v.get j
                          theorem Nat.Arith₁.beta {n : } (i : Fin n) (j : Fin n) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n) => (v.get i).beta (v.get j)
                          theorem Nat.Arith₁.ball {n : } {p : Mathlib.Vector n} (hp : Nat.Arith₁ fun (v : Mathlib.Vector (n + 1)) => p v.tail v.head) (i : Fin n) :
                          Nat.Arith₁ fun (v : Mathlib.Vector n) => (v.get i).ball (p v)
                          def Nat.Arith₁.recSequence {n : } (f : Mathlib.Vector n) (g : Mathlib.Vector (n + 2)) (z : ) (v : Mathlib.Vector n) :
                          Equations
                          Instances For
                            theorem Nat.Arith₁.beta_unbeta_recSequence_eq {n : } (f : Mathlib.Vector n) (g : Mathlib.Vector (n + 2)) (z : ) (v : Mathlib.Vector n) (m : ) (hm : m < z + 1) :
                            (Nat.unbeta (Nat.Arith₁.recSequence f g z v)).beta m = Nat.rec (f v) (fun (y IH : ) => g (y ::ᵥ IH ::ᵥ v)) m
                            theorem Nat.Arith₁.beta_unbeta_recSequence_succ {n : } (f : Mathlib.Vector n) (g : Mathlib.Vector (n + 2)) (z : ) (v : Mathlib.Vector n) {m : } (hm : m < z) :
                            (Nat.unbeta (Nat.Arith₁.recSequence f g z v)).beta (m + 1) = g (m ::ᵥ (Nat.unbeta (Nat.Arith₁.recSequence f g z v)).beta m ::ᵥ v)
                            theorem Nat.Arith₁.beta_eq_rec {n : } {m : } (f : Mathlib.Vector n) (g : Mathlib.Vector (n + 2)) {z : } {v : Mathlib.Vector n} (h0 : z.beta 0 = f v) (hs : i < m, z.beta (i + 1) = g (i ::ᵥ z.beta i ::ᵥ v)) :
                            z.beta m = Nat.rec (f v) (fun (y IH : ) => g (y ::ᵥ IH ::ᵥ v)) m
                            theorem Nat.Arith₁.prec {n : } {f : Mathlib.Vector n} {g : Mathlib.Vector (n + 2)} (hf : Nat.Arith₁ f) (hg : Nat.Arith₁ g) :
                            Nat.Arith₁ fun (v : Mathlib.Vector (n + 1)) => Nat.rec (f v.tail) (fun (y IH : ) => g (y ::ᵥ IH ::ᵥ v.tail)) v.head
                            Instances For
                              Instances For