Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
| Download
Try doing some basic maths questions in the Lean Theorem Prover. Functions, real numbers, equivalence relations and groups. Click on README.md and then on "Open in CoCalc with one click".
Project: Xena
Views: 18536License: APACHE
/- Copyright (c) 2019 Lucas Allen. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Lucas Allen -/ import tactic.basic open tactic -- `suggest` fails if there are no goals. example : true := begin trivial, success_if_fail { suggest }, end example (a : Prop) : a ∨ true := begin (do s ← suggest_scripts, guard $ s.head = "exact or.inr trivial"), exact or.inr trivial, end example {a a' : ℕ} (h : a == a') : a = a' := begin (do s ← suggest_scripts, guard $ s.head = "exact eq_of_heq h"), exact eq_of_heq h, end example {a b c : ℤ} (h₁ : a = b) (h₂ : b = c) : a = c := begin (do s ← suggest_scripts, guard $ "exact eq.trans h₁ h₂" ∈ s), exact eq.trans h₁ h₂, end example (n : nat) : n + 0 = n := begin (do s ← suggest_scripts, guard $ s.head = "exact rfl"), exact rfl, end example (n : nat) : n < n + 1 := begin (do s ← suggest_scripts, guard $ s.head = "exact nat.lt.base n"), exact nat.lt.base n end example (n : nat) : n < n + 2 := begin (do s ← suggest_scripts, guard $ "refine nat.lt.step _" ∈ s), refine nat.lt.step _, -- this wasn't the first result; humans still necessary :-( (do s ← suggest_scripts, guard $ s.head = "exact nat.lt.base n"), exact nat.lt.base n end example (a b : Prop) : (a ∨ true) ∧ (b ∨ true) := begin (do s ← suggest_scripts, guard $ "refine ⟨_, _⟩" ∈ s), refine ⟨_, _⟩, -- wasn't the first result, because it created two new goals { (do s ← suggest_scripts, guard $ s.head = "exact or.inr trivial"), exact or.inr trivial }, { (do s ← suggest_scripts, guard $ s.head = "exact or.inr trivial"), exact or.inr trivial }, end example (A B : Prop) (a : A) (b : unit → B) : A ∧ B := begin (do s ← suggest_scripts, guard $ s.head = "refine ⟨a, _⟩"), refine ⟨a, _⟩, replace b := b (), (do s ← suggest_scripts, guard $ s.head = "exact b"), exact b, end example {a b c : ℕ} (h₁ : a ≤ b) (h₂ : b ≤ c) : a ≤ c := begin (do s ← suggest_scripts, guard $ s.head = "exact le_trans h₁ h₂"), exact le_trans h₁ h₂ end -- Verify that `suggest` focuses on the first goal when there are multiple goals. example (a b c d e f : ℕ) (hab : a ≤ b) (hbc : b ≤ c) (hde : d ≤ e) (hef : e ≤ f) : a ≤ c ∧ d ≤ f := begin split, (do s ← suggest_scripts, guard $ s.head = "exact le_trans hab hbc"), exact le_trans hab hbc, exact le_trans hde hef end