diff --git a/.vscode/settings.json b/.vscode/settings.json index 80b15b31..0e558f80 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,6 @@ { + "editor.fontFamily": "'Roboto Mono', 'Droid Sans Mono', 'monospace', monospace, 'Droid Sans Fallback'", + "editor.fontSize": 15, "vim.insertModeKeyBindings": [ { "before": ["k", "j"], "after": [""] } ] diff --git a/flake.nix b/flake.nix index 9b6d1c59..06ec34af 100644 --- a/flake.nix +++ b/flake.nix @@ -41,7 +41,9 @@ # }; # }; - agda-mode = pkgs.vscode-utils.extensionFromVscodeMarketplace { + neovim = pkgs.neovim; + + vscode-agda-mode = pkgs.vscode-utils.extensionFromVscodeMarketplace { name = "agda-mode"; publisher = "banacorn"; version = "0.2.19"; @@ -50,7 +52,7 @@ combinedExtensionsDrv = pkgs.buildEnv { name = "vscodium-extensions"; paths = [ - agda-mode + vscode-agda-mode pkgs.vscode-extensions.vscodevim.vim ]; }; @@ -70,6 +72,7 @@ agda vscodium fix-whitespace + neovim ]; }; } diff --git a/questions.txt b/questions.txt new file mode 100644 index 00000000..35f28f68 --- /dev/null +++ b/questions.txt @@ -0,0 +1 @@ +_<_ why is one constructor allowed to only have one diff --git a/src/Homework2.agda b/src/Homework2.agda new file mode 100644 index 00000000..92b632db --- /dev/null +++ b/src/Homework2.agda @@ -0,0 +1,11 @@ +open import Relation.Binary.PropositionalEquality +open ≡-Reasoning +open import Data.Nat +open import Data.Nat.Properties + +module Homework2 where + +data Bin : Set where + O : Bin + _I : Bin → Bin + _II : Bin → Bin diff --git a/src/plfa/part1/Induction.lagda.md b/src/plfa/part1/Induction.lagda.md index bcad53b1..32c8cc9f 100644 --- a/src/plfa/part1/Induction.lagda.md +++ b/src/plfa/part1/Induction.lagda.md @@ -891,10 +891,33 @@ Show multiplication distributes over addition, that is, for all naturals `m`, `n`, and `p`. ``` --- Your code goes here *-distrib-+ : ∀ (m n p : ℕ) → (m + n) * p ≡ m * p + n * p -*-distrib-+ zero n p = {! begin (zero + n) * p ≡ zero * p + n * p ∎ !} -*-distrib-+ (suc m) n p = {! !} +*-distrib-+ zero n p = + begin + (zero + n) * p + ≡⟨ cong (_* p) (+-comm zero n) ⟩ + (n + zero) * p + ≡⟨ cong (_* p) (+-identityʳ n) ⟩ + n * p + ∎ +*-distrib-+ (suc m) n p = + begin + (suc m + n) * p + ≡⟨ cong (_* p) (+-comm (suc m) n) ⟩ + (n + suc m) * p + ≡⟨ cong (_* p) (+-suc n m) ⟩ + suc (n + m) * p + ≡⟨ cong (_* p) (cong suc (+-comm n m)) ⟩ + suc (m + n) * p + ≡⟨⟩ + p + (m + n) * p + ≡⟨ cong (p +_) (*-distrib-+ m n p) ⟩ + p + (m * p + n * p) + ≡⟨ sym (+-assoc p (m * p) (n * p)) ⟩ + p + m * p + n * p + ≡⟨⟩ + suc m * p + n * p + ∎ ``` @@ -908,6 +931,17 @@ for all naturals `m`, `n`, and `p`. ``` -- Your code goes here +*-assoc : ∀ (m n p : ℕ) → (m * n) * p ≡ m * (n * p) +*-assoc zero n p = + begin + (zero * n) * p + ∎ +*-assoc (suc m) n p = + begin + (suc m * n) * p + ≡⟨ ⟩ + + ∎ ```