Documentation

FraudProof.DataStructures.Sequence

@[reducible, inline]
abbrev Sequence (n : ) (α : Type) :
Equations
Instances For
    def sequence_lift {α : Type} (t : List α) :
    Equations
    Instances For
      instance seq_b {α : Type} {n : } [BEq α] :
      BEq (Sequence n α)
      Equations
      def Sequence.nil {γ : Type} :
      Equations
      Instances For
        theorem nil_equiv {α : Type} {t : Sequence 0 α} :
        def Sequence.single {α : Type} (a : α) :
        Equations
        Instances For
          def Sequence.cons {α : Type} {n : } (a : α) :
          Sequence n αSequence n.succ α
          Equations
          Instances For
            theorem not_nil_len {α : Type} (ls : List α) (len_nz : 0 < ls.length) :
            ¬ls = []
            theorem seq_is_len {α : Type} {n : } (s : Sequence n α) :
            (↑s).length = n
            def Sequence.head {α : Type} {n : } (seq : Sequence n.succ α) :
            α
            Equations
            Instances For
              def Sequence.head' {α : Type} {n : } (seq : Sequence n α) (notZ : 0 < n) :
              α
              Equations
              Instances For
                def Sequence.tail {α : Type} {n : } (seq : Sequence n.succ α) :
                Equations
                Instances For
                  theorem Sequence.lmm_destruct {α : Type} {n : } (s : Sequence n.succ α) :
                  s = cons s.head s.tail
                  def Sequence.pmatch {α : Type} {n : } (s : Sequence n α) :
                  Sequence 0 α α × Sequence n.pred α
                  Equations
                  Instances For
                    def Sequence.destruct {α : Type} {n : } (s : Sequence n.succ α) :
                    α × Sequence n α
                    Equations
                    Instances For
                      def Sequence.foldr {α β : Type} {n : } (f : αββ) (b : β) (sq : Sequence n α) :
                      β
                      Equations
                      Instances For
                        def Sequence.foldl {α β : Type} {n : } (f : βαβ) (b : β) (sq : Sequence n α) :
                        β
                        Equations
                        Instances For
                          def Sequence.tail_pred {α : Type} {n : } (s : Sequence n α) :
                          Equations
                          Instances For
                            def Sequence.init {α : Type} {n : } (seq : Sequence n.succ α) :
                            Equations
                            Instances For
                              def sequence_coerce {α : Type} {n m : } (hEq : n = m) (s : Sequence n α) :
                              Equations
                              Instances For
                                theorem rfl_coerce {α : Type} (l r : List α) :
                                l = r∀ (n m : ) (lp : l.length = m) (rp : r.length = n) (heq : n = m), l, lp = sequence_coerce heq r, rp
                                theorem cons_seq_coerce {α : Type} {n m : } {heq : n = m} (a : α) (seq : Sequence n α) :
                                theorem same_length {α : Type} {n m : } (l : Sequence n α) (r : Sequence m α) :
                                l = rn = m
                                def beq_sequences {α : Type} [BEq α] {n : } :
                                BEq (Sequence n α)
                                Equations
                                Instances For
                                  def beq_sequences_poly {α : Type} [BEq α] {n m : } (l : Sequence n α) (r : Sequence m α) :
                                  Equations
                                  Instances For
                                    def Sequence.last {α : Type} {n : } (seq : Sequence n.succ α) :
                                    α
                                    Equations
                                    Instances For
                                      def lastSeq' {α : Type} {n m : } (seq : Sequence n α) (ns : n = m + 1) :
                                      α
                                      Equations
                                      Instances For
                                        theorem constant_succ {α : Type} {n : } {a : α} :
                                        def polyLenSeqEq {α : Type} [BEq α] {n m : } (p : Sequence n α) (q : Sequence m α) :
                                        Equations
                                        Instances For
                                          theorem seqEqLawLength {α : Type} [BEq α] {m n : } (p : Sequence n α) (q : Sequence m α) (pEq : polyLenSeqEq p q = true) :
                                          n = m
                                          theorem seqEqLawRfl {α : Type} [BEq α] [LawfulBEq α] {n : } (p : Sequence n α) :
                                          def zip_succ_int {α : Type} {n : } (h : α) (seq : Sequence n.succ α) :
                                          Sequence n.succ (α × α)
                                          Equations
                                          Instances For
                                            def zip_succ {α : Type} {n : } (seq : Sequence n.succ.succ α) :
                                            Sequence n.succ (α × α)
                                            Equations
                                            Instances For
                                              def Sequence.append {α : Type} {n m : } (p : Sequence n α) (q : Sequence m α) :
                                              Sequence (n + m) α
                                              Equations
                                              Instances For
                                                def Sequence.snoc {α : Type} {n : } (seq : Sequence n α) (a : α) :
                                                Equations
                                                Instances For
                                                  def Sequence.getI {α : Type} {n : } (seq : Sequence n α) (i : ) (iLTn : i < n) :
                                                  α
                                                  Equations
                                                  Instances For
                                                    def desc_Seq {n : } {α : Type} (seq : Sequence n.succ α) :
                                                    α × Sequence n α
                                                    Equations
                                                    Instances For
                                                      def Sequence.map {α β : Type} {n : } (f : αβ) (seq : Sequence n α) :
                                                      Equations
                                                      Instances For
                                                        theorem map_tail {α β : Type} {n : } (f : αβ) (seq : Sequence n.succ α) :
                                                        def Sequence.zip_with {α β ε : Type} {n : } (f : αβε) (sl : Sequence n α) (sr : Sequence n β) :
                                                        Equations
                                                        Instances For
                                                          def Sequence.nats' {n : } (start : ) :
                                                          Equations
                                                          Instances For
                                                            Equations
                                                            Instances For
                                                              def Sequence.imap {α β : Type} {n : } (f : αβ) (seq : Sequence n α) :
                                                              Equations
                                                              Instances For
                                                                def Sequence.reverse {α : Type} {n : } (seq : Sequence n α) :
                                                                Equations
                                                                Instances For
                                                                  def Sequence.take {α : Type} {n : } (m : ) (mLTn : m n) (s : Sequence n α) :
                                                                  Equations
                                                                  Instances For
                                                                    def Sequence.drop {α : Type} {n : } (m : ) (s : Sequence n α) :
                                                                    Sequence (n - m) α
                                                                    Equations
                                                                    Instances For
                                                                      def Sequence.split {α : Type} {n : } (p : Sequence n α) (m : ) (mLTn : m n) :
                                                                      Sequence m α × Sequence (n - m) α
                                                                      Equations
                                                                      Instances For
                                                                        def Sequence.join {α : Type} {n : } (f : ααα) (seq : Sequence (2 * n) α) :
                                                                        Equations
                                                                        Instances For
                                                                          theorem pp2 {n : } :
                                                                          2 ^ n.succ = 2 ^ n + 2 ^ n
                                                                          theorem gt0Add (m n : ) (hm : 0 < m) (hn : 0 n) :
                                                                          0 < m + n
                                                                          theorem geq0Add (m n : ) (hm : 0 m) (hn : 0 n) :
                                                                          0 m + n
                                                                          theorem pow_gt_zero {m : } :
                                                                          0 < 2 ^ m
                                                                          theorem pow_geq_one {m : } :
                                                                          1 2 ^ m
                                                                          theorem ppGT {n : } :
                                                                          0 < 2 ^ n + 2 ^ n + (2 ^ n + 2 ^ n) - 1 - (2 ^ n + 2 ^ n - 1)
                                                                          theorem eqPP {n : } :
                                                                          2 ^ (n + 1) + 2 ^ (n + 1) - 1 - (2 ^ (n + 1) - 1) = 2 ^ (n + 1) - 1 + 1
                                                                          def half_split {α : Type} {n : } (seq : Sequence (2 * n) α) :
                                                                          Sequence n α × Sequence n α
                                                                          Equations
                                                                          Instances For
                                                                            def half_split_pow {α : Type} {n : } (seq : Sequence (2 ^ n.succ) α) :
                                                                            Sequence (2 ^ n) α × Sequence (2 ^ n) α
                                                                            Equations
                                                                            Instances For
                                                                              def Sequence.consume_pow {α : Type} {lgn : } (f : ααα) (seq : Sequence (2 ^ lgn) α) :
                                                                              α
                                                                              Equations
                                                                              Instances For
                                                                                def Sequence.perfect_split {α : Type} {n : } (seq : Sequence (2 ^ n.succ - 1) α) :
                                                                                Sequence (2 ^ n - 1) α × α × Sequence (2 ^ n - 1) α
                                                                                Equations
                                                                                Instances For
                                                                                  def sequence_forget {α : Type} {n : } (seq : Sequence n α) :
                                                                                  List α
                                                                                  Equations
                                                                                  Instances For
                                                                                    theorem split_seq_eq {α : Type} {n m : } {mLTn : m n} (seq : Sequence n α) :
                                                                                    match seq.split m mLTn with | (seql, seqr) => seq = sequence_coerce (seql.append seqr)
                                                                                    theorem ExtraCoerce {α : Type} {n : } (req : n = n) (seq : Sequence n α) :
                                                                                    seq = sequence_coerce req seq
                                                                                    theorem coerce_trans {α : Type} {n m l : } {fst : n = m} {snd : m = l} (seq : Sequence n α) :
                                                                                    theorem coerce_eq_comm {α : Type} {n m : } {heq : n = m} (seql : Sequence n α) (seqr : Sequence m α) :
                                                                                    sequence_coerce heq seql = seqrseql = sequence_coerce seqr
                                                                                    theorem coerce_eq_comm' {α : Type} {n m : } {heq : m = n} (seql : Sequence n α) (seqr : Sequence m α) :
                                                                                    seql = sequence_coerce heq seqrsequence_coerce seql = seqr
                                                                                    theorem coerce_eq_coerce {α : Type} {n m l : } {reql : n = l} {reqr : m = l} (seql : Sequence n α) (seqr : Sequence m α) :
                                                                                    sequence_coerce reql seql = sequence_coerce reqr seqrsequence_coerce seql = seqr
                                                                                    theorem rfl_coerce_up {α : Type} {n m : } {meq : n = m} (ls : List α) {lp : ls.length = n} :
                                                                                    ls = (sequence_coerce meq ls, lp)
                                                                                    theorem TailCoerDrop {α : Type} {n m : } (d : ) {heq : n - d = m + 1} (seq : Sequence n α) :
                                                                                    theorem TakeCoerce {α : Type} {n m k : } {kLT : k n} (heq : k = m) (seq : Sequence n α) :
                                                                                    sequence_coerce heq (Sequence.take k kLT seq) = Sequence.take m seq