Documentation

Projects.Esolangs.Cornucopia.Basic

Instances For
    Instances For
      Instances For
        Equations
        Instances For
          Instances For
            @[irreducible]
            Equations
            Instances For
              theorem Esolangs.Cornucopia.isBuiltin_iff {name : String} :
              IsBuiltin name ∃ (b : Builtin), b.name = name
              @[simp]
              theorem Esolangs.Cornucopia.def_mk {defs : Map String Def} {name : String} :
              { defs := defs }.def name = Map.get! name defs
              @[simp]
              theorem Esolangs.Cornucopia.def?_mk {defs : Map String Def} {name : String} :
              { defs := defs }.def? name = Map.get? name defs
              @[simp]
              theorem Esolangs.Cornucopia.main_mk {defs : Map String Def} :
              { defs := defs }.main = Map.get! mainName defs
              @[simp]
              theorem Esolangs.Cornucopia.Prog.defs_mk {ds : Map String Def} :
              { defs := ds }.defs = ds
              @[simp]
              theorem Esolangs.Cornucopia.Prog.arity_mk {defs : Map String Def} {name : String} :
              { defs := defs }.arity name = (Map.get! name defs).arity
              @[simp]
              theorem Esolangs.Cornucopia.Prog.expr_mk {defs : Map String Def} {name : String} :
              { defs := defs }.expr name = (Map.get! name defs).expr
              theorem Esolangs.Cornucopia.Prog.def_ofDefs {xs : List (String × Def)} {name : String} (h : ¬IsBuiltin name) :
              (ofDefs xs).def name = Map.get! name (Map.ofList xs)
              theorem Esolangs.Cornucopia.arity_ofDefs {defs : List (String × Def)} {name : String} (h : ¬IsBuiltin name) :
              (Prog.ofDefs defs).arity name = (Map.get! name (Map.ofList defs)).arity
              @[instance_reducible]
              Equations
              @[simp]
              theorem Esolangs.Cornucopia.Expr.run_arg {i : } {prog : Prog} {f : Map String (List )} {args : List } :
              (arg i).eval prog f args = args[i]!
              @[simp]
              theorem Esolangs.Cornucopia.Expr.wf_arg {prog : Prog} {n i : } :
              WF prog n (arg i) i < n
              @[simp]
              theorem Esolangs.Cornucopia.Builtin.ext_name {b₁ b₂ : Builtin} :
              b₁.name = b₂.name b₁ = b₂
              @[simp]
              theorem Esolangs.Cornucopia.Builtin.ext_def {b₁ b₂ : Builtin} :
              b₁.def = b₂.def b₁ = b₂
              theorem Esolangs.Cornucopia.def?_ofDefs_builtin_eq_of {defs : List (String × Def)} {b : Builtin} (h : ddefs, ¬IsBuiltin d.1) :
              @[simp]
              theorem Esolangs.Cornucopia.Prog.hasDef_ofDefs {defs : List (String × Def)} {name : String} :
              (ofDefs defs).HasDef name IsBuiltin name name Map.ofList defs
              @[simp]
              theorem Esolangs.Cornucopia.get?_builtinDefs_eq_some {name : String} {d : Def} :
              Map.get? name builtinDefs = some d ∃ (b : Builtin), b.name = name b.def = d
              @[simp]
              theorem Esolangs.Cornucopia.Builtin.wf_expr {prog : Prog} {b : Builtin} :
              Expr.WF prog b.arity b.expr ∃ (d : Def), prog.def? b.name = some d d.arity = b.arity
              theorem Esolangs.Cornucopia.WFDefs'.builtin_not_mem {defs : List (String × Def)} {name : String} {d : Def} (H : WFDefs' defs) [h : BuiltinC name] :
              (name, d)defs
              theorem Esolangs.Cornucopia.WFDefs'.get?_ofList_defs {defs : List (String × Def)} {name : String} {d : Def} (H : WFDefs' defs) :
              Map.get? name (Map.ofList defs) = some d (name, d) defs
              theorem Esolangs.Cornucopia.WFDefs'.isBuiltin_or {defs : List (String × Def)} {name : String} {d : Def} (H : WFDefs' defs) (h : Map.get? name (builtinDefs Map.ofList defs) = some d) :
              IsBuiltin name (name, d) defs
              theorem Esolangs.Cornucopia.WFDefs'.hasDef {defs : List (String × Def)} {name : String} {d : Def} (H : WFDefs' defs) (h : Map.get? name (builtinDefs Map.ofList defs) = some d) :
              (Prog.ofDefs defs).HasDef name
              theorem Esolangs.Cornucopia.Prog.def_eq_get!_def? {prog : Prog} {name : String} :
              prog.def name = (prog.def? name).get!
              theorem Esolangs.Cornucopia.Prog.def?_of_get? {defs : List (String × Def)} {name : String} {d : Def} (h : Map.get? name (builtinDefs Map.ofList defs) = some d) :
              (ofDefs defs).def? name = some d
              theorem Esolangs.Cornucopia.Prog.def_of_get? {defs : List (String × Def)} {name : String} {d : Def} (h : Map.get? name (builtinDefs Map.ofList defs) = some d) :
              (ofDefs defs).def name = d
              theorem Esolangs.Cornucopia.Prog.arity_of_get? {defs : List (String × Def)} {name : String} {d : Def} (h : Map.get? name (builtinDefs Map.ofList defs) = some d) :
              (ofDefs defs).arity name = d.arity
              theorem Esolangs.Cornucopia.Prog.expr_of_get? {defs : List (String × Def)} {name : String} {d : Def} (h : Map.get? name (builtinDefs Map.ofList defs) = some d) :
              (ofDefs defs).expr name = d.expr
              theorem Esolangs.Cornucopia.WFDefs'.not_mem_builtinDefs {defs : List (String × Def)} {name : String} {d : Def} (H : WFDefs' defs) (h : (name, d) defs) :
              namebuiltinDefs
              theorem Esolangs.Cornucopia.WFDefs'.not_mem_builtinFs {defs : List (String × Def)} {name : String} {d : Def} (H : WFDefs' defs) (h : (name, d) defs) :
              namebuiltinFs
              theorem Esolangs.Cornucopia.WFDefs'.get?_of_mem_defs {defs : List (String × Def)} (H : WFDefs' defs) {name : String} {d : Def} (h : (name, d) defs) :
              theorem Esolangs.Cornucopia.WFDefs'.def?_of_mem_defs {defs : List (String × Def)} {name : String} {d : Def} (H : WFDefs' defs) (h : (name, d) defs) :
              (Prog.ofDefs defs).def? name = some d
              theorem Esolangs.Cornucopia.WFDefs'.def_of_mem_defs {defs : List (String × Def)} {name : String} {d : Def} (H : WFDefs' defs) (h : (name, d) defs) :
              (Prog.ofDefs defs).def name = d
              theorem Esolangs.Cornucopia.WFDefs'.arity_of_mem_defs {defs : List (String × Def)} {name : String} {d : Def} (H : WFDefs' defs) (h : (name, d) defs) :
              (Prog.ofDefs defs).arity name = d.arity
              theorem Esolangs.Cornucopia.WFDefs'.expr_of_mem_defs {defs : List (String × Def)} {name : String} {d : Def} (H : WFDefs' defs) (h : (name, d) defs) :
              (Prog.ofDefs defs).expr name = d.expr
              theorem Esolangs.Cornucopia.WFDefs'.builtin_not_mem_defs {defs : List (String × Def)} {b : Builtin} {d : Def} (H : WFDefs' defs) :
              (b.name, d)defs
              theorem Esolangs.Cornucopia.CompatibleDefs.get?_builtin {defs : List (String × Def)} {fs : Map String (List )} {name : String} [H₀ : BuiltinC name] (H : WFDefs' defs) (H₁ : CompatibleDefs (Map.ofList defs) fs) :
              theorem Esolangs.Cornucopia.CompatibleDefs.get!_builtin {defs : List (String × Def)} {fs : Map String (List )} {name : String} [H₀ : BuiltinC name] (H : WFDefs' defs) (H₁ : CompatibleDefs (Map.ofList defs) fs) :
              @[simp]
              theorem Esolangs.Cornucopia.Builtin.eval_mkList {b : Builtin} {xs : List } :
              b.eval (mkList b.arity fun (x : ) => xs[x]!) = b.info.eval xs
              @[simp]
              theorem Esolangs.Cornucopia.get?_builtinFs_eq_some {name : String} {f : List } :
              Map.get? name builtinFs = some f ∃ (b : Builtin), b.name = name b.eval = f
              theorem Esolangs.Cornucopia.Prog.WF.def_builtin {prog : Prog} {b : Builtin} [H : prog.WF] :
              prog.def b.name = b.def
              theorem Esolangs.Cornucopia.WFDefs'.get?_fs_of_mem_defs {defs : List (String × Def)} {fs : Map String (List )} {name : String} {d : Def} (H : WFDefs' defs) (h : (name, d) defs) :
              Map.get? name (builtinFs fs) = Map.get? name fs
              theorem Esolangs.Cornucopia.WFDefs'.get!_fs_of_mem_defs {defs : List (String × Def)} {fs : Map String (List )} {name : String} {d : Def} (H : WFDefs' defs) (h : (name, d) defs) :
              Map.get! name (builtinFs fs) = Map.get! name fs
              theorem Esolangs.Cornucopia.WFDefs'.get?_of_mem_defs' {defs : List (String × Def)} (H : WFDefs' defs) {name : String} {d : Def} (h : (name, d) defs) :
              Map.get? name (Map.ofList defs) = some d
              theorem Esolangs.Cornucopia.WFDefs'.toList_defs {defs : List (String × Def)} (H : WFDefs' defs) :
              (Map.ofList defs).toList = defs.mergeSort fun (x1 x2 : String × Def) => decide (x1.1 x2.1)
              theorem Esolangs.Cornucopia.Prog.Compatible.fs_eq_union {prog : Prog} {fs : Map String (List )} (H : prog.Compatible fs) :
              ∃ (fs' : Map String (List )), fs = builtinFs fs' ∀ (b : Builtin), b.namefs'
              theorem Esolangs.Cornucopia.CompatibleDefs.builtin_not_mem {defs : List (String × Def)} {fs : Map String (List )} (H : WFDefs' defs) (H₁ : CompatibleDefs (Map.ofList defs) fs) (b : Builtin) :
              b.namefs
              @[simp]
              @[simp]
              theorem Esolangs.Cornucopia.Builtin.eval_sub :
              sub.eval = fn 2 fun (xs : List ) => xs[0]! - xs[1]!
              theorem Esolangs.Cornucopia.WFDefs'.compatible_fs_aux₂ {defs : List (String × Def)} {fs' : Map String (List )} (H : WFDefs' defs) (H₂ : (Prog.ofDefs defs).Compatible (builtinFs fs')) (h : ∀ (b : Builtin), b.namefs') :
              theorem Esolangs.Cornucopia.CompatibleDefs.exi_mem_defs_of_get? {defs : List (String × Def)} {fs : Map String (List )} {name : String} {f : List } (H : CompatibleDefs (Map.ofList defs) fs) (h : Map.get? name fs = some f) :
              ∃ (d : Def), (name, d) defs
              theorem Esolangs.Cornucopia.CompatibleDefs.exi_get?_defs_of_get? {defs : Map String Def} {fs : Map String (List )} {name : String} {f : List } (H : CompatibleDefs defs fs) (h : Map.get? name fs = some f) :
              ∃ (d : Def), Map.get? name defs = some d
              @[simp]
              @[simp]
              theorem Esolangs.Cornucopia.Expr.run_call {prog : Prog} {fs : Map String (List )} {args : List } {t : String} {xs : List Expr} :
              (call t xs).eval prog fs args = Map.get! t fs (List.map (fun (x : Expr) => x.eval prog fs args) xs)
              @[simp]
              theorem Esolangs.Cornucopia.Prog.compatible_fs {prog : Prog} [H : prog.WF] :
              prog.Compatible prog.fs
              @[simp]
              theorem Esolangs.Cornucopia.Expr.wf_call {prog : Prog} {t : String} {args : List Expr} {n : } :
              WF prog n (call t args) prog.HasDef t args.length = prog.arity t eargs, WF prog n e
              theorem Esolangs.Cornucopia.Prog.fs_eq_of_compatible {prog : Prog} {fs : Map String (List )} [hp : prog.WF] (h : prog.Compatible fs) :
              prog.fs = fs
              @[simp]
              theorem Esolangs.Cornucopia.fn_eq_fn_iff {n : } {f g : List } :
              fn n f = fn n g ∀ (xs : List ), xs.length = nf xs = g xs
              theorem Esolangs.Cornucopia.CompatibleDefs.eval_eq {defs : List (String × Def)} {fs : Map String (List )} {name : String} {d : Def} (H : CompatibleDefs (Map.ofList defs) fs) (h : (name, d) defs) (hh : (List.map (fun (x : String × Def) => x.1) defs).Nodup := by simp) :
              Map.get? name fs = some (fn d.arity (d.expr.eval { defs := builtinDefs Map.ofList defs } (builtinFs fs)))
              theorem Esolangs.Cornucopia.WFDefs'.wfDefs {defs : List (String × Def)} (H : WFDefs' defs) (h : ∃ (fs : Map String (List )), CompatibleCnd defs fs) :
              WFDefs defs
              theorem Esolangs.Cornucopia.WFDefs'.wf {defs : List (String × Def)} (H : WFDefs' defs) (h : ∃ (fs : Map String (List )), CompatibleCnd defs fs) :
              @[simp]
              theorem Esolangs.Cornucopia.BuiltinC.exi_eq_name {name : String} [h : BuiltinC name] :
              ∃ (b : Builtin), b.name = name
              @[simp]
              theorem Esolangs.Cornucopia.BuiltinC.not_forall_ne_name {name : String} [h : BuiltinC name] :
              ¬∀ (b : Builtin), b.name name
              @[simp]
              theorem Esolangs.Cornucopia.Prog.arity_main {prog : Prog} [H : prog.WF'] :
              prog.main.arity = 1
              @[simp]
              theorem Esolangs.Cornucopia.Prog.arity_mainName {prog : Prog} [H : prog.WF'] :
              @[simp]
              @[simp]
              theorem Esolangs.Cornucopia.Prog.Compatible.get?_builtin {prog : Prog} {fs : Map String (List )} {name : String} [h : BuiltinC name] (H : prog.Compatible fs) :
              Map.get? name fs = some (BuiltinC.b name).eval
              @[simp]
              theorem Esolangs.Cornucopia.Prog.Compatible.get!_builtin {prog : Prog} {fs : Map String (List )} {name : String} [h : BuiltinC name] (H : prog.Compatible fs) :
              Map.get! name fs = (BuiltinC.b name).eval
              theorem Esolangs.Cornucopia.Prog.wfBuiltins_ofDefs {defs : List (String × Def)} (h : (defs.all fun (x : String × Def) => decide (x.1List.map (fun (x : Builtin) => x.name) builtins)) = true) :
              @[simp]
              theorem Esolangs.Cornucopia.Prog.WFBuiltins.hasDef_builtin {prog : Prog} {name : String} [h₁ : prog.WFBuiltins] [h₂ : BuiltinC name] :
              prog.HasDef name
              @[simp]
              theorem Esolangs.Cornucopia.Prog.WFBuiltins.mem_defs_builtin {prog : Prog} {name : String} [h₁ : prog.WFBuiltins] [h₂ : BuiltinC name] :
              name prog.defs
              @[simp]
              theorem Esolangs.Cornucopia.Prog.WFBuiltins.def?_builtin_eq {prog : Prog} {name : String} [h₁ : prog.WFBuiltins] [h₂ : BuiltinC name] :
              prog.def? name = some (BuiltinC.b name).def
              @[simp]
              theorem Esolangs.Cornucopia.Prog.WFBuiltins.def_builtin_eq {prog : Prog} {name : String} [h₁ : prog.WFBuiltins] [h₂ : BuiltinC name] :
              prog.def name = (BuiltinC.b name).def
              @[simp]
              theorem Esolangs.Cornucopia.Prog.WFBuiltins.arity_builtin_eq {prog : Prog} {name : String} [h₁ : prog.WFBuiltins] [h₂ : BuiltinC name] :
              prog.arity name = (BuiltinC.b name).arity
              @[simp]
              theorem Esolangs.Cornucopia.Prog.WFBuiltins.expr_builtin_eq {prog : Prog} {name : String} [h₁ : prog.WFBuiltins] [h₂ : BuiltinC name] :
              prog.expr name = (BuiltinC.b name).expr
              theorem Esolangs.Cornucopia.Prog.mem_defs_of_def? {prog : Prog} {name : String} {d : Def} (h : prog.def? name = some d) :
              name prog.defs
              theorem Esolangs.Cornucopia.Prog.hasDef_of_def? {prog : Prog} {name : String} {d : Def} (h : prog.def? name = some d) :
              prog.HasDef name
              theorem Esolangs.Cornucopia.Prog.def_of_def? {prog : Prog} {name : String} {d : Def} (h : prog.def? name = some d) :
              prog.def name = d
              theorem Esolangs.Cornucopia.Prog.arity_of_def? {prog : Prog} {name : String} {d : Def} (h : prog.def? name = some d) :
              prog.arity name = d.arity
              theorem Esolangs.Cornucopia.Prog.expr_of_def? {prog : Prog} {name : String} {d : Def} (h : prog.def? name = some d) :
              prog.expr name = d.expr
              theorem Esolangs.Cornucopia.Expr.ind {p : ExprProp} (h₁ : ∀ (i : ), p (arg i)) (h₂ : ∀ (name : String) (es : List Expr), (∀ ees, p e)p (call name es)) (e : Expr) :
              p e
              def Esolangs.Cornucopia.instDecidableEqDef.decEq (x✝ x✝¹ : Def) :
              Decidable (x✝ = x✝¹)
              Equations
              Instances For
                Equations
                Instances For
                  theorem Esolangs.Cornucopia.Builtin.all {p : BuiltinProp} :
                  (∀ (b : Builtin), p b) p succ p sub
                  theorem Esolangs.Cornucopia.Builtin.exi {p : BuiltinProp} :
                  (∃ (b : Builtin), p b) p succ p sub
                  theorem Esolangs.Cornucopia.Prog.def?_ofDefs {defs : List (String × Def)} {name : String} (h : (List.map (fun (x : String × Def) => x.1) defs).Nodup) :
                  (ofDefs defs).def? name = (Option.map Prod.snd (List.find? (fun (x : String × Def) => decide (x.1 = name)) defs)).or (Option.map Builtin.def (List.find? (fun (x : Builtin) => decide (x.name = name)) builtins))
                  theorem Esolangs.Cornucopia.CompatibleDefs.get?_fs {defs : List (String × Def)} {fs : Map String (List )} {name : String} {f : List } (H : WFDefs' defs) (H₁ : CompatibleDefs (Map.ofList defs) fs) (h : Map.get? name fs = some f) :
                  theorem Esolangs.Cornucopia.CompatibleDefs.get!_fs {defs : List (String × Def)} {fs : Map String (List )} {name : String} {f : List } (H : WFDefs' defs) (H₁ : CompatibleDefs (Map.ofList defs) fs) (h : Map.get? name fs = some f) :
                  @[simp]
                  theorem Esolangs.Cornucopia.fn_eq_fn_iff' {n : } {f g : List } {xs : List } :
                  fn n f xs = fn n g xs xs.length = nf xs = g xs
                  theorem Esolangs.Cornucopia.Expr.wf_of_le {prog : Prog} {e : Expr} {k n : } (h₁ : WF prog k e) (h₂ : k n) :
                  WF prog n e
                  theorem Esolangs.Cornucopia.isBuiltin_lit {name : String} :
                  IsBuiltin name name = "succ" name = "sub"
                  theorem Esolangs.Cornucopia.imp_fs_and_of {fs : Map String (List )} {name : String} {y z : List } {p : List Prop} {n : } (h₁ : Map.get? name fs = some (fn n y)) (h₂ : ∀ (xs : List ), xs.length = nz xs = y xs) (h₃ : Map.get! name (builtinFs fs) = fn n z∀ (xs : List ), p xs) (h₀ : ¬IsBuiltin name := by decide) (xs : List ) :
                  (xs.length = nMap.get? name fs = some (fn n y)y xs = z xs) p xs
                  @[simp]
                  theorem Esolangs.Cornucopia.Builtin.forall_imp_iff {p : StringProp} :
                  (∀ (name : String), IsBuiltin namep name) ∀ (b : Builtin), p b.name
                  @[simp]
                  theorem Esolangs.Cornucopia.Builtin.exists_and_iff {p : StringProp} :
                  (∃ (name : String), IsBuiltin name p name) ∃ (b : Builtin), p b.name
                  @[simp]
                  theorem Esolangs.Cornucopia.fn_fn_same {f : List } {n : } :
                  fn n (fn n f) = fn n f