From 0a766e977b49838c05ff92f9224add5b64edf5cf Mon Sep 17 00:00:00 2001
From: arthur-adjedj <arthur.adjedj@gmail.com>
Date: Tue, 1 Nov 2022 15:41:33 +0100
Subject: [PATCH] Chore : fix rebase

---
 kernel/src/command.rs      | 36 ++++++++----------------------------
 kernel/src/declaration.rs  |  2 +-
 kernel/src/environment.rs  |  4 ++--
 kernel/src/term.rs         | 22 +++++-----------------
 kernel/src/type_checker.rs | 22 +++++++++-------------
 kernel/src/universe.rs     | 10 ++++++++--
 parser/src/parser.rs       | 20 +++++---------------
 7 files changed, 38 insertions(+), 78 deletions(-)

diff --git a/kernel/src/command.rs b/kernel/src/command.rs
index 14788a47..c97df9eb 100644
--- a/kernel/src/command.rs
+++ b/kernel/src/command.rs
@@ -30,15 +30,11 @@ impl Command {
 
 #[cfg(test)]
 mod tests {
-    use crate::{num_bigint::BigUint, Command, Environment, Term};
+    use crate::{Command, Environment, Term};
 
     fn simple_env() -> Environment {
         Environment::new()
-            .insert(
-                "x".to_string(),
-                Term::Type(BigUint::from(0_u64).into()),
-                Term::Prop,
-            )
+            .insert("x".to_string(), Term::Type(0.into()), Term::Prop)
             .unwrap()
             .clone()
     }
@@ -61,22 +57,14 @@ mod tests {
         assert_eq!(
             env,
             *(simple_env()
-                .insert(
-                    "y".to_string(),
-                    Term::Prop,
-                    Term::Type(BigUint::from(0_u64).into())
-                )
+                .insert("y".to_string(), Term::Prop, Term::Type(0.into()))
                 .unwrap())
         );
     }
 
     #[test]
     fn failed_typed_define() {
-        let cmd = Command::Define(
-            "y".to_string(),
-            Some(Term::Type(BigUint::from(1_u64).into())),
-            Term::Prop,
-        );
+        let cmd = Command::Define("y".to_string(), Some(Term::Type(1.into())), Term::Prop);
         let mut env = simple_env();
 
         assert!(cmd.process(&mut env).is_err());
@@ -85,22 +73,14 @@ mod tests {
 
     #[test]
     fn successful_typed_define() {
-        let cmd = Command::Define(
-            "y".to_string(),
-            Some(Term::Type(BigUint::from(0_u64).into())),
-            Term::Prop,
-        );
+        let cmd = Command::Define("y".to_string(), Some(Term::Type(0.into())), Term::Prop);
         let mut env = simple_env();
 
         assert!(cmd.process(&mut env).is_ok());
         assert_eq!(
             env,
             *(simple_env()
-                .insert(
-                    "y".to_string(),
-                    Term::Prop,
-                    Term::Type(BigUint::from(0_u64).into())
-                )
+                .insert("y".to_string(), Term::Prop, Term::Type(0.into()))
                 .unwrap())
         );
     }
@@ -116,7 +96,7 @@ mod tests {
 
     #[test]
     fn successful_checktype() {
-        let cmd = Command::CheckType(Term::Prop, Term::Type(BigUint::from(0_u64).into()));
+        let cmd = Command::CheckType(Term::Prop, Term::Type(0.into()));
         let mut env = simple_env();
 
         assert!(cmd.process(&mut env).is_ok());
@@ -125,7 +105,7 @@ mod tests {
 
     #[test]
     fn failed_gettype() {
-        let cmd = Command::GetType(Term::Const("y".to_string()));
+        let cmd = Command::GetType(Term::Const("y".to_string(), Vec::new()));
         let mut env = simple_env();
 
         assert!(cmd.process(&mut env).is_err());
diff --git a/kernel/src/declaration.rs b/kernel/src/declaration.rs
index cda8a22a..8b300f5d 100644
--- a/kernel/src/declaration.rs
+++ b/kernel/src/declaration.rs
@@ -8,7 +8,7 @@ use crate::universe::UniverseLevel;
 /// Additionally, ty and term *should* in theory always have the same number of universe variables, and as such, only a single method is needed.
 /// However, additional checks to ensure this invariant will have to be put in place. For now, when constructing declarations, only the number of
 /// universes in ty are counted.
-#[derive(Clone, Debug)]
+#[derive(Clone, Debug, PartialEq, Eq)]
 pub struct Declaration {
     ty: Term,
     term: Option<Term>,
diff --git a/kernel/src/environment.rs b/kernel/src/environment.rs
index 93118e94..65922e70 100644
--- a/kernel/src/environment.rs
+++ b/kernel/src/environment.rs
@@ -7,7 +7,7 @@ use derive_more::From;
 use std::collections::{hash_map, HashMap};
 
 /// Global Environment, contains the term and type of every definitions, denoted by their strings.
-#[derive(Clone, Default, Debug, From)]
+#[derive(Clone, Default, Debug, From, PartialEq, Eq)]
 pub struct Environment(HashMap<String, Declaration>);
 
 impl Environment {
@@ -19,7 +19,7 @@ impl Environment {
     /// Creates a new environment binding s with (t1,t2)
     pub fn insert(&mut self, s: String, t1: Term, t2: Term) -> Result<&Self, KernelError> {
         if let hash_map::Entry::Vacant(e) = self.0.entry(s.clone()) {
-            e.insert(Declaration::make(t1, t2));
+            e.insert(Declaration::make(Some(t1), t2));
             Ok(self)
         } else {
             Err(KernelError::AlreadyDefined(s))
diff --git a/kernel/src/term.rs b/kernel/src/term.rs
index efa321a0..d9882178 100644
--- a/kernel/src/term.rs
+++ b/kernel/src/term.rs
@@ -343,22 +343,10 @@ mod tests {
         let id_te = Abs(box Type(UniverseLevel::Var(0)),box Abs(box Var(1.into()),box Var(1.into())));
         let id_zero = Abs(box Type(0.into()),box Abs(box Var(1.into()),box Var(1.into())));
         assert!(id_te.check(&id_ty, &Environment::new()).is_ok());
-        let env = Environment::new()
-            .insert("id".into(), id_te.clone().into(), id_ty.clone())
-            .unwrap();
-        assert!(Const("id".into(),vec![0.into()]).is_def_eq(&id_zero, &env).is_ok())
-    }
-
-
-    #[test]
-    fn poly_univ_id(){
-        let id_ty = Prod(box Type(UniverseLevel::Var(0)),box Prod(box Var(1.into()),box Var(2.into())));
-        let id_te = Abs(box Type(UniverseLevel::Var(0)),box Abs(box Var(1.into()),box Var(1.into())));
-        let id_zero = Abs(box Type(0.into()),box Abs(box Var(1.into()),box Var(1.into())));
-        assert!(id_te.check(&id_ty, &Environment::new()).is_ok());
-        let env = Environment::new()
-            .insert("id".into(), id_te.clone().into(), id_ty.clone())
-            .unwrap();
-        assert!(Const("id".into(),vec![0.into()]).is_def_eq(&id_zero, &env).is_ok())
+        let mut binding = Environment::new();
+        let env = binding.insert("id".into(), id_te, id_ty).unwrap();
+        assert!(Const("id".into(), vec![0.into()])
+            .is_def_eq(&id_zero, env)
+            .is_ok())
     }
 }
diff --git a/kernel/src/type_checker.rs b/kernel/src/type_checker.rs
index 7c113025..043060dc 100644
--- a/kernel/src/type_checker.rs
+++ b/kernel/src/type_checker.rs
@@ -376,12 +376,12 @@ mod tests {
     fn env_test() {
         let id_prop = Prod(box Prop, box Prod(box Var(1.into()), box Var(2.into())));
         let t = Abs(box Prop, box Abs(box Var(1.into()), box Var(1.into())));
-        let mut env = Environment::new();
-        env.insert("foo".into(), id_prop.clone(), Prop).unwrap();
+        let mut binding = Environment::new();
+        let env = binding.insert("foo".into(), id_prop.clone(), Prop).unwrap();
 
-        assert!(t.check(&Const("foo".into(), Vec::new()), &env).is_ok());
+        assert!(t.check(&Const("foo".into(), Vec::new()), env).is_ok());
         assert!(id_prop
-            .is_def_eq(&Const("foo".into(), Vec::new()), &env)
+            .is_def_eq(&Const("foo".into(), Vec::new()), env)
             .is_ok());
     }
 
@@ -400,10 +400,10 @@ mod tests {
     #[test]
     fn infer_const() {
         let id_prop = Prod(box Prop, box Prod(box Var(1.into()), box Var(1.into())));
-        let mut env = Environment::new();
-        env.insert("foo".into(), id_prop, Prop).unwrap();
+        let mut binding = Environment::new();
+        let env = binding.insert("foo".into(), id_prop, Prop).unwrap();
 
-        assert!(Const("foo".into(), Vec::new()).infer(&env).is_ok());
+        assert!(Const("foo".into(), Vec::new()).infer(env).is_ok());
         assert!(Const("foo".into(), Vec::new())
             .infer(&Environment::new())
             .is_err());
@@ -419,13 +419,9 @@ mod tests {
     #[test]
     fn univ_reduc() {
         let ty = App(
-            box Abs(box Prop, box Type(BigUint::from(0_u64).into())),
+            box Abs(box Prop, box Type(0.into())),
             box Prod(box Prop, box Var(1.into())),
         );
-        assert!(ty.conversion(
-            &Type(BigUint::from(0_u64).into()),
-            &Environment::new(),
-            0.into()
-        ))
+        assert!(ty.conversion(&Type(0.into()), &Environment::new(), 0.into()))
     }
 }
diff --git a/kernel/src/universe.rs b/kernel/src/universe.rs
index b22df581..d9660953 100644
--- a/kernel/src/universe.rs
+++ b/kernel/src/universe.rs
@@ -96,13 +96,19 @@ mod tests {
 
     #[test]
     fn univ_vars_count() {
-        assert_eq!(Max(box Succ(box Zero), box Max(box Var(0), box Var(1))).univ_vars(), 2)
+        assert_eq!(
+            Max(box Succ(box Zero), box Max(box Var(0), box Var(1))).univ_vars(),
+            2
+        )
     }
 
     #[test]
     fn subst() {
         let lvl = Max(box Succ(box Zero), box Max(box Var(0), box Var(1)));
         let subst = vec![Succ(box Zero), Zero];
-        assert_eq!(lvl.substitute(&subst), Max(box Succ(box Zero), box Max(box Succ(box Zero), box Zero)))
+        assert_eq!(
+            lvl.substitute(&subst),
+            Max(box Succ(box Zero), box Max(box Succ(box Zero), box Zero))
+        )
     }
 }
diff --git a/parser/src/parser.rs b/parser/src/parser.rs
index ca6ebf0c..2196eb24 100644
--- a/parser/src/parser.rs
+++ b/parser/src/parser.rs
@@ -1,4 +1,3 @@
-use kernel::num_bigint::BigUint;
 use kernel::{Command, KernelError, Loc, Term};
 use pest::error::{Error, LineColLocation};
 use pest::iterators::Pair;
@@ -15,16 +14,6 @@ fn convert_span(span: Span) -> Loc {
     let (x2, y2) = span.end_pos().line_col();
     Loc::new(x1, y1, x2, y2)
 }
-fn build_term_from_expr(
-    pair: Pair<Rule>,
-    known_vars: &mut VecDeque<String>,
-    //defined_vars: issue #18 TODO use a hash map of known variables
-) -> Result<Term, Box<Error<Rule>>> {
-    match pair.as_rule() {
-        Rule::Prop => Ok(Term::Prop),
-        Rule::Type => Ok(Term::Type(
-            pair.into_inner().as_str().parse::<usize>().unwrap().into(),
-        )),
 
 /// build terms from errorless pest's output
 fn build_term_from_expr(pair: Pair<Rule>, known_vars: &mut VecDeque<String>) -> Term {
@@ -32,14 +21,15 @@ fn build_term_from_expr(pair: Pair<Rule>, known_vars: &mut VecDeque<String>) ->
     let _loc = convert_span(pair.as_span());
     match pair.as_rule() {
         Rule::Prop => Term::Prop,
-        Rule::Type => Term::Type(pair.into_inner().fold(BigUint::from(0_u64).into(), |_, x| {
-            x.as_str().parse::<BigUint>().unwrap().into()
-        })),
+        Rule::Type => Term::Type(
+            pair.into_inner()
+                .fold(0.into(), |_, x| x.as_str().parse::<usize>().unwrap().into()),
+        ),
         Rule::Var => {
             let name = pair.into_inner().as_str().to_string();
             match known_vars.iter().position(|x| *x == name) {
                 Some(i) => Term::Var((i + 1).into()),
-                None => Term::Const(name),
+                None => Term::Const(name, Vec::new()),
             }
         }
         Rule::App => {
-- 
GitLab