File: .lake/packages/lean4/src/lean/Init/Data/Nat/SOM.lean

full_name: Nat.SOM.Expr
code: inductive Expr where
  | num (i : Nat)
  | var (v : Var)
  | add (a b : Expr)
  | mul (a b : Expr)
  deriving Inhabited
goal: Type

full_name: Nat.SOM.Expr.num
code: inductive Expr where
  | num (i : Nat)
  | var (v : Var)
  | add (a b : Expr)
  | mul (a b : Expr)
  deriving Inhabited
goal: Nat.SOM.Expr

full_name: Nat.SOM.Expr.mul
code: inductive Expr where
  | num (i : Nat)
  | var (v : Var)
  | add (a b : Expr)
  | mul (a b : Expr)
  deriving Inhabited
goal: Nat.SOM.Expr

full_name: Nat.SOM.instInhabitedExpr
code: inductive Expr where
  | num (i : Nat)
  | var (v : Var)
  | add (a b : Expr)
  | mul (a b : Expr)
  deriving Inhabited
goal: Inhabited Nat.SOM.Expr

full_name: Nat.SOM.Expr.var
code: inductive Expr where
  | num (i : Nat)
  | var (v : Var)
  | add (a b : Expr)
  | mul (a b : Expr)
  deriving Inhabited
goal: Nat.SOM.Expr

full_name: Nat.SOM.Expr.add
code: inductive Expr where
  | num (i : Nat)
  | var (v : Var)
  | add (a b : Expr)
  | mul (a b : Expr)
  deriving Inhabited
goal: Nat.SOM.Expr

full_name: Nat.SOM.Expr.denote
code: def Expr.denote (ctx : Context) : Expr → Nat
  
goal: Nat.SOM.Expr → Nat

full_name: Nat.SOM.Mon
code: abbrev Mon 
goal: Type

full_name: Nat.SOM.Mon.denote
code: def Mon.denote (ctx : Context) : Mon → Nat
  
goal: Nat.SOM.Mon → Nat

full_name: Nat.SOM.Mon.mul.go
code: def Mon.mul (m₁ m₂ : Mon) : Mon 
goal: Nat.SOM.Mon

full_name: Nat.SOM.Mon.mul
code: def Mon.mul (m₁ m₂ : Mon) : Mon 
goal: Nat.SOM.Mon

full_name: Nat.SOM.Poly
code: abbrev Poly 
goal: Type

full_name: Nat.SOM.Poly.denote
code: def Poly.denote (ctx : Context) : Poly → Nat
  
goal: Nat.SOM.Poly → Nat

full_name: Nat.SOM.Poly.add.go
code: def Poly.add (p₁ p₂ : Poly) : Poly 
goal: Nat.SOM.Poly

full_name: Nat.SOM.Poly.add
code: def Poly.add (p₁ p₂ : Poly) : Poly 
goal: Nat.SOM.Poly

full_name: Nat.SOM.Poly.insertSorted
code: def Poly.insertSorted (k : Nat) (m : Mon) (p : Poly) : Poly 
goal: Nat.SOM.Poly

full_name: Nat.SOM.Poly.mulMon.go
code: def Poly.mulMon (p : Poly) (k : Nat) (m : Mon) : Poly 
goal: Nat.SOM.Poly

full_name: Nat.SOM.Poly.mulMon
code: def Poly.mulMon (p : Poly) (k : Nat) (m : Mon) : Poly 
goal: Nat.SOM.Poly

full_name: Nat.SOM.Poly.mul
code: def Poly.mul (p₁ : Poly) (p₂ : Poly) : Poly 
goal: Nat.SOM.Poly

full_name: Nat.SOM.Poly.mul.go
code: def Poly.mul (p₁ : Poly) (p₂ : Poly) : Poly 
goal: Nat.SOM.Poly

full_name: Nat.SOM.Expr.toPoly
code: def Expr.toPoly : Expr → Poly
  
goal: Nat.SOM.Expr → Nat.SOM.Poly

full_name: Nat.SOM.Mon.append_denote
code: theorem Mon.append_denote (ctx : Context) (m₁ m₂ : Mon) : (m₁ ++ m₂).denote ctx = m₁.denote ctx * m₂.denote ctx 
goal: Nat.SOM.Mon.denote ctx (m₁ ++ m₂) = Nat.SOM.Mon.denote ctx m₁ * Nat.SOM.Mon.denote ctx m₂

full_name: Nat.SOM.Mon.mul_denote.go
code: theorem Mon.mul_denote (ctx : Context) (m₁ m₂ : Mon) : (m₁.mul m₂).denote ctx = m₁.denote ctx * m₂.denote ctx 
goal: Nat.SOM.Mon.denote ctx (Nat.SOM.Mon.mul.go fuel m₁ m₂) = Nat.SOM.Mon.denote ctx m₁ * Nat.SOM.Mon.denote ctx m₂

