Documentation

Init.Grind.AC

@[reducible, inline]
Equations
    Instances For
      structure Lean.Grind.AC.Context (α : Sort u) :
      Instances For
        Instances For
          Equations
            Instances For
              Equations
                Instances For
                  @[reducible, inline]
                  noncomputable abbrev Lean.Grind.AC.Var.denote {α : Sort u} (ctx : Context α) (x : Var) :
                  α
                  Equations
                    Instances For
                      @[reducible, inline]
                      noncomputable abbrev Lean.Grind.AC.Expr.denote {α : Sort u_1} (ctx : Context α) (e : Expr) :
                      α
                      Equations
                        Instances For
                          theorem Lean.Grind.AC.Expr.denote_var {α : Sort u_1} (ctx : Context α) (x : Var) :
                          denote ctx (var x) = Var.denote ctx x
                          theorem Lean.Grind.AC.Expr.denote_op {α : Sort u_1} (ctx : Context α) (a b : Expr) :
                          denote ctx (a.op b) = ctx.op (denote ctx a) (denote ctx b)
                          Instances For
                            Equations
                              Instances For
                                Equations
                                  Instances For
                                    noncomputable def Lean.Grind.AC.Seq.beq' (s₁ : Seq) :
                                    SeqBool
                                    Equations
                                      Instances For
                                        theorem Lean.Grind.AC.Seq.beq'_eq (s₁ s₂ : Seq) :
                                        (s₁.beq' s₂ = true) = (s₁ = s₂)
                                        @[inline]
                                        noncomputable abbrev Lean.Grind.AC.Seq.denote {α : Sort u_1} (ctx : Context α) (s : Seq) :
                                        α
                                        Equations
                                          Instances For
                                            theorem Lean.Grind.AC.Seq.denote_var {α : Sort u_1} (ctx : Context α) (x : Var) :
                                            denote ctx (var x) = Var.denote ctx x
                                            theorem Lean.Grind.AC.Seq.denote_op {α : Sort u_1} (ctx : Context α) (x : Var) (s : Seq) :
                                            denote ctx (cons x s) = ctx.op (Var.denote ctx x) (denote ctx s)
                                            Equations
                                              Instances For
                                                noncomputable def Lean.Grind.AC.Expr.toSeq'_k (e : Expr) :
                                                SeqSeq
                                                Equations
                                                  Instances For
                                                    Equations
                                                      Instances For
                                                        noncomputable def Lean.Grind.AC.Expr.toSeq_k (e : Expr) :
                                                        Equations
                                                          Instances For
                                                            theorem Lean.Grind.AC.Expr.denote_toSeq' {α : Sort u_1} (ctx : Context α) :
                                                            ∀ {x : Std.Associative ctx.op} (e : Expr) (s : Seq), Seq.denote ctx (e.toSeq' s) = ctx.op (denote ctx e) (Seq.denote ctx s)
                                                            theorem Lean.Grind.AC.Expr.denote_toSeq {α : Sort u_1} (ctx : Context α) :
                                                            ∀ {x : Std.Associative ctx.op} (e : Expr), Seq.denote ctx e.toSeq = denote ctx e
                                                            Equations
                                                              Instances For
                                                                noncomputable def Lean.Grind.AC.Seq.erase0_k (s : Seq) :
                                                                Equations
                                                                  Instances For
                                                                    theorem Lean.Grind.AC.Seq.denote_erase0 {α : Sort u_1} (ctx : Context α) {inst : Std.LawfulIdentity ctx.op (Var.denote ctx 0)} (s : Seq) :
                                                                    denote ctx s.erase0 = denote ctx s
                                                                    Equations
                                                                      Instances For
                                                                        noncomputable def Lean.Grind.AC.Seq.insert_k (x : Var) (s : Seq) :
                                                                        Equations
                                                                          Instances For
                                                                            theorem Lean.Grind.AC.Seq.denote_insert {α : Sort u_1} (ctx : Context α) {inst₁ : Std.Associative ctx.op} {inst₂ : Std.Commutative ctx.op} (x : Var) (s : Seq) :
                                                                            denote ctx (insert x s) = ctx.op (Var.denote ctx x) (denote ctx s)
                                                                            Equations
                                                                              Instances For
                                                                                noncomputable def Lean.Grind.AC.Seq.sort'_k (s : Seq) :
                                                                                SeqSeq
                                                                                Equations
                                                                                  Instances For
                                                                                    theorem Lean.Grind.AC.Seq.denote_sort' {α : Sort u_1} (ctx : Context α) {inst₁ : Std.Associative ctx.op} {inst₂ : Std.Commutative ctx.op} (s acc : Seq) :
                                                                                    denote ctx (s.sort' acc) = ctx.op (denote ctx s) (denote ctx acc)
                                                                                    Equations
                                                                                      Instances For
                                                                                        noncomputable def Lean.Grind.AC.Seq.sort_k (s : Seq) :
                                                                                        Equations
                                                                                          Instances For
                                                                                            theorem Lean.Grind.AC.Seq.denote_sort {α : Sort u_1} (ctx : Context α) {inst₁ : Std.Associative ctx.op} {inst₂ : Std.Commutative ctx.op} (s : Seq) :
                                                                                            denote ctx s.sort = denote ctx s
                                                                                            Equations
                                                                                              Instances For
                                                                                                noncomputable def Lean.Grind.AC.Seq.eraseDup_k (s : Seq) :
                                                                                                Equations
                                                                                                  Instances For
                                                                                                    theorem Lean.Grind.AC.Seq.eraseDup_k_cons (x : Var) (s : Seq) :
                                                                                                    (cons x s).eraseDup_k = rec (fun (y : Var) => Bool.rec (cons x (var y)) (var x) (Nat.beq x y)) (fun (y : Var) (s' x_1 : Seq) => Bool.rec (cons x (cons y s')) (cons y s') (Nat.beq x y)) s.eraseDup_k
                                                                                                    theorem Lean.Grind.AC.Seq.denote_eraseDup {α : Sort u_1} (ctx : Context α) {inst₁ : Std.Associative ctx.op} {inst₂ : Std.IdempotentOp ctx.op} (s : Seq) :
                                                                                                    denote ctx s.eraseDup = denote ctx s
                                                                                                    def Lean.Grind.AC.Seq.concat (s₁ s₂ : Seq) :
                                                                                                    Equations
                                                                                                      Instances For
                                                                                                        noncomputable def Lean.Grind.AC.Seq.concat_k (s₁ : Seq) :
                                                                                                        SeqSeq
                                                                                                        Equations
                                                                                                          Instances For
                                                                                                            theorem Lean.Grind.AC.Seq.concat_k_eq_concat (s₁ s₂ : Seq) :
                                                                                                            s₁.concat_k s₂ = s₁.concat s₂
                                                                                                            theorem Lean.Grind.AC.Seq.denote_concat {α : Sort u_1} (ctx : Context α) {inst₁ : Std.Associative ctx.op} (s₁ s₂ : Seq) :
                                                                                                            denote ctx (s₁.concat s₂) = ctx.op (denote ctx s₁) (denote ctx s₂)
                                                                                                            theorem Lean.Grind.AC.eq_orient {α : Sort u_1} (ctx : Context α) (lhs rhs : Seq) :
                                                                                                            Seq.denote ctx lhs = Seq.denote ctx rhsSeq.denote ctx rhs = Seq.denote ctx lhs
                                                                                                            theorem Lean.Grind.AC.eq_simp_lhs_exact {α : Sort u_1} (ctx : Context α) (lhs₁ rhs₁ rhs₂ : Seq) :
                                                                                                            Seq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₁ = Seq.denote ctx rhs₂Seq.denote ctx rhs₁ = Seq.denote ctx rhs₂
                                                                                                            theorem Lean.Grind.AC.eq_simp_rhs_exact {α : Sort u_1} (ctx : Context α) (lhs₁ rhs₁ lhs₂ : Seq) :
                                                                                                            Seq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ = Seq.denote ctx lhs₁Seq.denote ctx lhs₂ = Seq.denote ctx rhs₁
                                                                                                            theorem Lean.Grind.AC.diseq_simp_lhs_exact {α : Sort u_1} (ctx : Context α) (lhs₁ rhs₁ rhs₂ : Seq) :
                                                                                                            Seq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₁ Seq.denote ctx rhs₂Seq.denote ctx rhs₁ Seq.denote ctx rhs₂
                                                                                                            theorem Lean.Grind.AC.diseq_simp_rhs_exact {α : Sort u_1} (ctx : Context α) (lhs₁ rhs₁ lhs₂ : Seq) :
                                                                                                            Seq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ Seq.denote ctx lhs₁Seq.denote ctx lhs₂ Seq.denote ctx rhs₁
                                                                                                            noncomputable def Lean.Grind.AC.simp_prefix_cert (lhs rhs tail s s' : Seq) :
                                                                                                            Equations
                                                                                                              Instances For
                                                                                                                theorem Lean.Grind.AC.eq_simp_lhs_prefix {α : Sort u_1} (ctx : Context α) :
                                                                                                                ∀ {x : Std.Associative ctx.op} (lhs₁ rhs₁ tail lhs₂ rhs₂ lhs₂' : Seq), simp_prefix_cert lhs₁ rhs₁ tail lhs₂ lhs₂' = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ = Seq.denote ctx rhs₂Seq.denote ctx lhs₂' = Seq.denote ctx rhs₂
                                                                                                                theorem Lean.Grind.AC.eq_simp_rhs_prefix {α : Sort u_1} (ctx : Context α) :
                                                                                                                ∀ {x : Std.Associative ctx.op} (lhs₁ rhs₁ tail lhs₂ rhs₂ rhs₂' : Seq), simp_prefix_cert lhs₁ rhs₁ tail rhs₂ rhs₂' = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ = Seq.denote ctx rhs₂Seq.denote ctx lhs₂ = Seq.denote ctx rhs₂'
                                                                                                                theorem Lean.Grind.AC.diseq_simp_lhs_prefix {α : Sort u_1} (ctx : Context α) :
                                                                                                                ∀ {x : Std.Associative ctx.op} (lhs₁ rhs₁ tail lhs₂ rhs₂ lhs₂' : Seq), simp_prefix_cert lhs₁ rhs₁ tail lhs₂ lhs₂' = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ Seq.denote ctx rhs₂Seq.denote ctx lhs₂' Seq.denote ctx rhs₂
                                                                                                                theorem Lean.Grind.AC.diseq_simp_rhs_prefix {α : Sort u_1} (ctx : Context α) :
                                                                                                                ∀ {x : Std.Associative ctx.op} (lhs₁ rhs₁ tail lhs₂ rhs₂ rhs₂' : Seq), simp_prefix_cert lhs₁ rhs₁ tail rhs₂ rhs₂' = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ Seq.denote ctx rhs₂Seq.denote ctx lhs₂ Seq.denote ctx rhs₂'
                                                                                                                noncomputable def Lean.Grind.AC.simp_suffix_cert (lhs rhs head s s' : Seq) :
                                                                                                                Equations
                                                                                                                  Instances For
                                                                                                                    theorem Lean.Grind.AC.eq_simp_lhs_suffix {α : Sort u_1} (ctx : Context α) :
                                                                                                                    ∀ {x : Std.Associative ctx.op} (lhs₁ rhs₁ head lhs₂ rhs₂ lhs₂' : Seq), simp_suffix_cert lhs₁ rhs₁ head lhs₂ lhs₂' = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ = Seq.denote ctx rhs₂Seq.denote ctx lhs₂' = Seq.denote ctx rhs₂
                                                                                                                    theorem Lean.Grind.AC.eq_simp_rhs_suffix {α : Sort u_1} (ctx : Context α) :
                                                                                                                    ∀ {x : Std.Associative ctx.op} (lhs₁ rhs₁ head lhs₂ rhs₂ rhs₂' : Seq), simp_suffix_cert lhs₁ rhs₁ head rhs₂ rhs₂' = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ = Seq.denote ctx rhs₂Seq.denote ctx lhs₂ = Seq.denote ctx rhs₂'
                                                                                                                    theorem Lean.Grind.AC.diseq_simp_lhs_suffix {α : Sort u_1} (ctx : Context α) :
                                                                                                                    ∀ {x : Std.Associative ctx.op} (lhs₁ rhs₁ head lhs₂ rhs₂ lhs₂' : Seq), simp_suffix_cert lhs₁ rhs₁ head lhs₂ lhs₂' = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ Seq.denote ctx rhs₂Seq.denote ctx lhs₂' Seq.denote ctx rhs₂
                                                                                                                    theorem Lean.Grind.AC.diseq_simp_rhs_suffix {α : Sort u_1} (ctx : Context α) :
                                                                                                                    ∀ {x : Std.Associative ctx.op} (lhs₁ rhs₁ head lhs₂ rhs₂ rhs₂' : Seq), simp_suffix_cert lhs₁ rhs₁ head rhs₂ rhs₂' = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ Seq.denote ctx rhs₂Seq.denote ctx lhs₂ Seq.denote ctx rhs₂'
                                                                                                                    noncomputable def Lean.Grind.AC.simp_middle_cert (lhs rhs head tail s s' : Seq) :
                                                                                                                    Equations
                                                                                                                      Instances For
                                                                                                                        theorem Lean.Grind.AC.eq_simp_lhs_middle {α : Sort u_1} (ctx : Context α) :
                                                                                                                        ∀ {x : Std.Associative ctx.op} (lhs₁ rhs₁ head tail lhs₂ rhs₂ lhs₂' : Seq), simp_middle_cert lhs₁ rhs₁ head tail lhs₂ lhs₂' = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ = Seq.denote ctx rhs₂Seq.denote ctx lhs₂' = Seq.denote ctx rhs₂
                                                                                                                        theorem Lean.Grind.AC.eq_simp_rhs_middle {α : Sort u_1} (ctx : Context α) :
                                                                                                                        ∀ {x : Std.Associative ctx.op} (lhs₁ rhs₁ head tail lhs₂ rhs₂ rhs₂' : Seq), simp_middle_cert lhs₁ rhs₁ head tail rhs₂ rhs₂' = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ = Seq.denote ctx rhs₂Seq.denote ctx lhs₂ = Seq.denote ctx rhs₂'
                                                                                                                        theorem Lean.Grind.AC.diseq_simp_lhs_middle {α : Sort u_1} (ctx : Context α) :
                                                                                                                        ∀ {x : Std.Associative ctx.op} (lhs₁ rhs₁ head tail lhs₂ rhs₂ lhs₂' : Seq), simp_middle_cert lhs₁ rhs₁ head tail lhs₂ lhs₂' = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ Seq.denote ctx rhs₂Seq.denote ctx lhs₂' Seq.denote ctx rhs₂
                                                                                                                        theorem Lean.Grind.AC.diseq_simp_rhs_middle {α : Sort u_1} (ctx : Context α) :
                                                                                                                        ∀ {x : Std.Associative ctx.op} (lhs₁ rhs₁ head tail lhs₂ rhs₂ rhs₂' : Seq), simp_middle_cert lhs₁ rhs₁ head tail rhs₂ rhs₂' = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ Seq.denote ctx rhs₂Seq.denote ctx lhs₂ Seq.denote ctx rhs₂'
                                                                                                                        noncomputable def Lean.Grind.AC.superpose_cert (p c s lhs₁ rhs₁ lhs₂ rhs₂ lhs rhs : Seq) :
                                                                                                                        Equations
                                                                                                                          Instances For
                                                                                                                            theorem Lean.Grind.AC.superpose {α : Sort u_1} (ctx : Context α) {inst₁ : Std.Associative ctx.op} (p c s lhs₁ rhs₁ lhs₂ rhs₂ lhs rhs : Seq) :
                                                                                                                            superpose_cert p c s lhs₁ rhs₁ lhs₂ rhs₂ lhs rhs = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ = Seq.denote ctx rhs₂Seq.denote ctx lhs = Seq.denote ctx rhs

                                                                                                                            Given lhs₁ = rhs₁ and lhs₂ = rhs₂ where lhs₁ := p * c and lhs₂ := c * s, lhs = rhs where lhs := rhs₁ * s and rhs := p * rhs₂

                                                                                                                            def Lean.Grind.AC.Seq.unionFuel (fuel : Nat) (s₁ s₂ : Seq) :
                                                                                                                            Equations
                                                                                                                              Instances For
                                                                                                                                noncomputable def Lean.Grind.AC.Seq.unionFuel_k (fuel : Nat) :
                                                                                                                                SeqSeqSeq
                                                                                                                                Equations
                                                                                                                                  Instances For
                                                                                                                                    theorem Lean.Grind.AC.Seq.unionFuel_k_eq_unionFuel (fuel : Nat) (s₁ s₂ : Seq) :
                                                                                                                                    unionFuel_k fuel s₁ s₂ = unionFuel fuel s₁ s₂
                                                                                                                                    theorem Lean.Grind.AC.Seq.denote_unionFuel {α : Sort u_1} (ctx : Context α) {inst₁ : Std.Associative ctx.op} {inst₂ : Std.Commutative ctx.op} (fuel : Nat) (s₁ s₂ : Seq) :
                                                                                                                                    denote ctx (unionFuel fuel s₁ s₂) = ctx.op (denote ctx s₁) (denote ctx s₂)
                                                                                                                                    Equations
                                                                                                                                      Instances For
                                                                                                                                        def Lean.Grind.AC.Seq.union (s₁ s₂ : Seq) :
                                                                                                                                        Equations
                                                                                                                                          Instances For
                                                                                                                                            noncomputable def Lean.Grind.AC.Seq.union_k (s₁ s₂ : Seq) :
                                                                                                                                            Equations
                                                                                                                                              Instances For
                                                                                                                                                theorem Lean.Grind.AC.Seq.union_k_eq_union (s₁ s₂ : Seq) :
                                                                                                                                                s₁.union_k s₂ = s₁.union s₂
                                                                                                                                                theorem Lean.Grind.AC.Seq.denote_union {α : Sort u_1} (ctx : Context α) {inst₁ : Std.Associative ctx.op} {inst₂ : Std.Commutative ctx.op} (s₁ s₂ : Seq) :
                                                                                                                                                denote ctx (s₁.union s₂) = ctx.op (denote ctx s₁) (denote ctx s₂)
                                                                                                                                                noncomputable def Lean.Grind.AC.simp_ac_cert (c lhs rhs s s' : Seq) :
                                                                                                                                                Equations
                                                                                                                                                  Instances For
                                                                                                                                                    theorem Lean.Grind.AC.simp_ac {α : Sort u_1} (ctx : Context α) {inst₁ : Std.Associative ctx.op} {inst₂ : Std.Commutative ctx.op} (c lhs rhs s s' : Seq) :
                                                                                                                                                    simp_ac_cert c lhs rhs s s' = trueSeq.denote ctx lhs = Seq.denote ctx rhsSeq.denote ctx s = Seq.denote ctx s'

                                                                                                                                                    Given lhs = rhs, and a term s := union a lhs, rewrite it to s' := union a rhs

                                                                                                                                                    theorem Lean.Grind.AC.eq_simp_lhs_ac {α : Sort u_1} (ctx : Context α) {inst₁ : Std.Associative ctx.op} {inst₂ : Std.Commutative ctx.op} (c lhs₁ rhs₁ lhs₂ rhs₂ lhs₂' : Seq) :
                                                                                                                                                    simp_ac_cert c lhs₁ rhs₁ lhs₂ lhs₂' = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ = Seq.denote ctx rhs₂Seq.denote ctx lhs₂' = Seq.denote ctx rhs₂
                                                                                                                                                    theorem Lean.Grind.AC.eq_simp_rhs_ac {α : Sort u_1} (ctx : Context α) {inst₁ : Std.Associative ctx.op} {inst₂ : Std.Commutative ctx.op} (c lhs₁ rhs₁ lhs₂ rhs₂ rhs₂' : Seq) :
                                                                                                                                                    simp_ac_cert c lhs₁ rhs₁ rhs₂ rhs₂' = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ = Seq.denote ctx rhs₂Seq.denote ctx lhs₂ = Seq.denote ctx rhs₂'
                                                                                                                                                    theorem Lean.Grind.AC.diseq_simp_lhs_ac {α : Sort u_1} (ctx : Context α) {inst₁ : Std.Associative ctx.op} {inst₂ : Std.Commutative ctx.op} (c lhs₁ rhs₁ lhs₂ rhs₂ lhs₂' : Seq) :
                                                                                                                                                    simp_ac_cert c lhs₁ rhs₁ lhs₂ lhs₂' = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ Seq.denote ctx rhs₂Seq.denote ctx lhs₂' Seq.denote ctx rhs₂
                                                                                                                                                    theorem Lean.Grind.AC.diseq_simp_rhs_ac {α : Sort u_1} (ctx : Context α) {inst₁ : Std.Associative ctx.op} {inst₂ : Std.Commutative ctx.op} (c lhs₁ rhs₁ lhs₂ rhs₂ rhs₂' : Seq) :
                                                                                                                                                    simp_ac_cert c lhs₁ rhs₁ rhs₂ rhs₂' = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ Seq.denote ctx rhs₂Seq.denote ctx lhs₂ Seq.denote ctx rhs₂'
                                                                                                                                                    noncomputable def Lean.Grind.AC.superpose_ac_cert (r₁ c r₂ lhs₁ rhs₁ lhs₂ rhs₂ lhs rhs : Seq) :
                                                                                                                                                    Equations
                                                                                                                                                      Instances For
                                                                                                                                                        theorem Lean.Grind.AC.superpose_ac {α : Sort u_1} (ctx : Context α) {inst₁ : Std.Associative ctx.op} {inst₂ : Std.Commutative ctx.op} (r₁ c r₂ lhs₁ rhs₁ lhs₂ rhs₂ lhs rhs : Seq) :
                                                                                                                                                        superpose_ac_cert r₁ c r₂ lhs₁ rhs₁ lhs₂ rhs₂ lhs rhs = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₂ = Seq.denote ctx rhs₂Seq.denote ctx lhs = Seq.denote ctx rhs

                                                                                                                                                        Given lhs₁ = rhs₁ and lhs₂ = rhs₂ where lhs₁ := union c r₁ and lhs₂ := union c r₂, lhs = rhs where lhs := union r₂ rhs₁ and rhs := union r₁ rhs₂

                                                                                                                                                        noncomputable def Lean.Grind.AC.Seq.contains_k (s : Seq) (x : Var) :
                                                                                                                                                        Equations
                                                                                                                                                          Instances For
                                                                                                                                                            theorem Lean.Grind.AC.Seq.denote_insert_of_contains {α : Sort u_1} (ctx : Context α) [inst₁ : Std.Associative ctx.op] [inst₂ : Std.Commutative ctx.op] [inst₃ : Std.IdempotentOp ctx.op] (s : Seq) (x : Var) :
                                                                                                                                                            s.contains_k x = truedenote ctx (insert x s) = denote ctx s
                                                                                                                                                            noncomputable def Lean.Grind.AC.superpose_ac_idempotent_cert (x : Var) (lhs₁ rhs₁ rhs : Seq) :
                                                                                                                                                            Equations
                                                                                                                                                              Instances For

                                                                                                                                                                Remark: see Section 4.1 of the paper "MODULARITY, COMBINATION, AC CONGRUENCE CLOSURE" to understand why superpose_ac_idempotent is needed.

                                                                                                                                                                theorem Lean.Grind.AC.superpose_ac_idempotent {α : Sort u_1} (ctx : Context α) {inst₁ : Std.Associative ctx.op} {inst₂ : Std.Commutative ctx.op} {inst₃ : Std.IdempotentOp ctx.op} (x : Var) (lhs₁ rhs₁ rhs : Seq) :
                                                                                                                                                                superpose_ac_idempotent_cert x lhs₁ rhs₁ rhs = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₁ = Seq.denote ctx rhs
                                                                                                                                                                noncomputable def Lean.Grind.AC.Seq.startsWithVar_k (s : Seq) (x : Var) :
                                                                                                                                                                Equations
                                                                                                                                                                  Instances For
                                                                                                                                                                    theorem Lean.Grind.AC.Seq.denote_concat_of_startsWithVar {α : Sort u_1} (ctx : Context α) [inst₁ : Std.Associative ctx.op] [inst₂ : Std.IdempotentOp ctx.op] (s : Seq) (x : Var) :
                                                                                                                                                                    s.startsWithVar_k x = truedenote ctx ((var x).concat_k s) = denote ctx s
                                                                                                                                                                    noncomputable def Lean.Grind.AC.superpose_head_idempotent_cert (x : Var) (lhs₁ rhs₁ rhs : Seq) :
                                                                                                                                                                    Equations
                                                                                                                                                                      Instances For
                                                                                                                                                                        theorem Lean.Grind.AC.superpose_head_idempotent {α : Sort u_1} (ctx : Context α) {inst₁ : Std.Associative ctx.op} {inst₂ : Std.IdempotentOp ctx.op} (x : Var) (lhs₁ rhs₁ rhs : Seq) :
                                                                                                                                                                        superpose_head_idempotent_cert x lhs₁ rhs₁ rhs = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₁ = Seq.denote ctx rhs

                                                                                                                                                                        superpose_ac_idempotent for the non-commutative case. This is the "head"-case

                                                                                                                                                                        noncomputable def Lean.Grind.AC.Seq.endsWithVar_k (s : Seq) (x : Var) :
                                                                                                                                                                        Equations
                                                                                                                                                                          Instances For
                                                                                                                                                                            theorem Lean.Grind.AC.Seq.denote_concat_of_endsWithVar {α : Sort u_1} (ctx : Context α) [inst₁ : Std.Associative ctx.op] [inst₂ : Std.IdempotentOp ctx.op] (s : Seq) (x : Var) :
                                                                                                                                                                            s.endsWithVar_k x = truedenote ctx (s.concat_k (var x)) = denote ctx s
                                                                                                                                                                            noncomputable def Lean.Grind.AC.superpose_tail_idempotent_cert (x : Var) (lhs₁ rhs₁ rhs : Seq) :
                                                                                                                                                                            Equations
                                                                                                                                                                              Instances For
                                                                                                                                                                                theorem Lean.Grind.AC.superpose_tail_idempotent {α : Sort u_1} (ctx : Context α) {inst₁ : Std.Associative ctx.op} {inst₂ : Std.IdempotentOp ctx.op} (x : Var) (lhs₁ rhs₁ rhs : Seq) :
                                                                                                                                                                                superpose_tail_idempotent_cert x lhs₁ rhs₁ rhs = trueSeq.denote ctx lhs₁ = Seq.denote ctx rhs₁Seq.denote ctx lhs₁ = Seq.denote ctx rhs

                                                                                                                                                                                superpose_ac_idempotent for the non-commutative case. It is similar to superpose_head_idempotent but for the "tail"-case

                                                                                                                                                                                noncomputable def Lean.Grind.AC.eq_norm_a_cert (lhs rhs : Expr) (lhs' rhs' : Seq) :
                                                                                                                                                                                Equations
                                                                                                                                                                                  Instances For
                                                                                                                                                                                    theorem Lean.Grind.AC.eq_norm_a {α : Sort u_1} (ctx : Context α) :
                                                                                                                                                                                    ∀ {x : Std.Associative ctx.op} (lhs rhs : Expr) (lhs' rhs' : Seq), eq_norm_a_cert lhs rhs lhs' rhs' = trueExpr.denote ctx lhs = Expr.denote ctx rhsSeq.denote ctx lhs' = Seq.denote ctx rhs'
                                                                                                                                                                                    noncomputable def Lean.Grind.AC.eq_norm_ac_cert (lhs rhs : Expr) (lhs' rhs' : Seq) :
                                                                                                                                                                                    Equations
                                                                                                                                                                                      Instances For
                                                                                                                                                                                        theorem Lean.Grind.AC.eq_norm_ac {α : Sort u_1} (ctx : Context α) :
                                                                                                                                                                                        ∀ {x : Std.Associative ctx.op} {x✝ : Std.Commutative ctx.op} (lhs rhs : Expr) (lhs' rhs' : Seq), eq_norm_ac_cert lhs rhs lhs' rhs' = trueExpr.denote ctx lhs = Expr.denote ctx rhsSeq.denote ctx lhs' = Seq.denote ctx rhs'
                                                                                                                                                                                        noncomputable def Lean.Grind.AC.eq_norm_ai_cert (lhs rhs : Expr) (lhs' rhs' : Seq) :
                                                                                                                                                                                        Equations
                                                                                                                                                                                          Instances For
                                                                                                                                                                                            theorem Lean.Grind.AC.eq_norm_ai {α : Sort u_1} (ctx : Context α) :
                                                                                                                                                                                            ∀ {x : Std.Associative ctx.op} {x✝ : Std.LawfulIdentity ctx.op (Var.denote ctx 0)} (lhs rhs : Expr) (lhs' rhs' : Seq), eq_norm_ai_cert lhs rhs lhs' rhs' = trueExpr.denote ctx lhs = Expr.denote ctx rhsSeq.denote ctx lhs' = Seq.denote ctx rhs'
                                                                                                                                                                                            noncomputable def Lean.Grind.AC.eq_norm_aci_cert (lhs rhs : Expr) (lhs' rhs' : Seq) :
                                                                                                                                                                                            Equations
                                                                                                                                                                                              Instances For
                                                                                                                                                                                                theorem Lean.Grind.AC.eq_norm_aci {α : Sort u_1} (ctx : Context α) :
                                                                                                                                                                                                ∀ {x : Std.Associative ctx.op} {x✝ : Std.Commutative ctx.op} {x✝¹ : Std.LawfulIdentity ctx.op (Var.denote ctx 0)} (lhs rhs : Expr) (lhs' rhs' : Seq), eq_norm_aci_cert lhs rhs lhs' rhs' = trueExpr.denote ctx lhs = Expr.denote ctx rhsSeq.denote ctx lhs' = Seq.denote ctx rhs'
                                                                                                                                                                                                noncomputable def Lean.Grind.AC.eq_erase_dup_cert (lhs rhs lhs' rhs' : Seq) :
                                                                                                                                                                                                Equations
                                                                                                                                                                                                  Instances For
                                                                                                                                                                                                    theorem Lean.Grind.AC.eq_erase_dup {α : Sort u_1} (ctx : Context α) :
                                                                                                                                                                                                    ∀ {x : Std.Associative ctx.op} {x✝ : Std.IdempotentOp ctx.op} (lhs rhs lhs' rhs' : Seq), eq_erase_dup_cert lhs rhs lhs' rhs' = trueSeq.denote ctx lhs = Seq.denote ctx rhsSeq.denote ctx lhs' = Seq.denote ctx rhs'
                                                                                                                                                                                                    noncomputable def Lean.Grind.AC.eq_erase0_cert (lhs rhs lhs' rhs' : Seq) :
                                                                                                                                                                                                    Equations
                                                                                                                                                                                                      Instances For
                                                                                                                                                                                                        theorem Lean.Grind.AC.eq_erase0 {α : Sort u_1} (ctx : Context α) :
                                                                                                                                                                                                        ∀ {x : Std.Associative ctx.op} {x✝ : Std.LawfulIdentity ctx.op (Var.denote ctx 0)} (lhs rhs lhs' rhs' : Seq), eq_erase0_cert lhs rhs lhs' rhs' = trueSeq.denote ctx lhs = Seq.denote ctx rhsSeq.denote ctx lhs' = Seq.denote ctx rhs'
                                                                                                                                                                                                        theorem Lean.Grind.AC.diseq_norm_a {α : Sort u_1} (ctx : Context α) :
                                                                                                                                                                                                        ∀ {x : Std.Associative ctx.op} (lhs rhs : Expr) (lhs' rhs' : Seq), eq_norm_a_cert lhs rhs lhs' rhs' = trueExpr.denote ctx lhs Expr.denote ctx rhsSeq.denote ctx lhs' Seq.denote ctx rhs'
                                                                                                                                                                                                        theorem Lean.Grind.AC.diseq_norm_ac {α : Sort u_1} (ctx : Context α) :
                                                                                                                                                                                                        ∀ {x : Std.Associative ctx.op} {x✝ : Std.Commutative ctx.op} (lhs rhs : Expr) (lhs' rhs' : Seq), eq_norm_ac_cert lhs rhs lhs' rhs' = trueExpr.denote ctx lhs Expr.denote ctx rhsSeq.denote ctx lhs' Seq.denote ctx rhs'
                                                                                                                                                                                                        theorem Lean.Grind.AC.diseq_norm_ai {α : Sort u_1} (ctx : Context α) :
                                                                                                                                                                                                        ∀ {x : Std.Associative ctx.op} {x✝ : Std.LawfulIdentity ctx.op (Var.denote ctx 0)} (lhs rhs : Expr) (lhs' rhs' : Seq), eq_norm_ai_cert lhs rhs lhs' rhs' = trueExpr.denote ctx lhs Expr.denote ctx rhsSeq.denote ctx lhs' Seq.denote ctx rhs'
                                                                                                                                                                                                        theorem Lean.Grind.AC.diseq_norm_aci {α : Sort u_1} (ctx : Context α) :
                                                                                                                                                                                                        ∀ {x : Std.Associative ctx.op} {x✝ : Std.Commutative ctx.op} {x✝¹ : Std.LawfulIdentity ctx.op (Var.denote ctx 0)} (lhs rhs : Expr) (lhs' rhs' : Seq), eq_norm_aci_cert lhs rhs lhs' rhs' = trueExpr.denote ctx lhs Expr.denote ctx rhsSeq.denote ctx lhs' Seq.denote ctx rhs'
                                                                                                                                                                                                        theorem Lean.Grind.AC.diseq_erase_dup {α : Sort u_1} (ctx : Context α) :
                                                                                                                                                                                                        ∀ {x : Std.Associative ctx.op} {x✝ : Std.IdempotentOp ctx.op} (lhs rhs lhs' rhs' : Seq), eq_erase_dup_cert lhs rhs lhs' rhs' = trueSeq.denote ctx lhs Seq.denote ctx rhsSeq.denote ctx lhs' Seq.denote ctx rhs'
                                                                                                                                                                                                        theorem Lean.Grind.AC.diseq_erase0 {α : Sort u_1} (ctx : Context α) :
                                                                                                                                                                                                        ∀ {x : Std.Associative ctx.op} {x✝ : Std.LawfulIdentity ctx.op (Var.denote ctx 0)} (lhs rhs lhs' rhs' : Seq), eq_erase0_cert lhs rhs lhs' rhs' = trueSeq.denote ctx lhs Seq.denote ctx rhsSeq.denote ctx lhs' Seq.denote ctx rhs'
                                                                                                                                                                                                        noncomputable def Lean.Grind.AC.diseq_unsat_cert (lhs rhs : Seq) :
                                                                                                                                                                                                        Equations
                                                                                                                                                                                                          Instances For
                                                                                                                                                                                                            theorem Lean.Grind.AC.diseq_unsat {α : Sort u_1} (ctx : Context α) (lhs rhs : Seq) :
                                                                                                                                                                                                            diseq_unsat_cert lhs rhs = trueSeq.denote ctx lhs Seq.denote ctx rhsFalse
                                                                                                                                                                                                            theorem Lean.Grind.AC.norm_a {α : Sort u_1} (ctx : Context α) :
                                                                                                                                                                                                            ∀ {x : Std.Associative ctx.op} (e : Expr) (s : Seq), e.toSeq.beq' s = trueExpr.denote ctx e = Seq.denote ctx s
                                                                                                                                                                                                            theorem Lean.Grind.AC.norm_ac {α : Sort u_1} (ctx : Context α) :
                                                                                                                                                                                                            ∀ {x : Std.Associative ctx.op} {x✝ : Std.Commutative ctx.op} (e : Expr) (s : Seq), e.toSeq.sort.beq' s = trueExpr.denote ctx e = Seq.denote ctx s
                                                                                                                                                                                                            theorem Lean.Grind.AC.norm_ai {α : Sort u_1} (ctx : Context α) :
                                                                                                                                                                                                            ∀ {x : Std.Associative ctx.op} {x✝ : Std.LawfulIdentity ctx.op (Var.denote ctx 0)} (e : Expr) (s : Seq), e.toSeq.erase0.beq' s = trueExpr.denote ctx e = Seq.denote ctx s
                                                                                                                                                                                                            theorem Lean.Grind.AC.norm_aci {α : Sort u_1} (ctx : Context α) :
                                                                                                                                                                                                            ∀ {x : Std.Associative ctx.op} {x✝ : Std.Commutative ctx.op} {x✝¹ : Std.LawfulIdentity ctx.op (Var.denote ctx 0)} (e : Expr) (s : Seq), e.toSeq.erase0.sort.beq' s = trueExpr.denote ctx e = Seq.denote ctx s
                                                                                                                                                                                                            theorem Lean.Grind.AC.eq_erase0_rhs {α : Sort u_1} (ctx : Context α) :
                                                                                                                                                                                                            ∀ {x : Std.Associative ctx.op} {x✝ : Std.LawfulIdentity ctx.op (Var.denote ctx 0)} (lhs rhs rhs' : Seq), rhs.erase0.beq' rhs' = trueSeq.denote ctx lhs = Seq.denote ctx rhsSeq.denote ctx lhs = Seq.denote ctx rhs'
                                                                                                                                                                                                            theorem Lean.Grind.AC.eq_erase_dup_rhs {α : Sort u_1} (ctx : Context α) :
                                                                                                                                                                                                            ∀ {x : Std.Associative ctx.op} {x✝ : Std.IdempotentOp ctx.op} (lhs rhs rhs' : Seq), rhs.eraseDup.beq' rhs' = trueSeq.denote ctx lhs = Seq.denote ctx rhsSeq.denote ctx lhs = Seq.denote ctx rhs'
                                                                                                                                                                                                            theorem Lean.Grind.AC.eq_expr_seq_seq {α : Sort u_1} (ctx : Context α) (e : Expr) (s₁ s₂ : Seq) :
                                                                                                                                                                                                            Expr.denote ctx e = Seq.denote ctx s₁Seq.denote ctx s₁ = Seq.denote ctx s₂Expr.denote ctx e = Seq.denote ctx s₂
                                                                                                                                                                                                            theorem Lean.Grind.AC.imp_eq {α : Sort u_1} (ctx : Context α) (lhs rhs : Expr) (s : Seq) :
                                                                                                                                                                                                            Expr.denote ctx lhs = Seq.denote ctx sExpr.denote ctx rhs = Seq.denote ctx sExpr.denote ctx lhs = Expr.denote ctx rhs
                                                                                                                                                                                                            theorem Lean.Grind.AC.refl {α : Sort u_1} (ctx : Context α) (s : Seq) :
                                                                                                                                                                                                            Seq.denote ctx s = Seq.denote ctx s