Last active
May 12, 2022 14:55
-
-
Save digama0/78c5a2de9589d53b4667b9a75b3ca5f3 to your computer and use it in GitHub Desktop.
Revisions
-
digama0 revised this gist
May 12, 2022 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,5 +1,5 @@ // [dependencies] // metamath-knife = { git = "https://github.com/david-a-wheeler/metamath-knife", tag = "v0.3.7" } // rand = "0.8" use metamath_knife::{statement::StatementAddress, verify::ProofBuilder, Database, StatementType}; -
digama0 revised this gist
May 12, 2022 . 1 changed file with 22 additions and 23 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -32,7 +32,7 @@ struct AccessSeq { } impl AccessSeq { fn push(&mut self, i: u32) { let mut best = u32::MAX; for &j in self.seq.iter().rev() { self.temp.insert(j); @@ -42,13 +42,12 @@ impl AccessSeq { best = best.min(self.temp.len() as u32 + j.abs_diff(i)); } self.temp.clear(); if best != u32::MAX { let score = best as f64; self.sum_score += score; self.sum_log_score += score.log2(); self.sum_sqrt_score += score.sqrt(); } self.seq.push(i) } } @@ -96,26 +95,26 @@ fn main() { // Results on https://github.com/metamath/set.mm/blob/3de3ae5/set.mm // number of theorems: 42879 // // avg score: 75178012 / 3075357 = 24.4 // avg lg(score): 10750001.8 / 3075357) = 3.4955 = lg(11.2787) // avg sqrt(score): 12640434.2 / 3075357 = 4.1102 = sqrt(16.8940) // // shuffled 1: // avg score: 157481709 / 3075357 = 51.2 // avg lg(score): 12857460.5 / 3075357) = 4.1808 = lg(18.1362) // avg sqrt(score): 17549817.2 / 3075357 = 5.7066 = sqrt(32.5652) // // shuffled 2: // avg score: 157220284 / 3075357 = 51.1 // avg lg(score): 12861417.8 / 3075357) = 4.1821 = lg(18.1524) // avg sqrt(score): 17552661.4 / 3075357 = 5.7075 = sqrt(32.5758) // // completely random 1: // avg score: 565223103 / 3075357 = 183.8 // avg lg(score): 22394511.3 / 3075357) = 7.2819 = lg(155.6242) // avg sqrt(score): 40151474.7 / 3075357 = 13.0559 = sqrt(170.4559) // // completely random 2: // avg score: 565104301 / 3075357 = 183.8 // avg lg(score): 22394838.4 / 3075357) = 7.2820 = lg(155.6357) // avg sqrt(score): 40149999.7 / 3075357 = 13.0554 = sqrt(170.4433) -
digama0 revised this gist
May 12, 2022 . 1 changed file with 14 additions and 14 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -87,35 +87,35 @@ fn main() { let avg_log_score = sum_log_score / n as f64; let avg_sqrt_score = sum_sqrt_score / n as f64; println!("avg score: {sum_score} / {n} = {avg_score:.1}"); println!("avg lg(score): \ {sum_log_score:.1} / {n}) = {avg_log_score:.4} = lg({:.4})", avg_log_score.exp2()); println!("avg sqrt(score): \ {sum_sqrt_score:.1} / {n} = {avg_sqrt_score:.4} = sqrt({:.4})", avg_sqrt_score.powi(2)); } // Results on https://github.com/metamath/set.mm/blob/3de3ae5/set.mm // number of theorems: 42879 // // avg score: 4370145307 / 3075357 = 1421.0 // avg lg(score): 10750033.8 / 3075357 = 3.4955 = lg(11.2788) // avg sqrt(score): 12705970.2 / 3075357 = 4.1315 = sqrt(17.0696) // // shuffled 1: // avg score: 4452015191 / 3075357 = 1447.6 // avg lg(score): 12857388.6 / 3075357 = 4.1808 = lg(18.1359) // avg sqrt(score): 17604771.6 / 3075357 = 5.7245 = sqrt(32.7695) // // shuffled 2: // avg score: 4453096882 / 3075357 = 1448.0 // avg lg(score): 12873701.1 / 3075357 = 4.1861 = lg(18.2027) // avg sqrt(score): 17659385.1 / 3075357 = 5.7422 = sqrt(32.9731) // // completely random 1: // avg score: 4860210535 / 3075357 = 1580.4 // avg lg(score): 22395391.0 / 3075357 = 7.2822 = lg(155.6550) // avg sqrt(score): 40220315.5 / 3075357 = 13.0783 = sqrt(171.0409) // // completely random 2: // avg score: 4860319828 / 3075357 = 1580.4 // avg lg(score): 22396702.0 / 3075357 = 7.2826 = lg(155.7010) // avg sqrt(score): 40224473.6 / 3075357 = 13.0796 = sqrt(171.0762) -
digama0 revised this gist
May 12, 2022 . 1 changed file with 0 additions and 3 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -9,9 +9,6 @@ use std::ops::Range; struct Pass<'a>(&'a HashMap<StatementAddress, u32>, &'a mut AccessSeq); impl ProofBuilder for Pass<'_> { type Item = (); type Accum = (); -
digama0 revised this gist
May 12, 2022 . 1 changed file with 40 additions and 18 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,12 +1,11 @@ // [dependencies] // metamath-knife = { git = "https://github.com/david-a-wheeler/metamath-knife" } // rand = "0.8" use metamath_knife::{statement::StatementAddress, verify::ProofBuilder, Database, StatementType}; use rand::Rng; use std::collections::{hash_map::RandomState, HashMap, HashSet}; use std::ops::Range; struct Pass<'a>(&'a HashMap<StatementAddress, u32>, &'a mut AccessSeq); @@ -80,23 +79,46 @@ fn main() { db.verify_one(&mut Pass(&map, &mut acc), stmt).unwrap(); } } // replace the above for loop with this for a comparable completely random access sequence // let mut rand = rand::thread_rng(); // for _ in 0..3075357 { // acc.push(rand.gen_range(0..map.len() as u32)); // } let n = acc.seq.len(); let AccessSeq { sum_score, sum_log_score, sum_sqrt_score, .. } = acc; let avg_score = sum_score / n as f64; let avg_log_score = sum_log_score / n as f64; let avg_sqrt_score = sum_sqrt_score / n as f64; println!("avg score: {sum_score} / {n} = {avg_score:.1}"); println!("2^(avg log(score)): \ 2^({sum_log_score:.1} / {n}) = 2^{avg_log_score:.4} = {:.4}", avg_log_score.exp2()); println!("(avg sqrt(score))^2: \ ({sum_sqrt_score:.1} / {n})^2 = {avg_sqrt_score:.4}^2 = {:.4}", avg_sqrt_score.powi(2)); } // Results on https://github.com/metamath/set.mm/blob/3de3ae5/set.mm // number of theorems: 42879 // // avg score: 4370145307 / 3075357 = 1421.0 // 2^(avg log(score)): 2^(10750033.8 / 3075357) = 2^3.4955 = 11.2788 // (avg sqrt(score))^2: (12705970.2 / 3075357)^2 = 4.1315^2 = 17.0696 // // shuffled 1: // avg score: 4452015191 / 3075357 = 1447.6 // 2^(avg log(score)): 2^(12857388.6 / 3075357) = 2^4.1808 = 18.1359 // (avg sqrt(score))^2: (17604771.6 / 3075357)^2 = 5.7245^2 = 32.7695 // // shuffled 2: // avg score: 4453096882 / 3075357 = 1448.0 // 2^(avg log(score)): 2^(12873701.1 / 3075357) = 2^4.1861 = 18.2027 // (avg sqrt(score))^2: (17659385.1 / 3075357)^2 = 5.7422^2 = 32.9731 // // completely random 1: // avg score: 4860210535 / 3075357 = 1580.4 // 2^(avg log(score)): 2^(22395391.0 / 3075357) = 2^7.2822 = 155.6550 // (avg sqrt(score))^2: (40220315.5 / 3075357)^2 = 13.0783^2 = 171.0409 // // completely random 2: // avg score: 4860319828 / 3075357 = 1580.4 // 2^(avg log(score)): 2^(22396702.0 / 3075357) = 2^7.2826 = 155.7010 // (avg sqrt(score))^2: (40224473.6 / 3075357)^2 = 13.0796^2 = 171.0762 -
digama0 revised this gist
May 12, 2022 . 1 changed file with 22 additions and 5 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -69,17 +69,34 @@ fn main() { .enumerate() { map.insert(stmt.address(), i as u32); } // uncomment to shuffle // for (k, (_, v)) in map.iter_mut().enumerate() { // *v = k as u32; // } let mut acc = AccessSeq::default(); for stmt in db.statements().filter(|stmt| stmt.is_assertion()) { if stmt.statement_type() == StatementType::Provable { db.verify_one(&mut Pass(&map, &mut acc), stmt).unwrap(); } } let n = acc.seq.len(); println!("avg score: {} / {n} = {:.1}", acc.sum_score, acc.sum_score / n as f64); println!("2^(avg lg(score)): 2^({:.1} / {n}) = {:.4}", acc.sum_log_score, (acc.sum_log_score / n as f64).exp2()); println!("(avg sqrt(score))^2: ({:.1} / {n})^2 = {:.4}", acc.sum_sqrt_score, (acc.sum_sqrt_score / n as f64).powi(2)); } // Results on https://github.com/metamath/set.mm/blob/3de3ae5/set.mm // avg score: 4370145307 / 3075357 = 1421.0 // 2^(avg lg(score)): 2^(10750033.8 / 3075357) = 11.2788 // (avg sqrt(score))^2: (12705970.2 / 3075357)^2 = 17.0696 // // shuffled 1: // avg score: 4451448463 / 3075357 = 1447.5 // 2^(avg lg(score)): 2^(12843664.9 / 3075357) = 18.0799 // (avg sqrt(score))^2: (17568628.9 / 3075357)^2 = 32.6351 // // shuffled 2: // avg score: 4452744233 / 3075357 = 1447.9 // 2^(avg lg(score)): 2^(12866794.4 / 3075357) = 18.1744 // (avg sqrt(score))^2: (17636774.6 / 3075357)^2 = 32.8887 -
digama0 revised this gist
May 12, 2022 . 1 changed file with 3 additions and 18 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -74,24 +74,9 @@ fn main() { } } let n = acc.seq.len(); println!("avg score: {} / {} = {:.1}", acc.sum_score, n, acc.sum_score / n as f64); println!("avg log(score): {:.1} / {} = {:.4}", acc.sum_log_score, n, acc.sum_log_score / n as f64); println!("avg sqrt(score): {:.1} / {} = {:.4}", acc.sum_sqrt_score, n, acc.sum_sqrt_score / n as f64); } // Results on https://github.com/metamath/set.mm/blob/3de3ae5/set.mm -
digama0 revised this gist
May 12, 2022 . 1 changed file with 53 additions and 13 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,4 +1,10 @@ // [dependencies] // metamath-knife = { git = "https://github.com/david-a-wheeler/metamath-knife" } use std::{ collections::{HashMap, HashSet}, ops::Range, }; use metamath_knife::{statement::StatementAddress, verify::ProofBuilder, Database, StatementType}; @@ -21,22 +27,33 @@ impl ProofBuilder for Pass<'_> { } #[derive(Default)] struct AccessSeq { seq: Vec<u32>, temp: HashSet<u32>, sum_score: f64, sum_log_score: f64, sum_sqrt_score: f64, } impl AccessSeq { fn score(&mut self, i: u32) -> u32 { let mut best = u32::MAX; for &j in self.seq.iter().rev() { self.temp.insert(j); if self.temp.len() as u32 > best { break; } best = best.min(self.temp.len() as u32 + j.abs_diff(i)); } self.temp.clear(); best } fn push(&mut self, i: u32) { let score = self.score(i) as f64; self.sum_score += score; self.sum_log_score += score.log2(); self.sum_sqrt_score += score.sqrt(); self.seq.push(i) } } @@ -45,16 +62,39 @@ fn main() { db.parse("../mm/set.mm".into(), vec![]); db.scope_pass(); let mut map = HashMap::new(); let mut acc = AccessSeq::default(); for (i, stmt) in db .statements() .filter(|stmt| stmt.is_assertion()) .enumerate() { map.insert(stmt.address(), i as u32); if stmt.statement_type() == StatementType::Provable { db.verify_one(&mut Pass(&map, &mut acc), stmt).unwrap(); } } let n = acc.seq.len(); println!( "avg score: {} / {} = {:.1}", acc.sum_score, n, acc.sum_score / n as f64 ); println!( "avg log(score): {:.1} / {} = {:.4}", acc.sum_log_score, n, acc.sum_log_score / n as f64 ); println!( "avg sqrt(score): {:.1} / {} = {:.4}", acc.sum_sqrt_score, n, acc.sum_sqrt_score / n as f64 ); } // Results on https://github.com/metamath/set.mm/blob/3de3ae5/set.mm // avg score: 4370145307 / 3075357 = 1421.0 // avg log(score): 10750033.8 / 3075357 = 3.4955 // avg sqrt(score): 12705970.2 / 3075357 = 4.1315 -
digama0 created this gist
May 12, 2022 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,60 @@ use std::{collections::{HashMap, HashSet}, ops::Range}; use metamath_knife::{statement::StatementAddress, verify::ProofBuilder, Database, StatementType}; struct Pass<'a>(&'a HashMap<StatementAddress, u32>, &'a mut AccessSeq); /// The "null" proof builder, which creates no extra data. This /// is used for one-shot verification, where no extra data beyond the stack /// information is needed. impl ProofBuilder for Pass<'_> { type Item = (); type Accum = (); fn push(&mut self, _: &mut (), _: ()) {} fn build(&mut self, addr: StatementAddress, _: (), _: &[u8], _: Range<usize>) { if let Some(&i) = self.0.get(&addr) { self.1.push(i) } } } #[derive(Default)] struct AccessSeq(Vec<u32>, HashSet<u32>, f64); impl AccessSeq { fn score(&mut self, i: u32)-> u32 { let mut best = u32::MAX; for &j in self.0.iter().rev() { self.1.insert(j); if self.1.len() as u32 > best { break } best = best.min(self.1.len() as u32 + j.abs_diff(i)); } self.1.clear(); best } fn push(&mut self, i: u32) { self.2 += (self.score(i) as f64).log2(); self.0.push(i) } } fn main() { let mut db = Database::default(); db.parse("../mm/set.mm".into(), vec![]); db.scope_pass(); let mut map = HashMap::new(); let mut access = AccessSeq::default(); for (i, stmt) in db .statements() .filter(|stmt| stmt.is_assertion()) .enumerate() { map.insert(stmt.address(), i as u32); if stmt.statement_type() == StatementType::Provable { db.verify_one(&mut Pass(&map, &mut access), stmt).unwrap(); } } println!("{}", access.2 / access.0.len() as f64); }