full_name: Nat.SOM.Mon.mul_denote
code: theorem Mon.mul_denote (ctx : Context) (m₁ m₂ : Mon) : (m₁.mul m₂).denote ctx = m₁.denote ctx * m₂.denote ctx 
goal: Nat.SOM.Mon.denote ctx (m₁.mul m₂) = Nat.SOM.Mon.denote ctx m₁ * Nat.SOM.Mon.denote ctx m₂

full_name: Nat.SOM.Poly.append_denote
code: theorem Poly.append_denote (ctx : Context) (p₁ p₂ : Poly) : (p₁ ++ p₂).denote ctx = p₁.denote ctx + p₂.denote ctx 
goal: Nat.SOM.Poly.denote ctx (p₁ ++ p₂) = Nat.SOM.Poly.denote ctx p₁ + Nat.SOM.Poly.denote ctx p₂

full_name: Nat.SOM.Poly.add_denote.go
code: theorem Poly.add_denote (ctx : Context) (p₁ p₂ : Poly) : (p₁.add p₂).denote ctx = p₁.denote ctx + p₂.denote ctx 
goal: Nat.SOM.Poly.denote ctx (Nat.SOM.Poly.add.go fuel p₁ p₂) = Nat.SOM.Poly.denote ctx p₁ + Nat.SOM.Poly.denote ctx p₂

full_name: Nat.SOM.Poly.add_denote
code: theorem Poly.add_denote (ctx : Context) (p₁ p₂ : Poly) : (p₁.add p₂).denote ctx = p₁.denote ctx + p₂.denote ctx 
goal: Nat.SOM.Poly.denote ctx (p₁.add p₂) = Nat.SOM.Poly.denote ctx p₁ + Nat.SOM.Poly.denote ctx p₂

full_name: Nat.SOM.Poly.denote_insertSorted
code: theorem Poly.denote_insertSorted (ctx : Context) (k : Nat) (m : Mon) (p : Poly) : (p.insertSorted k m).denote ctx = p.denote ctx + k * m.denote ctx 
goal: Nat.SOM.Poly.denote ctx (Nat.SOM.Poly.insertSorted k m p) = Nat.SOM.Poly.denote ctx p + k * Nat.SOM.Mon.denote ctx m

full_name: Nat.SOM.Poly.mulMon_denote.go
code: theorem Poly.mulMon_denote (ctx : Context) (p : Poly) (k : Nat) (m : Mon) : (p.mulMon k m).denote ctx = p.denote ctx * k * m.denote ctx 
goal: Nat.SOM.Poly.denote ctx (Nat.SOM.Poly.mulMon.go k m p acc) =
  Nat.SOM.Poly.denote ctx acc + Nat.SOM.Poly.denote ctx p * k * Nat.SOM.Mon.denote ctx m

full_name: Nat.SOM.Poly.mulMon_denote
code: theorem Poly.mulMon_denote (ctx : Context) (p : Poly) (k : Nat) (m : Mon) : (p.mulMon k m).denote ctx = p.denote ctx * k * m.denote ctx 
goal: Nat.SOM.Poly.denote ctx (p.mulMon k m) = Nat.SOM.Poly.denote ctx p * k * Nat.SOM.Mon.denote ctx m

full_name: Nat.SOM.Poly.mul_denote.go
code: theorem Poly.mul_denote (ctx : Context) (p₁ p₂ : Poly) : (p₁.mul p₂).denote ctx = p₁.denote ctx * p₂.denote ctx 
goal: Nat.SOM.Poly.denote ctx (Nat.SOM.Poly.mul.go p₂ p₁ acc) =
  Nat.SOM.Poly.denote ctx acc + Nat.SOM.Poly.denote ctx p₁ * Nat.SOM.Poly.denote ctx p₂

full_name: Nat.SOM.Poly.mul_denote
code: theorem Poly.mul_denote (ctx : Context) (p₁ p₂ : Poly) : (p₁.mul p₂).denote ctx = p₁.denote ctx * p₂.denote ctx 
goal: Nat.SOM.Poly.denote ctx (p₁.mul p₂) = Nat.SOM.Poly.denote ctx p₁ * Nat.SOM.Poly.denote ctx p₂

full_name: Nat.SOM.Expr.toPoly_denote
code: theorem Expr.toPoly_denote (ctx : Context) (e : Expr) : e.toPoly.denote ctx = e.denote ctx 
goal: Nat.SOM.Poly.denote ctx e.toPoly = Nat.SOM.Expr.denote ctx e

full_name: Nat.SOM.Expr.eq_of_toPoly_eq
code: theorem Expr.eq_of_toPoly_eq (ctx : Context) (a b : Expr) (h : a.toPoly == b.toPoly) : a.denote ctx = b.denote ctx 
goal: Nat.SOM.Expr.denote ctx a = Nat.SOM.Expr.denote ctx b