Equations
Instances For
Equations
- Esolangs.Cornucopia.Prog₁.defBool = { arity := 1, expr := Esolangs.Cornucopia.Expr.call "not" [Esolangs.Cornucopia.Expr.call "not" [Esolangs.Cornucopia.Expr.arg 0]] }
Instances For
Equations
- Esolangs.Cornucopia.Prog₁.exprAdd = Esolangs.Cornucopia.Expr.call Esolangs.Cornucopia.subName [Esolangs.Cornucopia.Expr.call Esolangs.Cornucopia.subName [Esolangs.Cornucopia.Expr.call Esolangs.Cornucopia.subName [Esolangs.Cornucopia.Expr.call Esolangs.Cornucopia.succName [Esolangs.Cornucopia.Expr.call Esolangs.Cornucopia.succName [Esolangs.Cornucopia.Expr.call "add" [Esolangs.Cornucopia.Expr.call Esolangs.Cornucopia.subName [Esolangs.Cornucopia.Expr.arg 0, Esolangs.Cornucopia.one], Esolangs.Cornucopia.Expr.call Esolangs.Cornucopia.subName [Esolangs.Cornucopia.Expr.arg 1, Esolangs.Cornucopia.one]]]], Esolangs.Cornucopia.Expr.call "not" [Esolangs.Cornucopia.Expr.arg 0]], Esolangs.Cornucopia.Expr.call "not" [Esolangs.Cornucopia.Expr.arg 1]], Esolangs.Cornucopia.Expr.call "add" [Esolangs.Cornucopia.zero, Esolangs.Cornucopia.zero]]
Instances For
Equations
- Esolangs.Cornucopia.Prog₁.defAdd = { arity := 2, expr := Esolangs.Cornucopia.Prog₁.exprAdd }
Instances For
Equations
- Esolangs.Cornucopia.Prog₁.exprIte = Esolangs.Cornucopia.Expr.call Esolangs.Cornucopia.subName [Esolangs.Cornucopia.Expr.call Esolangs.Cornucopia.subName [Esolangs.Cornucopia.Expr.call Esolangs.Cornucopia.subName [Esolangs.Cornucopia.Expr.call Esolangs.Cornucopia.succName [Esolangs.Cornucopia.Expr.call "ite" [Esolangs.Cornucopia.Expr.arg 0, Esolangs.Cornucopia.Expr.call Esolangs.Cornucopia.subName [Esolangs.Cornucopia.Expr.arg 1, Esolangs.Cornucopia.one], Esolangs.Cornucopia.Expr.call Esolangs.Cornucopia.subName [Esolangs.Cornucopia.Expr.arg 2, Esolangs.Cornucopia.one]]], Esolangs.Cornucopia.Expr.call Esolangs.Cornucopia.subName [Esolangs.Cornucopia.Expr.call "bool" [Esolangs.Cornucopia.Expr.arg 0], Esolangs.Cornucopia.Expr.arg 1]], Esolangs.Cornucopia.Expr.call Esolangs.Cornucopia.subName [Esolangs.Cornucopia.Expr.call "not" [Esolangs.Cornucopia.Expr.arg 0], Esolangs.Cornucopia.Expr.arg 2]], Esolangs.Cornucopia.Expr.call "ite" [Esolangs.Cornucopia.Expr.arg 0, Esolangs.Cornucopia.zero, Esolangs.Cornucopia.zero]]
Instances For
Equations
- Esolangs.Cornucopia.Prog₁.defIte = { arity := 3, expr := Esolangs.Cornucopia.Prog₁.exprIte }
Instances For
Equations
- Esolangs.Cornucopia.Prog₁.defs = [(Esolangs.Cornucopia.mainName, Esolangs.Cornucopia.defId), ("0", Esolangs.Cornucopia.defZero), ("1", Esolangs.Cornucopia.defOne), ("not", Esolangs.Cornucopia.Prog₁.defNot), ("bool", Esolangs.Cornucopia.Prog₁.defBool), ("add", Esolangs.Cornucopia.Prog₁.defAdd), ("ite", Esolangs.Cornucopia.Prog₁.defIte)]
Instances For
Equations
- Esolangs.Cornucopia.Prog₁.fs = [(Esolangs.Cornucopia.mainName, Esolangs.Cornucopia.fn 1 fun (x : List ℕ) => x[0]!), ("0", Esolangs.Cornucopia.fn 0 fun (x : List ℕ) => 0), ("1", Esolangs.Cornucopia.fn 0 fun (x : List ℕ) => 1), ("not", Esolangs.Cornucopia.fn 1 fun (xs : List ℕ) => if xs[0]! = 0 then 1 else 0), ("bool", Esolangs.Cornucopia.fn 1 fun (xs : List ℕ) => if xs[0]! = 0 then 0 else 1), ("add", Esolangs.Cornucopia.fn 2 fun (xs : List ℕ) => xs[0]! + xs[1]!), ("ite", Esolangs.Cornucopia.fn 3 fun (xs : List ℕ) => if xs[0]! = 0 then xs[2]! else xs[1]!)]
Instances For
Equations
Instances For
@[simp]
@[simp]
theorem
Esolangs.Cornucopia.Prog₁.fs₁_get!_of
{fs₁ : Map String (List ℕ → ℕ)}
{name : String}
(h : CompatibleDefs (Map.ofList defs) fs₁)
(d : Def)
(h₁ : (name, d) ∈ defs)
(h₂ :
∀ (f : List ℕ → ℕ),
Map.get! name (Map.ofList defs) = d →
Map.get! name (builtinFs ∪ fs₁) = f →
Map.get? name fs₁ = some (fn d.arity (d.expr.eval prog (builtinFs ∪ fs₁))) →
Map.get? name fs₁ = some f →
f = fn d.arity (d.expr.eval prog (builtinFs ∪ fs₁)) → fn d.arity f = Map.get! name (Map.ofList fs))
:
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
theorem
Esolangs.Cornucopia.Prog₁.fs₁_get?_builtin
{fs₁ : Map String (List ℕ → ℕ)}
{name : String}
[H : BuiltinC name]
(h : CompatibleDefs (Map.ofList defs) fs₁)
:
theorem
Esolangs.Cornucopia.Prog₁.fs₁_get!_builtin
{fs₁ : Map String (List ℕ → ℕ)}
{name : String}
[H : BuiltinC name]
(h : CompatibleDefs (Map.ofList defs) fs₁)
:
theorem
Esolangs.Cornucopia.Prog₁.fs₁_get!_main
{fs₁ : Map String (List ℕ → ℕ)}
(h : CompatibleDefs (Map.ofList defs) fs₁)
:
theorem
Esolangs.Cornucopia.Prog₁.fs₁_get!_zero
{fs₁ : Map String (List ℕ → ℕ)}
(h : CompatibleDefs (Map.ofList defs) fs₁)
:
theorem
Esolangs.Cornucopia.Prog₁.fs₁_get!_one
{fs₁ : Map String (List ℕ → ℕ)}
(h : CompatibleDefs (Map.ofList defs) fs₁)
:
theorem
Esolangs.Cornucopia.Prog₁.fs₁_get!_not
{fs₁ : Map String (List ℕ → ℕ)}
(h : CompatibleDefs (Map.ofList defs) fs₁)
:
theorem
Esolangs.Cornucopia.Prog₁.fs₁_get!_bool
{fs₁ : Map String (List ℕ → ℕ)}
(h : CompatibleDefs (Map.ofList defs) fs₁)
:
theorem
Esolangs.Cornucopia.Prog₁.fs₁_get!_add
{fs₁ : Map String (List ℕ → ℕ)}
(h : CompatibleDefs (Map.ofList defs) fs₁)
:
theorem
Esolangs.Cornucopia.Prog₁.fs₁_get!_ite
{fs₁ : Map String (List ℕ → ℕ)}
(h : CompatibleDefs (Map.ofList defs) fs₁)
:
@[instance_reducible]
Equations
- Esolangs.Cornucopia.Prog₁.instProgInfoProg = { name := "Prog₁", defNames := ["main", "0", "1", "not", "bool", "add", "ite"], has_model := true, has_unique_model := true, h_defNames := Esolangs.Cornucopia.Prog₁.instProgInfoProg._proof_1, h_wf' := Esolangs.Cornucopia.Prog₁.instProgInfoProg._proof_2, h_has_model := Esolangs.Cornucopia.Prog₁.instProgInfoProg._proof_3, h_has_unique_model := Esolangs.Cornucopia.Prog₁.instProgInfoProg._proof_4 }