@[reducible, inline]
Equations
Instances For
@[reducible, inline]
Equations
Instances For
@[inline]
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
theorem
Lean.Grind.AC.Seq.denote_erase0
{α : Sort u_1}
(ctx : Context α)
{inst : Std.LawfulIdentity ctx.op (Var.denote ctx 0)}
(s : Seq)
:
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)
:
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)
:
theorem
Lean.Grind.AC.Seq.denote_sort
{α : Sort u_1}
(ctx : Context α)
{inst₁ : Std.Associative ctx.op}
{inst₂ : Std.Commutative ctx.op}
(s : Seq)
:
theorem
Lean.Grind.AC.Seq.denote_eraseDup
{α : Sort u_1}
(ctx : Context α)
{inst₁ : Std.Associative ctx.op}
{inst₂ : Std.IdempotentOp ctx.op}
(s : Seq)
:
theorem
Lean.Grind.AC.eq_orient
{α : Sort u_1}
(ctx : Context α)
(lhs rhs : Seq)
:
Seq.denote ctx lhs = Seq.denote ctx rhs → Seq.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₁
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₂' = true →
Seq.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₂' = true →
Seq.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₂' = true →
Seq.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₂' = true →
Seq.denote ctx lhs₁ = Seq.denote ctx rhs₁ →
Seq.denote ctx lhs₂ ≠ Seq.denote ctx rhs₂ → Seq.denote ctx lhs₂ ≠ Seq.denote ctx rhs₂'
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₂' = true →
Seq.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₂' = true →
Seq.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₂' = true →
Seq.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₂' = true →
Seq.denote ctx lhs₁ = Seq.denote ctx rhs₁ →
Seq.denote ctx lhs₂ ≠ Seq.denote ctx rhs₂ → Seq.denote ctx lhs₂ ≠ Seq.denote ctx rhs₂'
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₂' = true →
Seq.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₂' = true →
Seq.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₂' = true →
Seq.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₂' = true →
Seq.denote ctx lhs₁ = Seq.denote ctx rhs₁ →
Seq.denote ctx lhs₂ ≠ Seq.denote ctx rhs₂ → Seq.denote ctx lhs₂ ≠ Seq.denote ctx rhs₂'
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 = true →
Seq.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₂
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)
:
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' = true → Seq.denote ctx lhs = Seq.denote ctx rhs → Seq.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₂' = true →
Seq.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₂' = true →
Seq.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₂' = true →
Seq.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₂' = true →
Seq.denote ctx lhs₁ = Seq.denote ctx rhs₁ →
Seq.denote ctx lhs₂ ≠ Seq.denote ctx rhs₂ → Seq.denote ctx lhs₂ ≠ Seq.denote ctx rhs₂'
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 = true →
Seq.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₂
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)
:
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 = true →
Seq.denote ctx lhs₁ = Seq.denote ctx rhs₁ → Seq.denote ctx lhs₁ = Seq.denote ctx rhs
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)
:
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 = true →
Seq.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
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)
:
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 = true →
Seq.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
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' = true →
Expr.denote ctx lhs = Expr.denote ctx rhs → Seq.denote ctx lhs' = Seq.denote ctx rhs'
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' = true →
Expr.denote ctx lhs = Expr.denote ctx rhs → Seq.denote ctx lhs' = Seq.denote ctx rhs'
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' = true →
Expr.denote ctx lhs = Expr.denote ctx rhs → Seq.denote ctx lhs' = Seq.denote ctx rhs'
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' = true →
Expr.denote ctx lhs = Expr.denote ctx rhs → Seq.denote ctx lhs' = Seq.denote ctx rhs'
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' = true →
Seq.denote ctx lhs = Seq.denote ctx rhs → Seq.denote ctx lhs' = Seq.denote ctx rhs'
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' = true →
Seq.denote ctx lhs = Seq.denote ctx rhs → Seq.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' = true →
Expr.denote ctx lhs ≠ Expr.denote ctx rhs → Seq.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' = true →
Expr.denote ctx lhs ≠ Expr.denote ctx rhs → Seq.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' = true →
Expr.denote ctx lhs ≠ Expr.denote ctx rhs → Seq.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' = true →
Expr.denote ctx lhs ≠ Expr.denote ctx rhs → Seq.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' = true →
Seq.denote ctx lhs ≠ Seq.denote ctx rhs → Seq.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' = true →
Seq.denote ctx lhs ≠ Seq.denote ctx rhs → Seq.denote ctx lhs' ≠ Seq.denote ctx rhs'
theorem
Lean.Grind.AC.diseq_unsat
{α : Sort u_1}
(ctx : Context α)
(lhs rhs : Seq)
:
diseq_unsat_cert lhs rhs = true → Seq.denote ctx lhs ≠ Seq.denote ctx rhs → False
theorem
Lean.Grind.AC.norm_a
{α : Sort u_1}
(ctx : Context α)
:
∀ {x : Std.Associative ctx.op} (e : Expr) (s : Seq), e.toSeq.beq' s = true → Expr.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 = true → Expr.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 = true → Expr.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 = true → Expr.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' = true → Seq.denote ctx lhs = Seq.denote ctx rhs → Seq.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' = true → Seq.denote ctx lhs = Seq.denote ctx rhs → Seq.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 s →
Expr.denote ctx rhs = Seq.denote ctx s → Expr.denote ctx lhs = Expr.denote ctx rhs