HepLean Documentation

Init.Data.Array.Basic

Array literal syntax #

Equations
  • One or more equations did not get rendered due to their size.
Instances For

    Preliminary theorems #

    @[simp]
    theorem Array.size_set {α : Type u} (a : Array α) (i : Fin a.size) (v : α) :
    (a.set i v).size = a.size
    @[simp]
    theorem Array.size_push {α : Type u} (a : Array α) (v : α) :
    (a.push v).size = a.size + 1
    theorem Array.ext {α : Type u} (a : Array α) (b : Array α) (h₁ : a.size = b.size) (h₂ : ∀ (i : Nat) (hi₁ : i < a.size) (hi₂ : i < b.size), a[i] = b[i]) :
    a = b
    theorem Array.ext.extAux {α : Type u} (a : List α) (b : List α) (h₁ : a.length = b.length) (h₂ : ∀ (i : Nat) (hi₁ : i < a.length) (hi₂ : i < b.length), a.get i, hi₁ = b.get i, hi₂) :
    a = b
    theorem Array.ext' {α : Type u} {as : Array α} {bs : Array α} (h : as.toList = bs.toList) :
    as = bs
    @[simp]
    theorem Array.toArrayAux_eq {α : Type u} (as : List α) (acc : Array α) :
    (as.toArrayAux acc).toList = acc.toList ++ as
    @[simp]
    theorem Array.toList_toArray {α : Type u} (as : List α) :
    as.toArray.toList = as
    @[simp]
    theorem Array.size_toArray {α : Type u} (as : List α) :
    as.toArray.size = as.length
    @[reducible, inline, deprecated Array.toList_toArray]
    abbrev Array.data_toArray {α : Type u_1} (as : List α) :
    as.toArray.toList = as
    Equations
    Instances For
      @[reducible, inline, deprecated Array.toList]
      abbrev Array.Array.data {α : Type u_1} (self : Array α) :
      List α
      Equations
      Instances For

        Externs #

        @[extern lean_array_size]
        def Array.usize {α : Type u} (a : Array α) :

        Low-level version of size that directly queries the C array object cached size. While this is not provable, usize always returns the exact size of the array since the implementation only supports arrays of size less than USize.size.

        Equations
        • a.usize = a.size.toUSize
        Instances For
          @[extern lean_array_uget]
          def Array.uget {α : Type u} (a : Array α) (i : USize) (h : i.toNat < a.size) :
          α

          Low-level version of fget which is as fast as a C array read. Fin values are represented as tag pointers in the Lean runtime. Thus, fget may be slightly slower than uget.

          Equations
          • a.uget i h = a[i.toNat]
          Instances For
            @[extern lean_array_uset]
            def Array.uset {α : Type u} (a : Array α) (i : USize) (v : α) (h : i.toNat < a.size) :

            Low-level version of fset which is as fast as a C array fset. Fin values are represented as tag pointers in the Lean runtime. Thus, fset may be slightly slower than uset.

            Equations
            • a.uset i v h = a.set i.toNat, h v
            Instances For
              @[extern lean_array_pop]
              def Array.pop {α : Type u} (a : Array α) :
              Equations
              • a.pop = { toList := a.toList.dropLast }
              Instances For
                @[simp]
                theorem Array.size_pop {α : Type u} (a : Array α) :
                a.pop.size = a.size - 1
                @[extern lean_mk_array]
                def Array.mkArray {α : Type u} (n : Nat) (v : α) :
                Equations
                Instances For
                  @[extern lean_array_fswap]
                  def Array.swap {α : Type u} (a : Array α) (i : Fin a.size) (j : Fin a.size) :

                  Swaps two entries in an array.

                  This will perform the update destructively provided that a has a reference count of 1 when called.

                  Equations
                  • a.swap i j = (a.set i (a.get j)).set (j) (a.get i)
                  Instances For
                    @[simp]
                    theorem Array.size_swap {α : Type u} (a : Array α) (i : Fin a.size) (j : Fin a.size) :
                    (a.swap i j).size = a.size
                    @[extern lean_array_swap]
                    def Array.swap! {α : Type u} (a : Array α) (i : Nat) (j : Nat) :

                    Swaps two entries in an array, or returns the array unchanged if either index is out of bounds.

                    This will perform the update destructively provided that a has a reference count of 1 when called.

                    Equations
                    • a.swap! i j = if h₁ : i < a.size then if h₂ : j < a.size then a.swap i, h₁ j, h₂ else a else a
                    Instances For

                      GetElem instance for USize, backed by uget #

                      instance Array.instGetElemUSizeLtNatToNatSize {α : Type u} :
                      GetElem (Array α) USize α fun (xs : Array α) (i : USize) => i.toNat < xs.size
                      Equations
                      • Array.instGetElemUSizeLtNatToNatSize = { getElem := fun (xs : Array α) (i : USize) (h : i.toNat < xs.size) => xs.uget i h }

                      Definitions #

                      Equations
                      • Array.instEmptyCollection = { emptyCollection := #[] }
                      instance Array.instInhabited {α : Type u} :
                      Equations
                      • Array.instInhabited = { default := #[] }
                      def Array.isEmpty {α : Type u} (a : Array α) :
                      Equations
                      Instances For
                        @[specialize #[]]
                        def Array.isEqvAux {α : Type u} (a : Array α) (b : Array α) (hsz : a.size = b.size) (p : ααBool) (i : Nat) :
                        i a.sizeBool
                        Equations
                        • a.isEqvAux b hsz p 0 x_2 = true
                        • a.isEqvAux b hsz p i.succ h = (p a[i] b[i] && a.isEqvAux b hsz p i )
                        Instances For
                          @[inline]
                          def Array.isEqv {α : Type u} (a : Array α) (b : Array α) (p : ααBool) :
                          Equations
                          • a.isEqv b p = if h : a.size = b.size then a.isEqvAux b h p a.size else false
                          Instances For
                            instance Array.instBEq {α : Type u} [BEq α] :
                            BEq (Array α)
                            Equations
                            • Array.instBEq = { beq := fun (a b : Array α) => a.isEqv b BEq.beq }
                            def Array.ofFn {α : Type u} {n : Nat} (f : Fin nα) :

                            ofFn f with f : Fin n → α returns the list whose ith element is f i.

                            ofFn f = #[f 0, f 1, ... , f(n - 1)]
                            
                            Equations
                            Instances For
                              def Array.ofFn.go {α : Type u} {n : Nat} (f : Fin nα) (i : Nat) (acc : Array α) :

                              Auxiliary for ofFn. ofFn.go f i acc = acc ++ #[f i, ..., f(n - 1)]

                              Equations
                              Instances For

                                The array #[0, 1, ..., n - 1].

                                Equations
                                Instances For
                                  def Array.singleton {α : Type u} (v : α) :
                                  Equations
                                  Instances For
                                    def Array.back {α : Type u} [Inhabited α] (a : Array α) :
                                    α
                                    Equations
                                    • a.back = a.get! (a.size - 1)
                                    Instances For
                                      def Array.get? {α : Type u} (a : Array α) (i : Nat) :
                                      Equations
                                      • a.get? i = if h : i < a.size then some a[i] else none
                                      Instances For
                                        def Array.back? {α : Type u} (a : Array α) :
                                        Equations
                                        • a.back? = a.get? (a.size - 1)
                                        Instances For
                                          @[inline]
                                          def Array.swapAt {α : Type u} (a : Array α) (i : Fin a.size) (v : α) :
                                          α × Array α
                                          Equations
                                          • a.swapAt i v = (a.get i, a.set i v)
                                          Instances For
                                            @[inline]
                                            def Array.swapAt! {α : Type u} (a : Array α) (i : Nat) (v : α) :
                                            α × Array α
                                            Equations
                                            • One or more equations did not get rendered due to their size.
                                            Instances For
                                              def Array.shrink {α : Type u} (a : Array α) (n : Nat) :
                                              Equations
                                              Instances For
                                                def Array.shrink.loop {α : Type u} :
                                                NatArray αArray α
                                                Equations
                                                Instances For
                                                  @[inline]
                                                  unsafe def Array.modifyMUnsafe {α : Type u} {m : Type u → Type u_1} [Monad m] (a : Array α) (i : Nat) (f : αm α) :
                                                  m (Array α)
                                                  Instances For
                                                    @[implemented_by Array.modifyMUnsafe]
                                                    def Array.modifyM {α : Type u} {m : Type u → Type u_1} [Monad m] (a : Array α) (i : Nat) (f : αm α) :
                                                    m (Array α)
                                                    Equations
                                                    • a.modifyM i f = if h : i < a.size then let idx := i, h; let v := a.get idx; do let vf v pure (a.set idx v) else pure a
                                                    Instances For
                                                      @[inline]
                                                      def Array.modify {α : Type u} (a : Array α) (i : Nat) (f : αα) :
                                                      Equations
                                                      • a.modify i f = (a.modifyM i f).run
                                                      Instances For
                                                        @[inline]
                                                        def Array.modifyOp {α : Type u} (self : Array α) (idx : Nat) (f : αα) :
                                                        Equations
                                                        • self.modifyOp idx f = self.modify idx f
                                                        Instances For
                                                          @[inline]
                                                          unsafe def Array.forInUnsafe {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (as : Array α) (b : β) (f : αβm (ForInStep β)) :
                                                          m β

                                                          We claim this unsafe implementation is correct because an array cannot have more than usizeSz elements in our runtime.

                                                          This kind of low level trick can be removed with a little bit of compiler support. For example, if the compiler simplifies as.size < usizeSz to true.

                                                          Instances For
                                                            @[specialize #[]]
                                                            unsafe def Array.forInUnsafe.loop {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (as : Array α) (f : αβm (ForInStep β)) (sz : USize) (i : USize) (b : β) :
                                                            m β
                                                            Instances For
                                                              @[implemented_by Array.forInUnsafe]
                                                              def Array.forIn {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (as : Array α) (b : β) (f : αβm (ForInStep β)) :
                                                              m β

                                                              Reference implementation for forIn

                                                              Equations
                                                              Instances For
                                                                def Array.forIn.loop {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (as : Array α) (f : αβm (ForInStep β)) (i : Nat) (h : i as.size) (b : β) :
                                                                m β
                                                                Equations
                                                                Instances For
                                                                  instance Array.instForIn {α : Type u} {m : Type u_1 → Type u_2} :
                                                                  ForIn m (Array α) α
                                                                  Equations
                                                                  • Array.instForIn = { forIn := fun {β : Type ?u.19} [Monad m] => Array.forIn }
                                                                  @[inline]
                                                                  unsafe def Array.foldlMUnsafe {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (f : βαm β) (init : β) (as : Array α) (start : optParam Nat 0) (stop : optParam Nat as.size) :
                                                                  m β

                                                                  See comment at forInUnsafe

                                                                  Instances For
                                                                    @[specialize #[]]
                                                                    unsafe def Array.foldlMUnsafe.fold {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (f : βαm β) (as : Array α) (i : USize) (stop : USize) (b : β) :
                                                                    m β
                                                                    Instances For
                                                                      @[implemented_by Array.foldlMUnsafe]
                                                                      def Array.foldlM {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (f : βαm β) (init : β) (as : Array α) (start : optParam Nat 0) (stop : optParam Nat as.size) :
                                                                      m β

                                                                      Reference implementation for foldlM

                                                                      Equations
                                                                      • One or more equations did not get rendered due to their size.
                                                                      Instances For
                                                                        def Array.foldlM.loop {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (f : βαm β) (as : Array α) (stop : Nat) (h : stop as.size) (i : Nat) (j : Nat) (b : β) :
                                                                        m β
                                                                        Equations
                                                                        • One or more equations did not get rendered due to their size.
                                                                        Instances For
                                                                          @[inline]
                                                                          unsafe def Array.foldrMUnsafe {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (f : αβm β) (init : β) (as : Array α) (start : optParam Nat as.size) (stop : optParam Nat 0) :
                                                                          m β

                                                                          See comment at forInUnsafe

                                                                          Instances For
                                                                            @[specialize #[]]
                                                                            unsafe def Array.foldrMUnsafe.fold {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (f : αβm β) (as : Array α) (i : USize) (stop : USize) (b : β) :
                                                                            m β
                                                                            Instances For
                                                                              @[implemented_by Array.foldrMUnsafe]
                                                                              def Array.foldrM {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (f : αβm β) (init : β) (as : Array α) (start : optParam Nat as.size) (stop : optParam Nat 0) :
                                                                              m β

                                                                              Reference implementation for foldrM

                                                                              Equations
                                                                              • One or more equations did not get rendered due to their size.
                                                                              Instances For
                                                                                def Array.foldrM.fold {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (f : αβm β) (as : Array α) (stop : optParam Nat 0) (i : Nat) (h : i as.size) (b : β) :
                                                                                m β
                                                                                Equations
                                                                                Instances For
                                                                                  @[inline]
                                                                                  unsafe def Array.mapMUnsafe {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (f : αm β) (as : Array α) :
                                                                                  m (Array β)

                                                                                  See comment at forInUnsafe

                                                                                  Instances For
                                                                                    @[specialize #[]]
                                                                                    unsafe def Array.mapMUnsafe.map {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (f : αm β) (sz : USize) (i : USize) (r : Array NonScalar) :
                                                                                    Instances For
                                                                                      @[implemented_by Array.mapMUnsafe]
                                                                                      def Array.mapM {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (f : αm β) (as : Array α) :
                                                                                      m (Array β)

                                                                                      Reference implementation for mapM

                                                                                      Equations
                                                                                      Instances For
                                                                                        def Array.mapM.map {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (f : αm β) (as : Array α) (i : Nat) (r : Array β) :
                                                                                        m (Array β)
                                                                                        Equations
                                                                                        Instances For
                                                                                          @[inline]
                                                                                          def Array.mapIdxM {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (as : Array α) (f : Fin as.sizeαm β) :
                                                                                          m (Array β)
                                                                                          Equations
                                                                                          Instances For
                                                                                            @[specialize #[]]
                                                                                            def Array.mapIdxM.map {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (as : Array α) (f : Fin as.sizeαm β) (i : Nat) (j : Nat) (inv : i + j = as.size) (bs : Array β) :
                                                                                            m (Array β)
                                                                                            Equations
                                                                                            Instances For
                                                                                              @[inline]
                                                                                              def Array.findSomeM? {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (as : Array α) (f : αm (Option β)) :
                                                                                              m (Option β)
                                                                                              Equations
                                                                                              • One or more equations did not get rendered due to their size.
                                                                                              Instances For
                                                                                                @[inline]
                                                                                                def Array.findM? {α : Type} {m : TypeType} [Monad m] (as : Array α) (p : αm Bool) :
                                                                                                m (Option α)
                                                                                                Equations
                                                                                                • One or more equations did not get rendered due to their size.
                                                                                                Instances For
                                                                                                  @[inline]
                                                                                                  def Array.findIdxM? {α : Type u} {m : TypeType u_1} [Monad m] (as : Array α) (p : αm Bool) :
                                                                                                  Equations
                                                                                                  • One or more equations did not get rendered due to their size.
                                                                                                  Instances For
                                                                                                    @[inline]
                                                                                                    unsafe def Array.anyMUnsafe {α : Type u} {m : TypeType w} [Monad m] (p : αm Bool) (as : Array α) (start : optParam Nat 0) (stop : optParam Nat as.size) :
                                                                                                    Instances For
                                                                                                      @[specialize #[]]
                                                                                                      unsafe def Array.anyMUnsafe.any {α : Type u} {m : TypeType w} [Monad m] (p : αm Bool) (as : Array α) (i : USize) (stop : USize) :
                                                                                                      Instances For
                                                                                                        @[implemented_by Array.anyMUnsafe]
                                                                                                        def Array.anyM {α : Type u} {m : TypeType w} [Monad m] (p : αm Bool) (as : Array α) (start : optParam Nat 0) (stop : optParam Nat as.size) :
                                                                                                        Equations
                                                                                                        • One or more equations did not get rendered due to their size.
                                                                                                        Instances For
                                                                                                          def Array.anyM.loop {α : Type u} {m : TypeType w} [Monad m] (p : αm Bool) (as : Array α) (stop : Nat) (h : stop as.size) (j : Nat) :
                                                                                                          Equations
                                                                                                          • One or more equations did not get rendered due to their size.
                                                                                                          Instances For
                                                                                                            @[inline]
                                                                                                            def Array.allM {α : Type u} {m : TypeType w} [Monad m] (p : αm Bool) (as : Array α) (start : optParam Nat 0) (stop : optParam Nat as.size) :
                                                                                                            Equations
                                                                                                            Instances For
                                                                                                              @[inline]
                                                                                                              def Array.findSomeRevM? {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (as : Array α) (f : αm (Option β)) :
                                                                                                              m (Option β)
                                                                                                              Equations
                                                                                                              Instances For
                                                                                                                @[specialize #[]]
                                                                                                                def Array.findSomeRevM?.find {α : Type u} {β : Type v} {m : Type v → Type w} [Monad m] (as : Array α) (f : αm (Option β)) (i : Nat) :
                                                                                                                i as.sizem (Option β)
                                                                                                                Equations
                                                                                                                Instances For
                                                                                                                  @[inline]
                                                                                                                  def Array.findRevM? {α : Type} {m : TypeType w} [Monad m] (as : Array α) (p : αm Bool) :
                                                                                                                  m (Option α)
                                                                                                                  Equations
                                                                                                                  • as.findRevM? p = as.findSomeRevM? fun (a : α) => do let __do_liftp a pure (if __do_lift = true then some a else none)
                                                                                                                  Instances For
                                                                                                                    @[inline]
                                                                                                                    def Array.forM {α : Type u} {m : Type v → Type w} [Monad m] (f : αm PUnit) (as : Array α) (start : optParam Nat 0) (stop : optParam Nat as.size) :
                                                                                                                    Equations
                                                                                                                    Instances For
                                                                                                                      @[inline]
                                                                                                                      def Array.forRevM {α : Type u} {m : Type v → Type w} [Monad m] (f : αm PUnit) (as : Array α) (start : optParam Nat as.size) (stop : optParam Nat 0) :
                                                                                                                      Equations
                                                                                                                      Instances For
                                                                                                                        @[inline]
                                                                                                                        def Array.foldl {α : Type u} {β : Type v} (f : βαβ) (init : β) (as : Array α) (start : optParam Nat 0) (stop : optParam Nat as.size) :
                                                                                                                        β
                                                                                                                        Equations
                                                                                                                        Instances For
                                                                                                                          @[inline]
                                                                                                                          def Array.foldr {α : Type u} {β : Type v} (f : αββ) (init : β) (as : Array α) (start : optParam Nat as.size) (stop : optParam Nat 0) :
                                                                                                                          β
                                                                                                                          Equations
                                                                                                                          Instances For
                                                                                                                            @[inline]
                                                                                                                            def Array.map {α : Type u} {β : Type v} (f : αβ) (as : Array α) :
                                                                                                                            Equations
                                                                                                                            Instances For
                                                                                                                              @[inline]
                                                                                                                              def Array.mapIdx {α : Type u} {β : Type v} (as : Array α) (f : Fin as.sizeαβ) :
                                                                                                                              Equations
                                                                                                                              • as.mapIdx f = (as.mapIdxM f).run
                                                                                                                              Instances For
                                                                                                                                def Array.zipWithIndex {α : Type u} (arr : Array α) :
                                                                                                                                Array (α × Nat)

                                                                                                                                Turns #[a, b] into #[(a, 0), (b, 1)].

                                                                                                                                Equations
                                                                                                                                • arr.zipWithIndex = arr.mapIdx fun (i : Fin arr.size) (a : α) => (a, i)
                                                                                                                                Instances For
                                                                                                                                  @[inline]
                                                                                                                                  def Array.find? {α : Type} (as : Array α) (p : αBool) :
                                                                                                                                  Equations
                                                                                                                                  • as.find? p = (as.findM? p).run
                                                                                                                                  Instances For
                                                                                                                                    @[inline]
                                                                                                                                    def Array.findSome? {α : Type u} {β : Type v} (as : Array α) (f : αOption β) :
                                                                                                                                    Equations
                                                                                                                                    • as.findSome? f = (as.findSomeM? f).run
                                                                                                                                    Instances For
                                                                                                                                      @[inline]
                                                                                                                                      def Array.findSome! {α : Type u} {β : Type v} [Inhabited β] (a : Array α) (f : αOption β) :
                                                                                                                                      β
                                                                                                                                      Equations
                                                                                                                                      • a.findSome! f = match a.findSome? f with | some b => b | none => panicWithPosWithDecl "Init.Data.Array.Basic" "Array.findSome!" 537 14 "failed to find element"
                                                                                                                                      Instances For
                                                                                                                                        @[inline]
                                                                                                                                        def Array.findSomeRev? {α : Type u} {β : Type v} (as : Array α) (f : αOption β) :
                                                                                                                                        Equations
                                                                                                                                        • as.findSomeRev? f = (as.findSomeRevM? f).run
                                                                                                                                        Instances For
                                                                                                                                          @[inline]
                                                                                                                                          def Array.findRev? {α : Type} (as : Array α) (p : αBool) :
                                                                                                                                          Equations
                                                                                                                                          • as.findRev? p = (as.findRevM? p).run
                                                                                                                                          Instances For
                                                                                                                                            @[inline]
                                                                                                                                            def Array.findIdx? {α : Type u} (as : Array α) (p : αBool) :
                                                                                                                                            Equations
                                                                                                                                            Instances For
                                                                                                                                              def Array.findIdx?.loop {α : Type u} (as : Array α) (p : αBool) (j : Nat) :
                                                                                                                                              Equations
                                                                                                                                              Instances For
                                                                                                                                                def Array.getIdx? {α : Type u} [BEq α] (a : Array α) (v : α) :
                                                                                                                                                Equations
                                                                                                                                                • a.getIdx? v = a.findIdx? fun (a : α) => a == v
                                                                                                                                                Instances For
                                                                                                                                                  def Array.indexOfAux {α : Type u} [BEq α] (a : Array α) (v : α) (i : Nat) :
                                                                                                                                                  Option (Fin a.size)
                                                                                                                                                  Equations
                                                                                                                                                  • a.indexOfAux v i = if h : i < a.size then let idx := i, h; if (a.get idx == v) = true then some idx else a.indexOfAux v (i + 1) else none
                                                                                                                                                  Instances For
                                                                                                                                                    def Array.indexOf? {α : Type u} [BEq α] (a : Array α) (v : α) :
                                                                                                                                                    Option (Fin a.size)
                                                                                                                                                    Equations
                                                                                                                                                    • a.indexOf? v = a.indexOfAux v 0
                                                                                                                                                    Instances For
                                                                                                                                                      @[inline]
                                                                                                                                                      def Array.any {α : Type u} (as : Array α) (p : αBool) (start : optParam Nat 0) (stop : optParam Nat as.size) :
                                                                                                                                                      Equations
                                                                                                                                                      Instances For
                                                                                                                                                        @[inline]
                                                                                                                                                        def Array.all {α : Type u} (as : Array α) (p : αBool) (start : optParam Nat 0) (stop : optParam Nat as.size) :
                                                                                                                                                        Equations
                                                                                                                                                        Instances For
                                                                                                                                                          def Array.contains {α : Type u} [BEq α] (as : Array α) (a : α) :
                                                                                                                                                          Equations
                                                                                                                                                          • as.contains a = as.any fun (x : α) => x == a
                                                                                                                                                          Instances For
                                                                                                                                                            def Array.elem {α : Type u} [BEq α] (a : α) (as : Array α) :
                                                                                                                                                            Equations
                                                                                                                                                            Instances For
                                                                                                                                                              @[export lean_array_to_list_impl]
                                                                                                                                                              def Array.toListImpl {α : Type u} (as : Array α) :
                                                                                                                                                              List α

                                                                                                                                                              Convert a Array α into an List α. This is O(n) in the size of the array.

                                                                                                                                                              Equations
                                                                                                                                                              Instances For
                                                                                                                                                                @[inline]
                                                                                                                                                                def Array.toListAppend {α : Type u} (as : Array α) (l : List α) :
                                                                                                                                                                List α

                                                                                                                                                                Prepends an Array α onto the front of a list. Equivalent to as.toList ++ l.

                                                                                                                                                                Equations
                                                                                                                                                                Instances For
                                                                                                                                                                  def Array.append {α : Type u} (as : Array α) (bs : Array α) :
                                                                                                                                                                  Equations
                                                                                                                                                                  Instances For
                                                                                                                                                                    instance Array.instAppend {α : Type u} :
                                                                                                                                                                    Equations
                                                                                                                                                                    • Array.instAppend = { append := Array.append }
                                                                                                                                                                    def Array.appendList {α : Type u} (as : Array α) (bs : List α) :
                                                                                                                                                                    Equations
                                                                                                                                                                    Instances For
                                                                                                                                                                      instance Array.instHAppendList {α : Type u} :
                                                                                                                                                                      HAppend (Array α) (List α) (Array α)
                                                                                                                                                                      Equations
                                                                                                                                                                      • Array.instHAppendList = { hAppend := Array.appendList }
                                                                                                                                                                      @[inline]
                                                                                                                                                                      def Array.concatMapM {α : Type u} {m : Type u_1 → Type u_2} {β : Type u_1} [Monad m] (f : αm (Array β)) (as : Array α) :
                                                                                                                                                                      m (Array β)
                                                                                                                                                                      Equations
                                                                                                                                                                      Instances For
                                                                                                                                                                        @[inline]
                                                                                                                                                                        def Array.concatMap {α : Type u} {β : Type u_1} (f : αArray β) (as : Array α) :
                                                                                                                                                                        Equations
                                                                                                                                                                        Instances For
                                                                                                                                                                          @[inline]
                                                                                                                                                                          def Array.flatten {α : Type u} (as : Array (Array α)) :

                                                                                                                                                                          Joins array of array into a single array.

                                                                                                                                                                          flatten #[#[a₁, a₂, ⋯], #[b₁, b₂, ⋯], ⋯] = #[a₁, a₂, ⋯, b₁, b₂, ⋯]

                                                                                                                                                                          Equations
                                                                                                                                                                          Instances For
                                                                                                                                                                            @[inline]
                                                                                                                                                                            def Array.filter {α : Type u} (p : αBool) (as : Array α) (start : optParam Nat 0) (stop : optParam Nat as.size) :
                                                                                                                                                                            Equations
                                                                                                                                                                            Instances For
                                                                                                                                                                              @[inline]
                                                                                                                                                                              def Array.filterM {m : TypeType u_1} {α : Type} [Monad m] (p : αm Bool) (as : Array α) (start : optParam Nat 0) (stop : optParam Nat as.size) :
                                                                                                                                                                              m (Array α)
                                                                                                                                                                              Equations
                                                                                                                                                                              Instances For
                                                                                                                                                                                @[specialize #[]]
                                                                                                                                                                                def Array.filterMapM {α : Type u} {m : Type u_1 → Type u_2} {β : Type u_1} [Monad m] (f : αm (Option β)) (as : Array α) (start : optParam Nat 0) (stop : optParam Nat as.size) :
                                                                                                                                                                                m (Array β)
                                                                                                                                                                                Equations
                                                                                                                                                                                • One or more equations did not get rendered due to their size.
                                                                                                                                                                                Instances For
                                                                                                                                                                                  @[inline]
                                                                                                                                                                                  def Array.filterMap {α : Type u} {β : Type u_1} (f : αOption β) (as : Array α) (start : optParam Nat 0) (stop : optParam Nat as.size) :
                                                                                                                                                                                  Equations
                                                                                                                                                                                  Instances For
                                                                                                                                                                                    @[specialize #[]]
                                                                                                                                                                                    def Array.getMax? {α : Type u} (as : Array α) (lt : ααBool) :
                                                                                                                                                                                    Equations
                                                                                                                                                                                    • as.getMax? lt = if h : 0 < as.size then let a0 := as[0]; some (Array.foldl (fun (best a : α) => if lt best a = true then a else best) a0 as 1) else none
                                                                                                                                                                                    Instances For
                                                                                                                                                                                      @[inline]
                                                                                                                                                                                      def Array.partition {α : Type u} (p : αBool) (as : Array α) :
                                                                                                                                                                                      Array α × Array α
                                                                                                                                                                                      Equations
                                                                                                                                                                                      • One or more equations did not get rendered due to their size.
                                                                                                                                                                                      Instances For
                                                                                                                                                                                        def Array.reverse {α : Type u} (as : Array α) :
                                                                                                                                                                                        Equations
                                                                                                                                                                                        Instances For
                                                                                                                                                                                          theorem Array.reverse.termination {i : Nat} {j : Nat} (h : i < j) :
                                                                                                                                                                                          j - 1 - (i + 1) < j - i
                                                                                                                                                                                          @[irreducible]
                                                                                                                                                                                          def Array.reverse.loop {α : Type u} (as : Array α) (i : Nat) (j : Fin as.size) :
                                                                                                                                                                                          Equations
                                                                                                                                                                                          Instances For
                                                                                                                                                                                            def Array.popWhile {α : Type u} (p : αBool) (as : Array α) :
                                                                                                                                                                                            Equations
                                                                                                                                                                                            Instances For
                                                                                                                                                                                              def Array.takeWhile {α : Type u} (p : αBool) (as : Array α) :
                                                                                                                                                                                              Equations
                                                                                                                                                                                              Instances For
                                                                                                                                                                                                def Array.takeWhile.go {α : Type u} (p : αBool) (as : Array α) (i : Nat) (r : Array α) :
                                                                                                                                                                                                Equations
                                                                                                                                                                                                Instances For
                                                                                                                                                                                                  def Array.feraseIdx {α : Type u} (a : Array α) (i : Fin a.size) :

                                                                                                                                                                                                  Remove the element at a given index from an array without bounds checks, using a Fin index.

                                                                                                                                                                                                  This function takes worst case O(n) time because it has to backshift all elements at positions greater than i.

                                                                                                                                                                                                  Equations
                                                                                                                                                                                                  • a.feraseIdx i = if h : i + 1 < a.size then let a' := a.swap i + 1, h i; let i' := i + 1, ; a'.feraseIdx i' else a.pop
                                                                                                                                                                                                  Instances For
                                                                                                                                                                                                    @[simp]
                                                                                                                                                                                                    theorem Array.size_feraseIdx {α : Type u} (a : Array α) (i : Fin a.size) :
                                                                                                                                                                                                    (a.feraseIdx i).size = a.size - 1
                                                                                                                                                                                                    def Array.eraseIdx {α : Type u} (a : Array α) (i : Nat) :

                                                                                                                                                                                                    Remove the element at a given index from an array, or do nothing if the index is out of bounds.

                                                                                                                                                                                                    This function takes worst case O(n) time because it has to backshift all elements at positions greater than i.

                                                                                                                                                                                                    Equations
                                                                                                                                                                                                    • a.eraseIdx i = if h : i < a.size then a.feraseIdx i, h else a
                                                                                                                                                                                                    Instances For
                                                                                                                                                                                                      def Array.erase {α : Type u} [BEq α] (as : Array α) (a : α) :
                                                                                                                                                                                                      Equations
                                                                                                                                                                                                      • as.erase a = match as.indexOf? a with | none => as | some i => as.feraseIdx i
                                                                                                                                                                                                      Instances For
                                                                                                                                                                                                        @[inline]
                                                                                                                                                                                                        def Array.insertAt {α : Type u} (as : Array α) (i : Fin (as.size + 1)) (a : α) :

                                                                                                                                                                                                        Insert element a at position i.

                                                                                                                                                                                                        Equations
                                                                                                                                                                                                        Instances For
                                                                                                                                                                                                          def Array.insertAt.loop {α : Type u} (as : Array α) (i : Fin (as✝.size + 1)) (as : Array α) (j : Fin as.size) :
                                                                                                                                                                                                          Equations
                                                                                                                                                                                                          Instances For
                                                                                                                                                                                                            def Array.insertAt! {α : Type u} (as : Array α) (i : Nat) (a : α) :

                                                                                                                                                                                                            Insert element a at position i. Panics if i is not i ≤ as.size.

                                                                                                                                                                                                            Equations
                                                                                                                                                                                                            • as.insertAt! i a = if h : i as.size then as.insertAt i, a else panicWithPosWithDecl "Init.Data.Array.Basic" "Array.insertAt!" 763 7 "invalid index"
                                                                                                                                                                                                            Instances For
                                                                                                                                                                                                              def Array.isPrefixOfAux {α : Type u} [BEq α] (as : Array α) (bs : Array α) (hle : as.size bs.size) (i : Nat) :
                                                                                                                                                                                                              Equations
                                                                                                                                                                                                              • as.isPrefixOfAux bs hle i = if h : i < as.size then let a := as[i]; let_fun this := ; let b := bs[i]; if (a == b) = true then as.isPrefixOfAux bs hle (i + 1) else false else true
                                                                                                                                                                                                              Instances For
                                                                                                                                                                                                                def Array.isPrefixOf {α : Type u} [BEq α] (as : Array α) (bs : Array α) :

                                                                                                                                                                                                                Return true iff as is a prefix of bs. That is, bs = as ++ t for some t : List α.

                                                                                                                                                                                                                Equations
                                                                                                                                                                                                                • as.isPrefixOf bs = if h : as.size bs.size then as.isPrefixOfAux bs h 0 else false
                                                                                                                                                                                                                Instances For
                                                                                                                                                                                                                  @[specialize #[]]
                                                                                                                                                                                                                  def Array.zipWithAux {α : Type u} {β : Type u_1} {γ : Type u_2} (f : αβγ) (as : Array α) (bs : Array β) (i : Nat) (cs : Array γ) :
                                                                                                                                                                                                                  Equations
                                                                                                                                                                                                                  • One or more equations did not get rendered due to their size.
                                                                                                                                                                                                                  Instances For
                                                                                                                                                                                                                    @[inline]
                                                                                                                                                                                                                    def Array.zipWith {α : Type u} {β : Type u_1} {γ : Type u_2} (as : Array α) (bs : Array β) (f : αβγ) :
                                                                                                                                                                                                                    Equations
                                                                                                                                                                                                                    Instances For
                                                                                                                                                                                                                      def Array.zip {α : Type u} {β : Type u_1} (as : Array α) (bs : Array β) :
                                                                                                                                                                                                                      Array (α × β)
                                                                                                                                                                                                                      Equations
                                                                                                                                                                                                                      • as.zip bs = as.zipWith bs Prod.mk
                                                                                                                                                                                                                      Instances For
                                                                                                                                                                                                                        def Array.unzip {α : Type u} {β : Type u_1} (as : Array (α × β)) :
                                                                                                                                                                                                                        Array α × Array β
                                                                                                                                                                                                                        Equations
                                                                                                                                                                                                                        • as.unzip = Array.foldl (fun (x : Array α × Array β) (x_1 : α × β) => match x with | (as, bs) => match x_1 with | (a, b) => (as.push a, bs.push b)) (#[], #[]) as
                                                                                                                                                                                                                        Instances For
                                                                                                                                                                                                                          def Array.split {α : Type u} (as : Array α) (p : αBool) :
                                                                                                                                                                                                                          Array α × Array α
                                                                                                                                                                                                                          Equations
                                                                                                                                                                                                                          • as.split p = Array.foldl (fun (x : Array α × Array α) (a : α) => match x with | (as, bs) => if p a = true then (as.push a, bs) else (as, bs.push a)) (#[], #[]) as
                                                                                                                                                                                                                          Instances For

                                                                                                                                                                                                                            Auxiliary functions used in metaprogramming. #

                                                                                                                                                                                                                            We do not intend to provide verification theorems for these functions.

                                                                                                                                                                                                                            eraseReps #

                                                                                                                                                                                                                            def Array.eraseReps {α : Type u_1} [BEq α] (as : Array α) :

                                                                                                                                                                                                                            O(|l|). Erase repeated adjacent elements. Keeps the first occurrence of each run.

                                                                                                                                                                                                                            • eraseReps #[1, 3, 2, 2, 2, 3, 5] = #[1, 3, 2, 3, 5]
                                                                                                                                                                                                                            Equations
                                                                                                                                                                                                                            • One or more equations did not get rendered due to their size.
                                                                                                                                                                                                                            Instances For

                                                                                                                                                                                                                              allDiff #

                                                                                                                                                                                                                              def Array.allDiff {α : Type u} [BEq α] (as : Array α) :
                                                                                                                                                                                                                              Equations
                                                                                                                                                                                                                              Instances For

                                                                                                                                                                                                                                getEvenElems #

                                                                                                                                                                                                                                @[inline]
                                                                                                                                                                                                                                def Array.getEvenElems {α : Type u} (as : Array α) :
                                                                                                                                                                                                                                Equations
                                                                                                                                                                                                                                • One or more equations did not get rendered due to their size.
                                                                                                                                                                                                                                Instances For

                                                                                                                                                                                                                                  Repr and ToString #

                                                                                                                                                                                                                                  instance Array.instRepr {α : Type u} [Repr α] :
                                                                                                                                                                                                                                  Repr (Array α)
                                                                                                                                                                                                                                  Equations
                                                                                                                                                                                                                                  • One or more equations did not get rendered due to their size.
                                                                                                                                                                                                                                  instance Array.instToString {α : Type u} [ToString α] :
                                                                                                                                                                                                                                  Equations
                                                                                                                                                                                                                                  • Array.instToString = { toString := fun (a : Array α) => "#" ++ toString a.toList }